- Egység céljai
- Háttér
- Meghatározások
- Timelines
- Kinds of Ciphers
- Titkos kulcsú kriptográfia
- Caesar Cipher
- Monoalfabetikus helyettesítés
- Homofonikus helyettesítés
- Egyszerű Vigenère
- Autókulcsos Vigenère
- Modern automatikus kulcsos kódok
- One Time Pad
- Playfair
- Four-square
- Egyszerű blokk-transzpozíció
- Oszlopos transzpozíció
- Sínkerítés
- A helyettesítés és a transzpozíció kombinálása
- Bifid
- Trifid
- Enigma
- Modern kriptográfiai módszerek
- DES
- IDEA
- RC4
- RC6
- RC6
- Blowfish
- Twofish
- AES
- Key Exchange
- NYILVÁNOS KULCSÚ Kriptográfia
- RSA kriptorendszer
- Kriptográfiai kivonatolás
- Message Authentication Codes
- Digital Signatures
- RSA digitális aláírásokhoz
- DSA
- Cryptanalysis
- Programozási példák
- JavaScript példák
- Python példák
- Java példák
Egység céljai
Háttér
Alice és Bob lehetnek emberek, de kliensek és szerverek, egyenrangú számítógépek, adattárolók, hálózati útválasztók stb. is. Mallory meghamisíthatja az egyik résztvevőt, hozzáadhat, módosíthat vagy törölhet tényleges üzeneteket, eltérítheti a kapcsolatot, szolgáltatásmegtagadást hajthat végre, rosszindulatú programokat juttathat be stb.
Célok:
- Bizalmasság:
- Hitelesítés: Eve-nek többe kell kerülnie $m$ visszaszerzése, mint amennyit $m$ ér.
- Hitelesítés:
- Integritás: Bobnak képesnek kell lennie ellenőrizni, hogy Alice küldte $m$-t.
- Integritás:
- Letagadásmentesség:
A legjobb kriptorendszerek feltételezik, hogy Eve és Mallory ismeri $E$, $D$, $c$, és ha $k_e \neq k_d$, akkor $k_e$ is. A legtöbb kriptorendszer nem támaszkodik arra, hogy az algoritmusait titokban tartják, mert:
- Ha a titkos algoritmusod veszélybe kerül (valaki elhagyhatja a csoportodat), akkor meg kell változtatnod, és ez sokkal nehezebb, mintha csak egy kulcsot változtatnál meg!
- A nyilvános algoritmusokat szakértők ezrei vizsgálhatják hibák után kutatva, így van némi bizalmad azokban, amelyek ellenállnak a vizsgálatnak.
További olvasmányok:Biztonság az ismeretlenségen keresztül,Kerchoff elve ésez a vita.
A kriptológia tanulmányozása magában foglalja a különböző kódok tervezését, a kriptoanalízis módszereit (támadásokat), a kulcscserét, a kulcshitelesítést, a kriptográfiai hashinget, a digitális aláírást és a társadalmi kérdéseket (jogi, politikai stb.). Lásd a Wikipédia kriptográfia témakörei oldalát.
NE TEGYE EZEKET EGYEDÜL A VALÓDI ALKALMAZÁSOKBAN
Szabad otthon játszani, de SOHA ne próbáljon meg saját kriptográfiát készíteni semmi valódi alkalmazáshoz. Hagyd ezt a profikra. Ha te magad is profi leszel, akkor, mmmmm, oké.
Ez egy fontos közszolgálati közlemény volt.
Meghatározások
Ismerendő szavak:
Kriptográfia A rejtjelek készítésének művészete és tudománya. Kriptanalízis A rejtjelek feltörésének művészete és tudománya, azaz $m$ kivonása $c$, $E$, $D$ és esetleg $k_e$ ismeretében. Kriptológia A kriptográfia és a kriptoanalízis tanulmányozása.
Kriptoszisztéma A titkosításra, dekódolásra és kulcsgenerálásra szolgáló algoritmusok és protokollok egy meghatározott csoportja. Példák: Cramer-Shoup kriptorendszer, Rabin kriptorendszer, Benaloh kriptorendszer, RSA kriptorendszer. Kriptográfiai rendszer Bármilyen rendszer, amely kriptográfiát használ. Cipher Egy kriptorendszerben használt algoritmus.
Zűrzavar Az a tulajdonság, hogy az egyszerű szöveg, a rejtjelezett szöveg és a kulcs közötti kapcsolat olyan bonyolult, hogy a kriptoelemző számára használhatatlan. Diffúzió Az a tulajdonság, hogy az egyszerű szövegben lévő statisztikai minták széles körben elterjednek a rejtjelezett szövegben.
Timelines
Ha szereted a történelmet….
- Wikipedia’s History of Cryptography Article
- Wikipedia’s Timeline
- Carl Ellison’s Timeline
Kinds of Ciphers
Itt van néhány hasznos kódkategória. Megjegyezzük, hogy egy adott rejtjelezés több kategóriába is tartozhat.
- Klasszikus: Olyan rejtjelezés, amely elég könnyen elvégezhető kézzel, általában karakteralapú. Más néven manuális.
- Modern: Nagyjából minden olyan rejtjelezés, amely nem klasszikus.
- Substitution: Az egyszerű szöveg minden egyes karakterét egy vagy több karakterrel helyettesítik a rejtjelezett szöveg előállításához.
- Transzpozíció: Az egyszerű szövegben lévő karakterek átrendeződnek a rejtjelezett szöveg kialakításához.
- Monoalfabetikus: Olyan helyettesítési rejtjelezés, amelyben az egyszerű szöveg egy karakterét mindig ugyanazzal a karakterrel helyettesítik.
- Polialfabétikus:
- Homofonikus:
- Poligrafikus: Karakterblokkok helyettesítése karakterblokkokkal.
- Periodikus: Olyan polialfabetikus rejtjelezés, amelyben a helyettesítési séma ismétlődik.
- Nem periodikus: Önmagyarázó, ha értjük a periodikusat.
- Blokk: A titkosítás nem karakterenként, hanem karakterblokkonként történik.
- Patak: Ismeretlen hosszúságú, általában visszacsatolást tartalmazó adatfolyamra működő titkosítás.
- Titkos kulcs: Olyan rejtjelezés, amelyben $k_e$ és $k_d$ azonosak vagy triviálisan levezethetők egymásból; megköveteli, hogy a felek titokban találkozzanak, hogy kicseréljék az általuk használt kulcsokat. Szimmetrikusnak is nevezik.
- Nyilvános kulcs: Olyan rendszer, amelyben mindenki titkosítási kulcsa nyilvánosan ismert, de a visszafejtési kulcsát titokban tartják. Aszimmetrikusnak is nevezik.
Titkos kulcsú kriptográfia
A titkos kulcsú (más néven szimmetrikus kulcsú) titkosítások sokkal gyorsabbak, mint a nyilvános kulcsúak, de a kulcskezelés hatalmas problémát jelenthet.
- Ha egy csoportban $n$ embernek kell kommunikálnia, akkor $\frac{n(n-1)}{2}$ kulcsokra van szükségük.
- A kulcsokat biztonságosan (titokban) kell elosztani.
- A kulcsokat biztonságban kell tartani.
- A kulcsokat gyakran kell cserélni, ami visszahat a terjesztési fejfájásra.
MEGJEGYZÉS
Az alábbi karakteralapú példákban 26 szimbólumos ábécét (
A..Z
) feltételezünk (az általánosság elvesztése nélkül).
Caesar Cipher
A modern szabványok szerint teljesen szánalmas és bizonytalan titkosítás. A titkosítási kulcs $k_e$ egy kis egész szám és $k_d = k_e$. A titkosításhoz adjuk hozzá a $k_e$-t minden egyes tiszta szöveg karakterhez; a dekódoláshoz vonjuk le.
ATTACKATDAWN
FYYFHPFYIFBS
Triviális a feltörés: csak kitaláljuk $k_e$.
Monoalfabetikus helyettesítés
Ahelyett, hogy egyszerűen hozzáadnánk egy fix eltolást minden karakterhez, előre kiszámíthatunk egy helyettesítési táblázatot az ábécé véletlenszerű permutációjának generálásával. Például:
ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX
Most ATTACKATDAWN
most MNNMHRMNPMDB
.
Ezt nem lehet feltörni a kulcs kitalálásával ($n!$ lehetséges kulcs van), de a frekvenciaelemzéssel bármilyen monoalfabetikus helyettesítési rejtjelezés feltörhető, feltéve, hogy az üzenet elég hosszú.
Azoknál a technikáknál, amelyek kulcsa egy permutáció, a kulcs könnyebben megjegyezhetővé tételének egyik módja, hogy kiválasztunk egy mondatot, kirakjuk annak egyedi betűit, majd sorrendben kitöltjük a hiányzó betűket. A PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL
például ezt a helyettesítési leképezést eredményezi:
PREMATUOIZNSHFLVBCDGJKQWXY
Homofonikus helyettesítés
Minden egyes nyílt szöveges betű a rejtjelezett szöveg egy vagy több szimbólumának felel meg. A célok számának arányosnak kell lennie a gyakoriságával (a frekvenciaelemzés legyőzése érdekében). Példa:
A 12 15 36 50 56 70 81 95 B 51 84 C 16 44 65 D 04 06 48 82 E 01 17 19 34 47 49 58 60 67 77 85 90 F 13 27 G 09 28 H 26 42 53 59 68 71 I 35 73 76 86 91 96 J 18 K 07 L 29 40 54 87 M 25 30 N 21 61 62 69 74 94 O 02 03 08 10 57 75 93 P 41 98 Q 97 R 32 38 43 45 80 83 S 14 22 39 79 89 99 T 00 20 23 33 46 52 72 78 88 U 11 64 66 V 37 W 63 92 X 31 Y 24 55 Z 05
A titkosításhoz véletlenszerűen válasszunk a lehetőségek közül. Példa: ATTACKATDAWN
egyik lehetséges titkosítása:
56 78 20 95 65 07 12 72 06 50 92 61
Egyszerű Vigenère
Az egyszerű eltolásos Vigenère-féle titkosítást egyáltalán nem Vigenère találta fel… úgy tűnik, hogy először Giovan Battista Bellaso írta le. A kulcs egy karakterlánc, amelyet moduláris összeadással adunk hozzá az egyszerű szöveghez, mint ebben a példában (A=0, B=1, C=2, …, Z=25):
Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI
A rejtjelezett szöveg kézzel történő előállításához használhatunk kódkereket vagy tabula recta-t.
Ez a séma nem biztonságos, mivel a kulcs ismétlődik. Ha a kulcs hossza meghatározható, a kriptoanalitikus többszörös frekvenciaelemzést végezhet (egyet a kulcs minden egyes eltolási értékére). A kulcshossz meghatározásának módszerei a Kaisiski-módszer és a Friedman-teszt.
Bináris adatok (azaz bitek sorozata) esetén a moduláris összeadás bázis-2 csak egy egyszerű xor. Példa:
Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011
Autókulcsos Vigenère
Vigenère valójában egy autokulcsos rejtjelezést hozott létre, amely erősebb, mert a kulcs soha nem ismétlődik. Ehelyett a “kulcs” a kulcskifejezésből, majd az egyszerű szövegből áll, például így:
Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU
Ez a kulcs részeként az egyszerű szöveget használta. Használhatod a rejtjelezett szöveget is. Látod, hogyan?
Modern automatikus kulcsos kódok
Az automatikus kulcsos Vigenère-kódokat nyelvi elemzéssel még mindig fel lehet törni, mert a kulcs szöveget tartalmaz, és így valószínűleg nagy gyakoriságú betűket tartalmaz. A modern autokulcsos kódok véletlenszám-generátorral generálják az eltolási értékeket. A kulcs a generátor magja.
One Time Pad
Ha a kulcs:
- olyan hosszú vagy hosszabb, mint a kódolandó üzenet
- valóban véletlenszerűen generált
- egyszer és csak egyszer használják
Akkor van egy bizonyíthatóan biztonságos rejtjelező, az úgynevezett one time pad. A tényleges algoritmusod használhat polialfabétikus helyettesítést vagy akár egyszerű xorozást is az üzenet és a kulcs között, amennyiben a fenti három kritériumnak megfelelsz.
Az egyszeri padot soha nem lehet feltörni. Ez egy tökéletes titkosítási séma, matematikai szempontból mindenképpen.
Playfair
Ez egy példa a poligrafikus helyettesítési titkosításra. karakterpárokat helyettesít. A kulcs a {A..I,K..Z} permutációja,például:
Z C B M L G D A Q E T U O K H F S X V N P I Y R W
A kódoláshoz írjuk ki a nyílt szöveget (szóközök és írásjelek nélkül), a kettős betűk közé és a végére egy X-et ragasztva, ha szükséges, hogy a szöveg egyenletes hosszúságú legyen.Ezután minden betűpárra:
- Legyen $(a,b)$ az első karakter sora és oszlopa és $(c,d)$ a második karakter sora és oszlopa.
- Ha $a \neq c$ és $b \neq d$, akkor adja vissza $(a,d)(b,c)$.
- Ha $a = c$ akkor $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
- Ha $b = d$ akkor $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.
THEN ATTACK FROM THE EAST
⇒ TH EN AT XT AC KF RO MT HE XE AS TX
⇒ UT HW GO FO DB TV YK ZK NH NA DX OF
⇒ UTHWGOFODBTVYKZKNHNADXOF
A visszafejtés a szabályokat fordítva hajtja végre. A Playfair rejtjelezés eléggé bizonytalan.
Four-square
A Playfairhez hasonlóan titkosítja a digrafákat, de valamivel erősebb, mert megengedi a kettős betűket, és nem ad fordított rejtjelezési digrafákat a fordított plaintext digrafákhoz. Példa
a b c d e G I V E M f g h i k L B R T Y l m n o p O D A H C q r s t u F K N P Q v w x y z S U W X Z P R E M A a b c d e T U O I Z f g h i k N S H F L l m n o p V B C D G q r s t u K Q W X Y v w x y z
THEN ATTACK FROM THE EAST
⇒ TH EN AT TA CK FR OM TH EE AS TX
⇒ NI VL EV FM MO BV DF NI MA VV NX
Oké, tehát valamivel erősebb, mint a Playfair, de akkor mi van? A számítógépek másodpercek, vagy talán percek alatt feltörik ezeket (elegendő rejtjelezett szöveg esetén).
Egyszerű blokk-transzpozíció
A legegyszerűbb transzpozíciós rejtjelezés az üzenetet n méretű blokkokra bontja, majd minden egyes blokkot a $(1..n)$ permutációjának megfelelően titkosítja.
GETTHATHEALTHINSPECTOR
üzenetből TGATEHATTEHLSHENIPRCOT
lesz.Oszlopos transzpozíció
Az üzenetet soronként írjuk ki egy rácsra, majd oszloponként olvassuk fel. Teljesen bizonytalan. A kulcs csak a sorok száma. Találd ki.
Sínkerítés
A sínkerítés semmivel sem jobb, mint az előző, csak viccesebb. A kulcs a sínek száma, amelyekre fel-le írjuk a tiszta szöveget, a rejtjelezett szöveget pedig úgy állítjuk elő, hogy egyszerre egy-egy sínt olvasunk be.
Példa: A "fill out and file a WS2475 form"
kódolásához 4 sínen:
f t l 4 m i u a i e 2 7 r l o n f a s 5 o l d w f
ezután kiolvasod a "ftl4miuaie27rlonfas5oldwf"
rejtjelezett szöveget. Ezt triviális feltörni. Csak találd ki $k$.
A helyettesítés és a transzpozíció kombinálása
A transzpozíció önmagában nagyon gyenge; a helyettesítés gyenge; a kettő kombinálása jobb. Sok klasszikus helyettesítési kódot keverhetsz különböző transzpozíciókkal, vagy használhatsz néhány speciális kombinációs kódot, mint például a bifid. A legtöbb híres rotoros és modern rejtjelező is ezt a kombinációt használja; valójában sokszor alkalmazzák ezeket az átalakításokat.
Bifid
Ez a betűket a koordinátáikkal helyettesíti egy rácsban, és oszlopos transzpozíciót végez a koordinátákon. Példa:
Z C B M L G D A Q E T U O K H F S X V N P I Y R W
A plaintext minden egyes betűje alá írjuk a (sor, oszlop) koordinátákat (pl, “A” az 1. sorban, 2. oszlopban; “T” a 2. sorban, 0. oszlopban stb.):
ATTACKATDAWN 122102121143 200213201244
Ezután soronként kiolvassuk, kettesével csoportosítjuk és megkeressük a rejtjelezett szöveg betűit:
122102121143200213201244 A U B A D R T B Q T A W
Trifid
Mint a Bifid, de kockán. Példa:
Z C B M L F V N P G D A Q E X I R W T U O K H S Y . J
A kódoláshoz először írjuk fel a koordinátákat:
ATTACKATDAWN 000001000022 122102121110 200210201221
000001000022122102121110200210201221 Z C Z O S F H Q V I N .
Enigma
Az Enigma a második világháború híres német rotoros gépe volt (valójában egy gépcsalád) A legtöbb változat egy polialfabetikus helyettesítési rejtjelezést valósított meg 16900-as periódussal, valamint egy plugboardot a titkosításhoz (transzpozíció). A kulcs a rotorok sorrendjéből, az egyes rotorok kezdőpozíciójából, a gyűrűbeállításokból és a plugboard beállításaiból állt (kb. 1,6 × 1020 lehetőség). Minden nap (többé-kevésbé) új kulcsot adtak ki előre a kódkönyvekben.
A szövetségesek képesek voltak feltörni a kulcsot, köszönhetően néhány gyenge pontnak a felépítésében…
- Egyetlen betű sem titkosított önmagába
- Az önellentmondás azt jelentette, hogy kevesebb volt a titkosító beállítási lehetősége
…de ami még fontosabb, sok gyengeség volt a használatában…
- Egyszerűen könnyű volt megtalálni a bölcsőket. A legtöbb üzenet időjárás-jelentéssel kezdődött.
- Az üzenetkulcsok már korán kétszer egymás után jelentek meg.
…és a zsákmányolt hajókról származó kódkönyvek megszerzésével.
Az Enigma feltörésének módjáról az NSA-nél,és aWikipedián olvashatsz.
Modern kriptográfiai módszerek
Most, hogy Shannon információelmélete, nagyon erős számítógépek, és évszázados elmélet és gyakorlat áll mögöttünk, a legtöbb modern technika:
- bites karakterláncokon működnek, nem karakterláncokon
- vigyáznak arra, hogy teljesen elfedjék az egyszerű szövegben lévő mintákat és redundanciákat
- véletlenszerű kulcsokat használnak (amelyek újra is használhatók)
- biztosítják, hogy az egyszerű szövegben bekövetkező nagyon kis változások a rejtjelezett szöveg nagy részét befolyásolják (és fordítva). Ezt nevezik AvalancheEffektusnak.
Ezeken kívül jó, ha a rejtjelező:
- hatékony
- hibatűrő
A legtöbb rejtjelező vagy blokk- vagy folyamrejtjelező. A blokkos titkosítások kitöltést igényelnek, és különböző üzemmódokban működhetnek (Lásd Schnier könyvét vagy a Wikipédia szócikkét.)
- ECB – Elektronikus kódkönyv
- CBC – Cipher Block Chaining
- CFB – Cipher Feedback
- OFB – Output Feedback
- CTR – Counter
- BC – Block Chaining
- PCBC – Propagating Cipher Block Chaining
- CBCC – Cipher Block Chaining with Checksum
.
.
DES
A Wikipedia
IDEA
A Wikipedia
RC4
A Wikipedia
RC6
A Wikipedia
RC6
A Wikipedia
Blowfish
A Wikipedia
Twofish
A Wikipedia
AES
A Wikipedia
Az új szabvány, a DES helyébe lépett. Ez volt a győztese a versenynek (2001-ben), ahol Rijndael néven nyújtották be, legyőzve aRC6, Serpent, MARS és Twofish szabványokat.
Key Exchange
Diffie és Hellman (a 2015-ös Turing-díjasok) és barátjuk, Merkle 1976-ban megmutatták, hogy lehetséges két ember számára, hogy titkos kulcsot cseréljenek anélkül, hogy titokban találkoznának:
- Alice kiválaszt egy prímszámot $n$, és ezt titokban elküldi Bobnak
- Alice kiválaszt egy prímszámot mod $n$ (hogyan kell megtalálni), az úgynevezett $g$-t, és ezt titokban elküldi Bobnak
- Alice kiválaszt egy titkos egész számot $a$, és $g^a \bmod n$-t tisztán elküldi Bobnak
- Bob kiválaszt egy titkos egész számot $b$, és $g^b \bmod n$-t tisztán elküldi Alice-nak
- Alice kiszámítja ($g^b \bmod n)^a \bmod n$ és Bob kiszámítja ($g^a \bmod n)^b \bmod n$. Ez a kulcs!(Ez $g^{ab} \bmod n$)
Ez valószínűleg biztonságos, feltéve, hogy $n$ nagyon nagy és $\frac{n-1}{2}$ szintén prímszám, mert bár Eve ismeri $g$, $n$, $g^a \bmod n$,és $g^b \bmod n$,nincs ismert hatékony módszer arra, hogy ezekből $a$ vagy $b$-t kapjunk.Ez a diszkrét logaritmus probléma, emlékszel?
Példa kis $n$ esetén:
- Alice kiválaszt $n=208799$ és $g=13$ és elküldi ezeket Bobnak
- Alice kiválaszt $a=152335$ és Bob kiválaszt $b=98113$
- Alice elküldi Bobnak $13^{152335} \bmod 208799 = 73033$
- Bob küld Alice-nek $13^{98133} \bmod 208799 = 147540$
- Alice kiszámítja $147540^{152335} \bmod 208799 = 8435$
- Bob kiszámítja $73033^{98133} \bmod 208799 = 8435$
- A titkos kulcs $8435$.
Ne csináld ezt kis $n$ értékekkel.
Általában, hacsak nem kapsz valamilyen tanúsítványt,ne próbálj meg egyedül valós rendszereket biztosítani. De persze dogo előre és tanulja meg az algoritmusokat és gyakorolja a kódolást egyelőre.
NYILVÁNOS KULCSÚ Kriptográfia
A nyilvános kulcsú titkosítások megoldják a titkos kulcsú titkosítások kulcskezelési rémálmát, a sebesség rovására. Egy $n$ fős csoportban csak $n$nyilvános kulcsra és $n$ magánkulcsra van szükség.
RSA kriptorendszer
A Diffie-Hellman nem titkosít, csak kulcsot cserél.Az RSA képes titkosítani és dekódolni. Itt van, hogyan. Mindegyik személy
- Generál két nagy prímszámot, $p$ és $q$.
- Választ egy $e$ értéket, amely viszonylag prímszám $(p-1)(q-1)$-hoz képest.
- Közzéteszi a nyilvános kulcsát $(N,e)$, ahol $N = pq$.
- Kiszámítja $d$ = $e$ moduláris inverze $(p-1)(q-1)$-hoz képest, és titokban tartja.
- Megsemmisíti $p$ és $q$.
Most ezt nézzük meg:
- Hogy Alice $m$ üzenetet küldjön Bobnak, elküldi $c = m^e \bmod N$.
- Bob ezt könnyen dekódolja, mert $m = c^d \bmod N$.
Egy triviális példa:
FIGYELEM!
Ez a példa csak illusztráció. Soha ne valósítson meg saját kriptoalgoritmust. Győződjön meg arról is, hogy megértette, milyen szörnyű a nyilvános kulcsú kriptográfia ilyen apró kulcsokkal. A valódi kulcsoknak több ezer bitesnek kell lenniük.
Használjunk egy 16 bites kulcsot (NE TEDD EZT VALÓBAN). Generáljunk két véletlenszerű 8 bites prímszámot:
$p = 163\\q = 173$
Generáljunk egy 16 bites prímszámot a kódoló exponenshez:
$e = 64013$
Most:
$n = pq = 28199 \\\d = \mathsf{modInverse}(e, (p-1)(q-1)) = 6797$
Kódoljuk a ¿Dónde está ud.?
karakterláncot. Itt van UTF-8-ban:
c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f
Dezimálban:
194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63
Most alkalmazzuk a kódoló függvényt mindegyikre::
$194^{64013}$194^{64013} \bmod 28199 = 15626$
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$\vdots$
$63^{64013} \bmod 28199 = 18384$
A kódolt szöveg:
15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384
A dekódolás:
$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$\vdots$
$16824^{6797} \bmod 28199 = 63$
Az eredeti üzenetet kapjuk vissza!
Egyébként
Mivel a szimmetrikus titkosítás sokkal gyorsabb, először generálhatunk egy titkos kulcsot, és azt egy nyilvános kulcsú kriptográfiával biztosított vonalon keresztül továbbíthatjuk. Most már minden későbbi kommunikáció a titkos kulcsot használhatja.
Kriptográfiai kivonatolás
A hash, más néven ujjlenyomat, ellenőrző összeg, üzenet digest egy bitminta (általában kb. 160 bit körül), amelyet egy üzenetből egy kriptográfiai kivonatoló függvény generál. Ahhoz, hogy a hash biztonságos vagy kriptográfiai legyen, számításilag kivitelezhetetlennek kell lennie annak, hogy
- keressünk egy olyan üzenetet, amely egy adott értékre hash-ol (onewayness)
- keressünk két olyan üzenetet, amely ugyanarra az értékre hash-ol (collision-resistance)
Matematikailag egy $H$ kriptográfiai hash-függvény egy üzenetből hash-t állít elő, $H(m) = c$, úgy, hogy $m$ nem határozható meg hatékonyan $c$-ből, és nem lehet hatékonyan olyan $m_1 \neq m_2$-t találni, hogy $H(m_1) = H(m_2)$,
Az üzenet egyetlen bitjének megváltoztatásával a kivonat teljesen és teljesen másképp néz ki.
$ cat willThis is my will.I leave 1000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum willc18feb890752c9e680c99d1e909fd761 will$ sed "s/1/9/g" will > Will$ cat WillThis is my will.I leave 9000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum Will85570bc2d0458b1f98f484261dee7d4d Will
A biztonságos hash módot nyújt annak megállapítására, hogy egy üzenetet manipuláltak-e.
Lásd Steve Friedl Illustrated Guide to Cryptpgraphic Hashes című könyvét.
Message Authentication Codes
Ezek hasonlóak a kriptográfiai hashekhez, kivéve, hogy titkos kulcsot használnak, míg a hashek csak magát az üzenetet használják.
$MAC(m, k) = c$
További információ:
- MAC-k vs. Hashes at StackOverflow
- Digital Signatures at Wikpedia
- MACs at Wikipedia
Digital Signatures
Hogyan lehet Bob biztos abban, hogy az üzenet Alice-től származik és nem valaki mástól?Úgy, hogy Alice aláírja; így. A gyakorlatban általában egy hash-t írnak alá, nem az egész üzenetet.
RSA digitális aláírásokhoz
Az Alice üzenetet küld Bobnak,
- Alice titkosítja az m-t a privát kulcsával
- Alice titkosítja Bob nyilvános kulcsával
- Bob dekódolja a privát kulcsával
- Bob dekódolja a Alice nyilvános kulcsával
$m = A(B'(B(A'(m)))$
DSA
A Wikipedia
Cryptanalysis
Ez egy nagy téma, és itt nem fogjuk tárgyalni. Ehelyett itt van egy lista a technikákról.
- Frekvenciaelemzés
- Elismert tisztaszöveges támadás
- Elismert rejtjelezett szöveges támadás
- Kiválasztott tisztaszöveges támadás
- kiválasztott kulcsos támadás
- Lineáris kriptoanalízis
- Differenciális kriptoanalízis
- lopás
- vesztegetés
- zsarolás
Programozási példák
Heh, nem fogjuk megmutatni, hogyan kell saját kriptográfiát készíteni. Megnézünk néhány ténylegesen létező könyvtárat.
IP-hálózaton keresztül továbbítod az adatokat?
TLS-t használj.
Olvass tovább, ha szeretnél néhány szórakoztató kriptokönyvtárat használni.
JavaScript példák
Hivatkozás: Node crypto
.
Python példák
Hivatkozás: Python kriptográfiai könyvtárak -Python hashlib
-Python secrets
Java példák
.