Blokkos titkosítás működési módja

Hitelesített titkosítás kiegészítő adatokkal (AEAD) módokSzerkesztés

Főcikk: Hitelesített titkosítás

A titoktartás és a hitelesítés egyetlen kriptográfiai primitívben való egyesítésére számos működési módot terveztek. Ilyen üzemmódok például a kiterjesztett titkosírási blokklánc (XCBC), az integritás-tudatos titkosírási blokklánc (IACBC), az integritás-tudatos párhuzamosítható üzemmód (IAPM), az OCB, az EAX, a CWC, a CCM és a GCM. A hitelesített titkosítási módokat egymenetes vagy kémenetes módokba sorolják. Egyes egymenetes hitelesített titkosítási algoritmusokat, mint például az OCB módot, szabadalmak terhelik, míg másokat kifejezetten úgy terveztek és adtak ki, hogy elkerüljék az ilyen terhelést.

Mellett néhány mód lehetővé teszi a titkosítatlan kapcsolódó adatok hitelesítését is, és ezeket AEAD (authenticated encryption with associated data) rendszereknek nevezik. Például az EAX mód egy kétszakaszos AEAD-séma, míg az OCB mód egyszakaszos.

Galois/counter (GCM)Edit

GCM

Galois/counter

Titkosítás párhuzamosítható

Igen

.

Párhuzamosítható visszafejtés

Igen

Véletlenszerű olvasási hozzáférés

Igen

Galois/counter mód (GCM) kombinálja a jól-ismert számlálós titkosítási módot az új Galois hitelesítési móddal. A legfontosabb jellemzője a hitelesítéshez használt Galois-mező szorzásának egyszerű párhuzamos kiszámíthatósága. Ez a tulajdonság a titkosítási algoritmusoknál nagyobb áteresztőképességet tesz lehetővé.

A GCM a 128 bites blokkméretű blokkos titkosításokhoz van definiálva. A Galois üzenethitelesítési kód (Galois message authentication code, GMAC) a GCM egy csak hitelesítésre szolgáló változata, amely képes inkrementális üzenethitelesítési kódot képezni. Mind a GCM, mind a GMAC tetszőleges hosszúságú inicializálási vektorokat fogadhat el. A GCM teljes mértékben ki tudja használni a párhuzamos feldolgozás előnyeit, és a GCM megvalósítása hatékonyan kihasználhatja az utasítás- vagy hardveres csővezetéket. A CBC működési módja pipeline-akadályokat okoz, amelyek hátráltatják a hatékonyságot és a teljesítményt.

A CTR-hez hasonlóan a blokkokat szekvenciálisan számozzák, majd ezt a blokkszámot kombinálják egy IV-vel, és egy E blokkchiffróval, általában AES-szel titkosítják. A titkosítás eredményét ezután XOR-olják az egyszerű szöveggel, így kapják meg a rejtjelezett szöveget. Mint minden számlálómód, ez is lényegében egy folyamkódolás, ezért lényeges, hogy minden titkosított folyamhoz más IV-t használjunk.

A rejtjelezett szövegblokkokat egy polinom együtthatóinak tekintjük, amelyet aztán egy kulcsfüggő H pontban ki kell értékelni, véges mező aritmetikával. Az eredményt ezután titkosítják, létrehozva egy hitelesítési címkét, amely az adatok integritásának ellenőrzésére használható. A titkosított szöveg ezután tartalmazza az IV-et, a rejtjelezett szöveget és a hitelesítési címkét.

Counter with cipher block chaining message authentication code (CCM)Edit

A counter with cipher block chaining message authentication code (counter with CBC-MAC; CCM) egy olyan hitelesített titkosítási algoritmus, amelynek célja a hitelesítés és a titkosság biztosítása. A CCM mód csak 128 bites blokkhosszúságú blokkchifferekhez van definiálva.

Szintetikus inicializációs vektor (SIV)Szerkesztés

A szintetikus inicializációs vektor (SIV) egy visszaélésmentes blokkchiffrírási mód.

A SIV egy belső IV-et szintetizál az S2V pszeudorandom függvény segítségével. Az S2V egy CMAC-alapú kulcsos hash, és a függvény bemenete:

  • Kiegészítő hitelesített adatok (nulla, egy vagy több AAD-mező támogatott)
  • Plaintext
  • Hitelesítési kulcs (K1).

A SIV az S2V kimenetet és az egyszerű szöveget AES-CTR használatával titkosítja, a titkosítási kulccsal (K2).

A SIV támogathatja a külső nonce alapú hitelesített titkosítást, ebben az esetben a hitelesített adatok egyik mezőjét használja erre a célra. Az RFC5297 előírja, hogy az átjárhatóság érdekében az utolsó hitelesített adatmezőt külső nonce-ként kell használni.

A két kulcs, a K1 hitelesítési kulcs és a K2 titkosítási kulcs használata miatt a SIV AEAD-változatok elnevezési sémái némi zavart okozhatnak; például az AEAD_AES_SIV_CMAC_256 a két AES-128 kulcsot tartalmazó AES-SIV-re utal, nem pedig az AES-256-ra.

AES-GCM-SIVEdit

AES-GCM-SIV az Advanced Encryption Standard egy olyan működési módja, amely a Galois/counter módhoz hasonló teljesítményt, valamint a titkosítási nonce újrafelhasználása esetén visszaélésállóságot biztosít. A konstrukciót az RFC 8452 határozza meg.

AES-GCM-SIV szintetizálja a belső IV-et. A POLYVAL Galois-féle hash-függvény segítségével a további hitelesített adatokból és az egyszerű szövegből hash-t származtat. A hash ezután AES-kulcsot titkosít, és hitelesítési címkeként és AES-CTR inicializálási vektorként használják.

AES-GCM-SIV a nagyon hasonló nevű GCM-SIV algoritmus továbbfejlesztése, néhány nagyon apró változtatással (pl. az AES-CTR inicializálásának módja), amely azonban gyakorlati előnyökkel jár a biztonsága szempontjából “Ez a kiegészítés lehetővé teszi akár 250 üzenet titkosítását ugyanazzal a kulccsal, szemben a GCM-SIV által megengedett, csak 232 üzenetet tartalmazó jelentős korlátozással.”

Csak a titkosítás módjaiSzerkesztés

Meghatározásra került számos működési mód. Ezek közül néhányat az alábbiakban ismertetünk. A titkosítási módok célja a titkosított adatokban létező minták elfedése, amint azt az ECB gyengeségének leírása is szemlélteti.

A különböző titkosítási módok a mintákat a titkosítási blokk kimeneteinek vagy más globálisan determinisztikus változóknak a következő titkosítási blokkba történő kaszkádosításával fedik el. A felsorolt módok bemeneteit a következő táblázat foglalja össze:

Módok összefoglalása
Mód Formulák Rejtjelszöveg
Elektronikus kódkönyv (ECB) Yi = F(PlainTexti, Key) Yi
Cipher block chaining (CBC) Yi = PlainTexti XOR Ciphertexti-1 F(Y, Key); Ciphertext0 = IV
Propagáló CBC (PCBC) Yi = PlainTexti XOR (Ciphertexti-1 XOR PlainTexti-1) F(Y, Key); Ciphertext0 = IV
Cipher feedback (CFB) Yi = Ciphertexti-1 Plaintext XOR F(Y, Key); Ciphertext0 = IV
Kimeneti visszajelzés (OFB) Yi = F(Yi-1, Kulcs); Y0 = F(IV, Key) Plaintext XOR Yi
Counter (CTR) Yi = F(IV + g(i), Key); IV = token() Plaintext XOR Yi

Note: g(i) bármilyen determinisztikus függvény, gyakran az identitásfüggvény.

Elektronikus kódkönyv (ECB)Edit

ECB

Elektronikus kódkönyv

Kódolás párhuzamosítható

Igen

Kódolás párhuzamosítható

.

Igen

Random read access

Igen

A titkosítási módok közül a legegyszerűbb az elektronikus kódkönyv (ECB) mód (nevét a hagyományos fizikai kódkönyvekről kapta). Az üzenetet blokkokra osztják, és minden egyes blokkot külön-külön titkosítanak.

A módszer hátránya a diffúzió hiánya. Mivel az ECB azonos egyszerű szövegblokkokat titkosít azonos rejtjelezett szövegblokkokba, nem rejti el jól az adatmintákat.

Az ECB nem ajánlott kriptográfiai protokollokban való használatra.

Egy szemléletes példa arra, hogy az ECB milyen mértékben hagyhat egyszerű szövegű adatmintákat a rejtjelezett szövegben, akkor látható, ha az ECB módot egy olyan bittérképes kép titkosítására használjuk, amely nagy, egységes színű területeket használ. Bár minden egyes képpont színe titkosítva van, a teljes kép még mindig felismerhető, mivel az eredeti azonos színű képpontok mintázata a titkosított változatban is megmarad.

Original image

Encrypted using ECB mode

Modes other than ECB result in pseudo-randomness

A harmadik kép azt mutatja be, ahogy a kép CBC-vel titkosítva megjelenhet, CTR vagy bármely más biztonságosabb móddal – megkülönböztethetetlen a véletlen zajtól. Megjegyzendő, hogy a harmadik kép véletlenszerű megjelenése nem biztosítja, hogy a képet biztonságosan titkosították; számos olyan nem biztonságos titkosítási módot fejlesztettek ki, amelyek ugyanolyan “véletlenszerű” kimenetet eredményeznének.

Az ECB mód az integritásvédelem nélküli protokollokat még fogékonyabbá teheti az újrajátszási támadásokra, mivel minden blokkot pontosan ugyanúgy dekódolnak.

Cipher block chaining (CBC)Edit

CBC

Cipher block chaining

A titkosítás párhuzamosítható

.

Nem

A visszafejtés párhuzamosítható

Igen

Random read access

Igen

Ehrsam, Meyer, Smith és Tuchman 1976-ban feltalálta a CBC (cipher block chaining) működési módot. A CBC üzemmódban az egyszerű szöveg minden egyes blokkját a titkosítás előtt XOR-olják az előző rejtjelezett szövegblokkal. Ily módon minden egyes rejtjelezett szövegblokk az addig feldolgozott összes egyszerű szövegblokktól függ. Ahhoz, hogy minden üzenet egyedi legyen, az első blokkban egy inicializáló vektort kell használni.

Ha az első blokk indexe 1, akkor a CBC titkosítás matematikai képlete

C i = E K ( P i ⊕ C i – 1 ) , {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}

C 0 = I V , {\displaystyle C_{0}=IV,}

míg a CBC dekódolás matematikai képlete

P i = D K ( C i ) ⊕ C i – 1 , {\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},}

C 0 = I V . {\displaystyle C_{0}=IV.}

PéldaSzerkesztés

A CBC volt a leggyakrabban használt működési mód. Fő hátránya, hogy a titkosítás szekvenciális (azaz nem párhuzamosítható), és hogy az üzenetet a titkosítási blokk méretének többszörösére kell feltölteni. Ez utóbbi probléma kezelésének egyik módja a rejtjelszöveglopás néven ismert módszer. Vegyük észre, hogy az egyszerű szövegben vagy az inicializációs vektorban (IV) bekövetkező egybites változás az összes következő rejtjelezett szövegblokkot érinti.

A helytelen IV-vel történő visszafejtés az első egyszerű szövegblokk sérülését okozza, de a következő egyszerű szövegblokkok helyesek lesznek. Ennek az az oka, hogy minden egyes blokkot az előző blokk rejtjelezett szövegével XOR-olnak, nem pedig az egyszerű szöveggel, így nem kell visszafejteni az előző blokkot, mielőtt azt IV-ként használnánk az aktuális blokk visszafejtéséhez. Ez azt jelenti, hogy egy tiszta szövegű blokk két szomszédos rejtjelezett szövegű blokkból is visszaállítható. Ennek következtében a dekódolás párhuzamosítható. Megjegyzendő, hogy a rejtjelezett szöveg egy bites megváltoztatása a megfelelő nyílt szövegblokk teljes sérülését okozza, és megfordítja a következő nyílt szövegblokk megfelelő bitjét, de a többi blokk sértetlen marad. Ezt a sajátosságot használják ki különböző padding oracle-támadásokban, például a POODLE-ban.

Az explicit inicializációs vektorok ezt a tulajdonságot úgy használják ki, hogy egyetlen véletlenszerű blokkot csatolnak az egyszerű szöveghez. A titkosítás a szokásos módon történik, kivéve, hogy az IV-t nem kell közölni a visszafejtési rutinnal. Bármilyen IV-t is használ a dekódolás, csak a véletlen blokk “sérül”. Ezt nyugodtan el lehet dobni, a visszafejtés többi része pedig az eredeti nyílt szöveg.

Propagáló rejtjelező blokkláncolás (PCBC)Edit

PCBC

Propagáló rejtjelező blokkláncolás

A titkosítás párhuzamosítható

.

Nem

A visszafejtés párhuzamosítható

Nem

Random read access

Nem

A propagáló titkosítási blokklánc vagy plaintext cipher-block chaining módot úgy tervezték, hogy a rejtjelezett szövegben bekövetkező kis változások a visszafejtés során korlátlanul terjedjenek, valamint a titkosítás során is. A PCBC üzemmódban minden egyes nyílt szövegblokkot a titkosítás előtt XOR-olnak az előző nyílt szövegblokkal és az előző rejtjelezett szövegblokkal. A CBC módhoz hasonlóan az első blokkban egy inicializáló vektor kerül felhasználásra.

A titkosítási és dekódolási algoritmusok a következők:

C i = E K ( P i ⊕ P i – 1 ⊕ C i – 1 ) , P 0 ⊕ C 0 = I V , {\displaystyle C_{i}=E_{K}(P_{i}\oplus P_{i-1}\oplus C_{i-1}),P_{0}\oplus C_{0}=IV,}

P i = D K ( C i ) ⊕ P i – 1 ⊕ C i – 1 , P 0 ⊕ C 0 = I V . {\displaystyle P_{i}=D_{K}(C_{i})\oplus P_{i-1}\oplus C_{i-1},P_{0}\oplus C_{0}=IV.}

A PCBC-t leginkább a Kerberos v4 és a WASTE használja, de egyébként nem gyakori. Egy PCBC módban titkosított üzenetben, ha két szomszédos rejtjelezett szövegblokkot kicserélnek, ez nem befolyásolja a következő blokkok dekódolását. Emiatt a Kerberos v5 nem használja a PCBC módot.

Cipher feedback (CFB)Edit

Full-blokk CFBEdit

CFB

Cipher feedback

A titkosítás párhuzamosítható

Nem

CFB

No

A visszafejtés párhuzamosítható

Igen

Random read access

Igen

A titkosítási visszacsatolás (CFB) üzemmód, legegyszerűbb formájában a blokkos rejtjelező teljes kimenetét használja. Ebben a változatban nagyon hasonlít a CBC-hez, a blokkos rejtjelezőt önszinkronizáló folyamrejtjelezővé teszi. A CFB visszafejtés ebben a változatban majdnem azonos a fordítva végrehajtott CBC titkosítással:

C i = { IV , i = 0 E K ( C i – 1 ) ⊕ P i , egyébként P i = E K ( C i – 1 ) ⊕ C i , {\displaystyle {\begin{aligned}C_{i}&={\begin{cases}{\text{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{otherwise}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}

CFB-1, CFB-8, CFB-64, CFB-128, stb.Edit

NIST SP800-38A a CFB-t bitszélességgel határozza meg. A CFB üzemmódhoz egy egész szám paraméterre is szükség van, amelyet s-nek jelölünk, úgy, hogy 1 ≤ s ≤ b. A CFB üzemmód alábbi specifikációjában minden egyes plaintext szegmens (Pj) és ciphertext szegmens (Cj) s bitből áll. Az s értékét néha beépítik a mód nevébe, pl. 1 bites CFB mód, 8 bites CFB mód, 64 bites CFB mód vagy 128 bites CFB mód.

Ezek a módok a mögöttes blokkchiffra kimenetét csonkítják.

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

I i = ( ( ( I i – 1 ≪ s ) + C i ) mod 2 b , {\displaystyle I_{i}={\big (}(I_{i-1}\ll s)+C_{i}{\big )}{\bmod {2}}}^{b},}

C i = MSB s ( E K ( I i – 1 ) ) ) ⊕ P i , {\displaystyle C_{i}=\operatornév {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus P_{i},}

P i = MSB s ( E K ( I i – 1 ) ) ) ⊕ C i , {\displaystyle P_{i}=\operatornév {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus C_{i},}

A CFB-1 önszinkronizálónak és a rejtjelezett szöveg elvesztésével szemben ellenállónak tekinthető; “Ha az 1 bites CFB módot használjuk, akkor a szinkronizáció automatikusan helyreáll b+1 pozícióval a beszúrt vagy törölt bit után. Az s más értékei esetén a CFB módban és az ebben az ajánlásban szereplő egyéb titoktartási módok esetén a szinkronizációt külsőleg kell helyreállítani.” (NIST SP800-38A). Vagyis 1 bit elvesztése egy 128 bit széles blokkchiffernél, mint az AES, 129 érvénytelen bitet tesz érvénytelenné, mielőtt érvényes biteket bocsátana ki.

A CFB néhány speciális, a megadottaktól eltérő esetben is önszinkronizálódhat. Például egy egybites változás a CFB-128-ban egy alapul szolgáló 128 bites blokkos rejtjelezővel két blokk után újraszinkronizálódik. (A CFB-128 stb. azonban nem kezeli kegyesen a bitvesztést; az egy bites veszteség miatt a dekódoló elveszíti az összehangolást a titkosítóval)

CFB más módokhoz képestSzerkesztés

A CBC módhoz hasonlóan a nyílt szövegben bekövetkező változások örökké terjednek a rejtjelezett szövegben, és a titkosítás nem párhuzamosítható. A CBC módhoz hasonlóan a visszafejtés is párhuzamosítható.

CFB, OFB és CTR két közös előnye a CBC móddal szemben: a blokkos rejtjelezőt mindig csak a titkosítás irányában használjuk, és az üzenetet nem kell a rejtjelező blokk méretének többszörösére kitölteni (bár a rejtjelező szöveglopás a CBC mód esetében is használható, hogy a kitöltés feleslegessé váljon).

Kimeneti visszacsatolás (OFB)Edit

OFB

Kimeneti visszacsatolás

A titkosítás párhuzamosítható

Nem

Visszafejtés. párhuzamosítható

Nem

Random read access

Nem

A kimeneti visszacsatolás (OFB) üzemmód a blokkos titkosítást szinkron stream titkosítássá alakítja. Kulcsfolyam-blokkokat generál, amelyeket aztán a rejtjelezett szöveg megszerzéséhez XOR-olnak az egyszerű szövegblokkokkal. A többi folyamkódoláshoz hasonlóan a rejtjelezett szövegben egy bit felfordítása ugyanott egy felfordított bitet eredményez a nyílt szövegben. Ez a tulajdonság teszi lehetővé, hogy sok hibajavító kód akkor is normálisan működjön, ha a titkosítás előtt alkalmazzák.

Az XOR művelet szimmetriája miatt a titkosítás és a visszafejtés pontosan ugyanaz:

C j = P j ⊕ O j , {\displaystyle C_{j}=P_{j}\oplus O_{j},}

P j = C j ⊕ O j , {\displaystyle P_{j}=C_{j}\oplus O_{j},}

O j = E K ( I j ) , {\displaystyle O_{j}=E_{K}(I_{j}),}

I j = O j – 1 , {\displaystyle I_{j}=O_{j-1},}

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

Minden kimeneti visszacsatolásos blokkchiffra művelet függ az összes előzőtől, ezért nem végezhető párhuzamosan. Mivel azonban az egyszerű szöveg vagy a rejtjelezett szöveg csak a végső XOR-hoz használatos, a blokkrejtjelezési műveletek előre elvégezhetők, így az utolsó lépés párhuzamosan végezhető, amint az egyszerű szöveg vagy a rejtjelezett szöveg rendelkezésre áll.

Egy OFB módú kulcsfolyamot úgy lehet előállítani, hogy CBC módot használunk, bemenetként egy állandó nullás karakterláncot használva. Ez azért lehet hasznos, mert lehetővé teszi a CBC mód gyors hardveres megvalósításainak használatát az OFB módú titkosításhoz.

A CFB módhoz hasonlóan az OFB mód részleges blokkot visszacsatolásként használó használata 232-szeresére vagy még többszörösére csökkenti az átlagos ciklushosszúságot. A Davies és Parkin által javasolt és kísérleti eredményekkel alátámasztott matematikai modell azt mutatta, hogy csak teljes visszacsatolással érhető el az elérhető maximumhoz közeli átlagos ciklushossz. Ezért a csonka visszacsatolás támogatását törölték az OFB specifikációjából.

Counter (CTR)Edit

CTR

Counter

Párhuzamosítható titkosítás

.

Igen

Titkosítás párhuzamosítható

Igen

Random read access

Igen

Megj: A CTR mód (CM) egészszámos számláló mód (ICM) és szegmentált egészszámos számláló mód (SIC) néven is ismert.

Az OFB-hez hasonlóan a számláló üzemmód a blokkos rejtjelezést folyam rejtjelezéssé alakítja. A következő kulcsfolyam blokkot egy “számláló” egymást követő értékeinek titkosításával generálja. A számláló lehet bármilyen függvény, amely olyan szekvenciát állít elő, amely garantáltan nem ismétlődik hosszú ideig, bár a legegyszerűbb és legnépszerűbb egy tényleges, egyesével növelhető számláló. Egy egyszerű determinisztikus bemeneti függvény használata régebben ellentmondásos volt; a kritikusok azzal érveltek, hogy “a kriptorendszer szándékos kitétele egy ismert szisztematikus bemenetnek szükségtelen kockázatot jelent”. Manapság azonban a CTR mód széles körben elfogadott, és az esetleges problémákat a mögöttes blokkos rejtjelező gyengeségének tekintik, amelytől elvárják, hogy a bemenet szisztematikus torzításától függetlenül biztonságos legyen. A CBC mellett a CTR mód egyike a Niels Ferguson és Bruce Schneier által ajánlott két blokkos titkosítási módnak.

A CTR módot 1979-ben Whitfield Diffie és Martin Hellman vezette be.

A CTR mód az OFB-hez hasonló tulajdonságokkal rendelkezik, de a visszafejtés során véletlen hozzáférés tulajdonságát is lehetővé teszi. A CTR mód jól alkalmazható többprocesszoros gépen, ahol a blokkok párhuzamosan titkosíthatók. Továbbá nem szenved az OFB-t érintő rövid ciklusú problémától.

Ha az IV/nonce véletlenszerű, akkor a számlálóval együtt bármilyen invertálható művelettel (összefűzés, összeadás vagy XOR) kombinálhatók a tényleges egyedi számlálóblokk előállításához a titkosításhoz. Nem véletlenszerű nonce (például csomagszámláló) esetén a nonce-t és a számlálót össze kell kapcsolni (pl. a nonce-t a 128 bites számlálóblokk felső 64 bitjében, a számlálót pedig az alsó 64 bitben kell tárolni). A nonce és a számláló egyszerű összeadása vagy XOR-olása egyetlen értékké sok esetben megtörné a biztonságot a választott nyílt szöveges támadás esetén, mivel a támadó képes lehet manipulálni a teljes IV-számláló párost, hogy ütközést idézzen elő. Amint a támadó ellenőrzése alá vonja az IV-számláló párost és az egyszerű szöveget, a rejtjelezett szöveg XOR-ja az ismert egyszerű szöveggel olyan értéket adna, amely az azonos IV-számláló párral közös másik blokk rejtjelezett szövegével XOR-olva visszafejtené az adott blokkot.

Megjegyezzük, hogy a nonce ebben az ábrában egyenértékű a többi ábrán szereplő inicializációs vektorral (IV). Ha azonban az eltolási/helymeghatározási információ sérült, akkor az ilyen adatok részleges helyreállítása lehetetlen lesz a bájteltolódástól való függés miatt.

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

Az e-mail-címet nem tesszük közzé.