Welcome to Our Website

kriptográfia 101: szimmetrikus titkosítás


Ez az első bejegyzés egy 3 részes sorozatban a kriptográfia alapjairól. A sorozat a következőképpen körvonalazódik:

  1. szimmetrikus titkosítás
  2. adatintegritás & hitelesített titkosítás
  3. aszimmetrikus titkosítás nyilvános/privát Kulcspárokkal

ijesztő feladat lehet A számítástechnika világába merülni. Különösen egyedül!, Ebben a blogsorozatban Szeretnék magas szintű áttekintést nyújtani a kriptográfia alapjairól azok számára, akik tovább szeretnének belemerülni a témába, akik nem feltétlenül tudják, hol kezdjék. Ez az áttekintés kifejezetten a Stanford ‘ s Cryptography I tanfolyam fő elvitelén alapul, Dan Boneh tanítása szerint, elérhető a Coursera-n.

úgy döntöttem, hogy ezt a kurzust veszem, mivel blokklánc-fejlesztő vagyok, aki nem a hagyományos comp-sci háttérből származik. A főiskolán közgazdaságtant tanultam, de karrierem kezdetén inkább a számítógépes programozás felé fordultam., Amióta elkezdtem kódolás, én már egy küldetése, hogy “közelebb a számítógép” – húzza vissza a réteg absztrakció élveztem, mint egy webfejlesztő, és megérteni, hogy mi folyik a motorháztető alatt. Áttérés cryptocurrency és elosztott rendszerek web development már egy vad és csodálatos lépés ebben az irányban sok szempontból, nem utolsósorban, amely egyre jobban ismerik a fogalmak kriptográfia. Ugyanakkor szilárdabb alapot akartam., Mivel ez elég hatalmas terület, azt hittem, érdemes 70 dollárt dobni, hogy ezt az információt a Stanford Egyetem által kifejezetten kurált fórumon fogyaszthassa. Ezt a kurzust is ellenőrizheti anélkül, hogy a feladatokat ingyen átadná. Az internet csodái!

kezdjük.

lényegében a kriptográfia a biztonságos kommunikáció gyakorlata potenciális harmadik fél ellenfelek jelenlétében. A biztonságos kommunikáció fogalma 2 fő pontból áll:

  1. biztonság a hallgatás ellen: ez biztosítja az adatok titkosságát.,
  2. Adatmanipuláció elleni biztonság: ez biztosítja az adatok integritását, ami azt jelenti, hogy senki sem tudja manipulálni az elküldött adatokat, és becsapni a címzettet, hogy a manipulált adatokat érvényesnek fogadja el.

az adatok titkosítása titkosítás útján valósul meg, amely kétféle formát ölthet: szimmetrikus és aszimmetrikus.

  • a szimmetrikus titkosítás egyetlen kulcsot használ, amelyet meg kell osztani az összes kommunikáló résztvevő között.
  • az aszimmetrikus titkosítás személyes kulcsokat használ., Minden résztvevőnek megvan a saját nyilvános és privát kulcspárja az üzenetek titkosításához és dekódolásához a kommunikáció során.

(Megjegyzés: Ez a blogpost fog beszélni kriptográfia keretében szimmetrikus titkosítás. Egy nyomon követési posztban belemerülünk az aszimmetrikus titkosításba.)

adattitkosítás: kétféle titkosítás

titkosítás biztosítja az adatok titkosságát, és két fontos összetevőt foglal magában:

  1. titkos kulcs: szimmetrikus titkosítás keretében feltételezhetjük, hogy résztvevőinknek, Alice-nek és Bobnak van egy megosztott titkos kulcsa.,
  2. egy rejtjel: algoritmusok halmaza, egy a titkosításhoz, egy a dekódoláshoz.

fontos megjegyezni, hogy a titkosítási és dekódolási algoritmusok nyilvánosan ismertek. Az egyetlen dolog, amit titokban tartanak, a kulcs.

kétféle titkosítás a stream-titkosítás és a blokk-titkosítás. Mindkét rejtjel megfelelő megértésének potenciális előfeltétele a bitenkénti műveletek ismerete (biteken végrehajtott műveletek). Pontosabban, a koncepció kizárólagos – vagy (XOR). Találtam ezt a blogpost, hogy egy nagyon világos magyarázatot bitwise műveletek., Vagy megpróbálhatja megérteni a XOR fogalmát az alábbi képen. Alapvetően két bitet kombinálnak, és ha különböznek (egy 0 és egy 1) akkor 1-et eredményeznek, és ha ugyanazok, (mindkettő 0 vagy mindkettő 1) akkor 0-t eredményeznek. Innentől kezdve feltételezem, hogy az olvasó megérti a XOR fogalmát, és hogy az XOR univerzális jelölése: ⊕

Stream Cipher

a stream cipher egy szimmetrikus kulcs rejtjel, ahol a sima szöveg (bájt formában) XOR ‘ d bit byte a kulcs (szintén bájt formában) a titkosított rejtjel előállításához., Ugyanezt a folyamatot használják a titkosítás visszafejtéséhezszöveg. Tekintettel a természet a XOR művelet, ha XOR a ciphertext a kulcs, ez az eredmény vissza az eredeti plaintext.

Egy szemfüles olvasó lehet, hogy észre ebből a leírás, hogy a kulcs (jelölt a fenti illusztráció, mint a “Rejtjel stream”), valamint a plaintext biztos valami nagyon fontos közös. Így van! A kulcsnak és a szövegnek azonos hosszúságúnak kell lennie., Ez természetesen nem túl praktikus.

ahhoz, hogy egy stream rejtjel praktikusabb legyen, bevezetésre kerül a pszeudorandom generátor ötlete. A pszeudorandom generátor egy determinisztikus eljárás, amely egy még hosszabb pseudorandom eredményt vesz fel. A determinisztikus eljárás azt jelenti, hogy mindig ugyanazt a pontos kimenetet adja vissza, ha ugyanazt a bemenetet kapja(azaz az ” abc123 “a” 8474f24e0d72e1b949ffd2… ” – ot eredményezi minden alkalommal)., A pseudorandom szó azt jelenti, hogy bár a kimenet valójában nem véletlenszerű (mivel egy adott bemenet alapján határozzák meg), valójában megkülönböztethetetlen egy valóban véletlenszerű karakterlánctól. Más szóval, a bemenetek és kimenetek mintája alapján nincsenek arra utaló jelek, hogy melyik kimenet felel meg egy adott bemenetnek, és fordítva, ezért pszeudorandom. Lehetőség van arra, hogy a megosztott titkos kulcsot bemenetként használjuk egy még hosszabb pseudorandom kulcs előállításához, hogy a hosszú kulcsként XOR ‘ d legyen az ugyanolyan hosszú sima szöveggel.,

az eddig bemutatott adatfolyam-titkosítás konkrét megvalósítását “egyszeri pad”-nak nevezzük. Az egyszeri pad rendkívül fontos jellemzője, hogy az egyszeri pad kulcs csak egyszer használható. Miután másodszor használják, ezeknek az üzeneteknek a biztonsága veszélybe kerül.

az alábbi képen egy csúszda a pályáról. PRG (K) jelöli a pseudorandom szekvenciát generált a megosztott kulcs K. a szimbólum ⊕ jelöli XOR. a C a rejtjelszöveget jelöli. m üzenet (vagy egyszerű szöveg).,

Tulajdonképpen, ez a dia azt mondja, hogy ha a kulcsot kétszer használjuk, tudjuk XOR a ciphertexts együtt, hogy pontosan egyenlő XOR-zni a két plaintexts együtt. Mivel elegendő redundancia van angolul, egy hozzáértő támadó felhasználhatja ezt az információt az üzenetek teljes helyreállításához.

egy megosztott titkos kulcs fenntartásához a nonce fogalma felhasználható annak biztosítására, hogy soha ne ismételjük meg az egyszeri pad kulcsot., A nonce egy tetszőleges szám, amelyet csak egyszer lehet használni egy kriptográfiai kommunikációban. Amikor elküldi a rejtjelszöveg, a feladó is küld egy nonce át kell kombinálni a titkos kulcsot, majd használni, mint a bemenet, hogy készítsen egy külön pseudorandom kulcsot minden titkosítás.

(lehet, hogy észrevette a fenti csúsztatást az 1.támadás., Félre, azok számára, akik azon gondolkodnak, hogy mi a támadás 2, Az Attack 2 az a tény, hogy míg a stream cipher az adatok titkosságát kínálja, nem biztosítja az adatok integritását az első szakaszban meghatározottak szerint)

Block Cipher

a második típusú titkosítás egy blokk titkosítás. A blokk titkosítása rögzített hosszúságú bemenetet vesz fel, majd iteratív módon újra és újra titkosítja a sima szöveget egy másik kulcs (egy “kerek kulcs”) segítségével minden körben, és végül azonos hosszúságú titkosítást ad ki. A 3DES és az AES két példa a 48 bites, illetve 128 bites bemenetekre.,

A dia felett, azt mutatja, hogy az alapvető építészeti egy blokk cipher. Láthatjuk, hogy egy kulcs tágulási mechanizmus használják, hogy egy új kulcsot minden körben. Az üzenet (m) jelölésű sima szöveg újra és újra titkosításra kerül, amíg végül az azonos hosszúságú megfelelő rejtjelező (C) vissza nem kerül.

a rövidség kedvéért az AES-t fogom lefedni ebben a blogposztban., Bár a DES/3DES történelmileg jelentős, ma az AES-t szélesebb körben használják és elfogadják.

AES helyettesítési permutációs hálózatként épül fel. AES működik egy 128 bites blokk, egyenlő 16 bájt. Amint a fenti képen a bal felső sarokban, írjuk a 16 bájt, mint egy 4 által 4 mátrix. Ez a mátrix adatszerkezetként szolgál, amely jó az adatok keveréséhez., Minden fordulóban a folyamat a következő:

  1. először XOR a kerek kulcsot (k0), az aktuális üzenetet
  2. akkor egy helyettesítési folyamaton megyünk keresztül, ahol az adatblokkok egy adott helyettesítési táblázat alapján más blokkokkal helyettesíthetők (a fenti (1) ByteSub).
  3. átmegyünk egy permutációs rétegen, ahol a bitek permutálódnak és körbe keverednek (a fenti képen (2) ShiftRow & (3) MixColumn).
  4. ezután megismételjük ezt a folyamatot 10 fordulóban.,

a fenti képen látható, észre fogod venni, hogy az utolsó kör kihagyja a Mix oszlop lépést, XOR az eredmény a final round billentyű és kimenetek a kapott rejtjelszöveg. A dekódolás érdekében egyszerűen megfordítjuk a folyamatot. A tanfolyam magas szintű áttekintést nyújt a titkosítási folyamatról, és arra ösztönzi a hallgatókat, hogy mélyebben nézzenek bele, ha érdekli Önt. Ezért itt hagyom az AES belső működését. Azt javasoljuk, hogy az emberek vizsgálja meg a Fiestel hálózati eljárás 3DES egy szórakoztató összehasonlítani, kontraszt különböző blokk rejtjeleket.,

a hardver szempontjából, az Intel Westmere elindítása óta az Intel speciális utasításokkal tervezte processzorait az AES optimalizáláshoz, közvetlenül a hardverbe építve, az AMD pedig röviddel ezután követte a példát.

blokk rejtjelezési módok

a stream titkosítással ellentétben a blokk rejtjel csak rögzített hosszúságú bemenetet vesz igénybe. Nyilvánvalóan olyan adatokat akarunk kezelni, amelyek egyszerre nagyobbak, mint 16 bájt. Tehát ezután fontos megérteni azokat a működési módokat, amelyek alatt blokk-titkosítókat használhatunk nagy adatkészletek titkosítására., Ahhoz, hogy ezt a blokk-rejtjelet egy nagy adatkészletre alkalmazzuk, az első működési módot, amely eszébe juthat, az úgynevezett “elektronikus Kódkönyv” (EKB). Az EKB egyszerűen 16 bájtos blokkra osztja az adatokat, és egységesen végzi el az AES titkosítást. Ezt még párhuzamosan is meg lehet tenni. Nagyon gyorsan! De valójában nem túl biztonságos.

bizonytalan, mert ha egy 16 bájtos üzenet ismétlődik, a rejtjelszövegnek ismétlődő adatai is lesznek., Ez információt ad az adatainkról egy potenciális támadónak. Ezt a sebezhetőséget alkalmazhatjuk arra az esetre, amikor egy képet titkosítunk az EKB-val. Amint az alábbiakban látható, egyértelmű, hogy képünk fejlövés. Az erősen fekete területen egy sziluettet látunk a sötét hajon és az ingen keresztül.

Fontos, hogy a titkosítási rendszerek szemantikailag biztonságos., A szemantikai biztonság az a koncepció, hogy ha van egy rejtjelszövegünk, amely megfelel a két különböző plaintextus egyikének, akkor az ellenfél nem tud jobb valószínűséggel kitalálni, mint az 1/2, amelynek a rejtjelszöveg megfelel. Nyilvánvaló, hogy az EKB nem szemantikailag biztonságos. Titkosított képünk rengeteg információt ad nekünk, hogy kitaláljuk a megfelelő egyszerű képet.

az EKB példa egy egyszeri kulcsú működési módra(ami azt jelenti ,mint az egyszeri pad, egy kulcs csak egyszer használható). Egy másik biztonságosabb egyszeri kulcsos üzemmód a determinisztikus számláló mód. Ön szabadon, hogy vizsgálja meg a saját., A biztonságos működési módokra fogok lépni, amelyek lehetővé teszik a sok idejű kulcsokat!

Cipher blokk láncolás (CBC) egy működési mód, amely láncok minden 16 bájtos blokk plaintext együtt keresztül XOR ‘ ciphertext az előző plaintext a jelenlegi plaintext végrehajtása előtt a blokk titkosítás (azaz AES). Az alábbi kép tisztázza ezt a fogalmat:

először is kezdjük egy véletlenszerű IV., IV jelentése inicializálás vektor, amely lehet meghatározni, mint: a kezdeti érték elindításához használt néhány iterált folyamat. A CBC esetében a IV-nek véletlenszerűnek (tehát kiszámíthatatlannak) kell lennie, ezért minden tranzakció esetében egyedinek kell lennie. A titkosítás első blokkja egyszerűen a titkosítatlan véletlenszerű IV. a rejtjelezés többi részének előállításához először a véletlenszerű IV XOR ‘ d az első sima szöveg (m) blokkjával. Az eredmény ezután kap titkosított kerek kulcs k vissza az első blokk titkosított ciphertext (c)., Ez a rejtjelezés ezután XOR ‘ d lesz a következő plaintext (m) blokkkal, az eredmény kerek k billentyűvel van titkosítva, és visszaadja a titkosított rejtjelezés (C) második blokkját. A folyamat addig folytatódik, amíg az összes blokk titkosításra nem kerül.

visszafejteni, csak visszafordítani a folyamatot.

a CBC titkosítás fontos eleme, hogy a random IV kiszámíthatatlan., Ha az IV kiszámíthatóvá válik, akkor a titkosítási rendszerünk sebezhetővé válik a kiválasztott egyszerű támadásokkal szemben. A választott Plaintext Attack (CPA) egy olyan támadási modell, amely feltételezi, hogy a támadó tetszőleges plaintext-ekhez kaphat ciphertexteket, és ezekkel felfedheti a titkosított üzenetekkel kapcsolatos információkat. Ezért kiszámíthatatlan IV-re van szükség a CPA biztonságának biztosításához.

medve velem itt, ahogy megpróbálom elmagyarázni, hogyan fog működni ez a támadás: lehetséges, hogy végre egy kiválasztott sima szöveges támadás jelenlétében kiszámítható IV természete miatt XOR., Ha XOR ugyanazt az értéket együtt (0101 ⊕ 0101) ez mindig egyenlő 0, ezért törli ki. Szóval, ha azt gyanítja, hogy egy megfigyelt rejtjelezett c felel meg egy adott plaintext m tesztelheti a hipotézis egy kiszámítható IV. Ha a plaintext a kérdés az volt, titkosított IV1 olyan, hogy c = E(k, m ⊕ IV1) be egy új titkosítatlan, hogy titkosított, hátha kapsz egy megfelelő eredmény: c. Mivel lehet megjósolni, hogy a IV lesz, IV2, küldje m ⊕ IV1 ⊕ IV2., A CBC folyamat XOR ezt a bemenetet a következő IV, IV2 oly módon, hogy: c = E(k, M ⊕ IV1 ⊕ IV2 ⊕ IV2) így IV2 törli ki, és ismét mi titkosítja E (K, IV1 ⊕ m) ami azt eredményezi, ismét c és ha ez megtörténik, tudtuk kitalálni, hogy mi volt korábban titkosított IV1.

igazán félelmetes feladat ha átjutott — hogy – ^

ezzel, szeretném, hogy vizsgálja felül még egy blokk titkosító üzemmód, amely befejezi az első blogpost ebben 3 rész sorozat. Ha ez már egy nagy erőfeszítés, hogy ez eddig, most lehet, hogy egy jó ideje egy gyors szünetet, mielőtt folytatná!,

Ok, így áttekintettük EKB, CBC, és a sebezhetőség, de végül, és talán a legfontosabb fogom bevezetni randomizált számláló mód (CTR). Ez a legújabb, legbiztonságosabb működési mód, és hatékonyabb is, mint a CBC.

randomizált számláló mód is vesz egy véletlen IV. a IV szolgál más célra itt mégis. A kulcsunk kombinálódik (pl., via AES) egy iterált változata a IV: fent tartjuk hozzá 1 A mi IV minden iteráció, különben mi lenne, hogy egy ismételt eredmény. Addig csináljuk, amíg van egy pad, amíg a szöveges üzenetünk. Csakúgy, mint az egyszeri pad stream rejtjel, most XOR mi sima szöveges üzenetet a pseudorandom pad eredményezni rejtjelszöveg. Ha a hardver több AES motorral rendelkezik, ez rendkívül hatékony, mert párhuzamosítható. A CBC-ben minden titkosítás a ciphertext előző blokkjától függött, így lehetetlen volt párhuzamosítani.,

nem is feltétlenül kell egy blokk rejtjel, hogy összekapcsolják a IV kulcs egy pseudorandom pad. A blokk-rejtjeleknek reverzibilisnek kell lenniük. Ha alaposan megvizsgálja a véletlenszerű számláló mód mechanikáját, észre fogja venni, hogy a dekódolás nem követeli meg a F(k, IV) visszafordítását . Tekintettel a XOR természetére, csak annyit kell tennünk, hogy regeneráljuk ugyanazt a pszeudorandom padot és XOR-t a rejtjelszövegünkkel. Ezért a dekódoláshoz meg kell ismételnünk a műveletet, nem pedig megfordítani.,

Elvontan véve (eddig elkerülte elvont fogalmak), ez azt jelenti, hogy az eljárás használjuk, hogy összekapcsolják a titkos kulcs pedig IV. F(k, IV) kell egy Pszeudo Funkció (PRF) szemben egy Pszeudo-véletlen Permutáció (PRP). Valójában ezeket a fogalmakat alkalmaztuk ebben a blogpostban. Mind a PRPs, mind a PRFs determinisztikus eljárások, amelyek egy adott bemenet alapján pszeudorandom kimenetet eredményeznek. (azaz AES, XOR). A PRP azonban szigorúbb abban az értelemben, hogy reverzibilisnek kell lennie., Valójában a PRP és block rejtjel (például AES) kifejezéseket gyakran szinonimaként használják. A PRF-nek azonban nem kell reverzibilisnek lennie. Ha visszatér a korábbi diák jelenik meg ebben a bejegyzésben, akkor most megérteni a jelölés PRF és PRP.

Ez befejezi a szimmetrikus titkosítás áttekintését! Lefedtük a folyam-kódokat és a blokk-kódokat. Ezután, mivel a blokk-rejtjeleket egyszerre csak körülbelül 16 byte-on lehet végrehajtani, lefedtük a blokk-titkosítók nagy plaintexteken történő végrehajtásához használt működési módokat. Tisztáztuk a PRPs vs PRFs fogalmait is.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük