A CBC MAC -in kriptográfia egy üzenet-hitelesítési kód létrehozására szolgáló technológia blokk titkosításból . Az üzenet titkosítása valamilyen blokk titkosítási algoritmussal történik CBC módban , hogy blokkokból álló láncot hozzon létre azzal a szabállyal, hogy minden blokk az előző megfelelő (helyes) titkosításától függ. Ez a kölcsönös függés biztosítja, hogy a nyílt szöveg bármely bitjének változása olyan változást eredményezzen a végső titkosított blokkban, amelyet nem lehet előre megjósolni vagy kiszámítani, ha a blokk titkosítási kulcsa nem ismert.
Ezt használták (a DES algoritmus E helyett) az Egyesült Államok kormányzati szabványaként - DAA .
A CBC MAC algoritmus egy jól ismert módszer az üzenet hitelesítési kód generálására blokkrejtjel alapján .
Bellare, Kilian és Rogaway bebizonyította az algoritmus biztonságát ( security ) egy rögzített m * n bites üzenethosszra, ahol n az E alapblokk titkosításának hossza.
Köztudott azonban, hogy a MAC CBC nem biztonságos, hacsak az üzenet hossza nincs rögzítve. Így a változó üzenethosszúságú algoritmus többféle változatát javasolták. Először javasolták a titkosított imitációs beillesztést (EMAC) , amelyet a CBC MAC értékének E-vel és egy új kulccsal történő titkosításával kapnak . Azaz
,ahol M az üzenet, a CBC MAC kulcs és az üzenet CBC MAC értéke. M. Petrrank és Rackoff később bebizonyította, hogy az EMAC biztonságos, ha az üzenet hossza n többszöröse (Vaudenay, dekorrelációs elméletet használva , közzétéve újabb bizonyíték). Az EMAC azonban két kulcsütemezést igényel az E alapblokk-rejtjelhez.
Továbbá Black és Rogaway javasolta az XCBC-t, amelyhez csak egy kulcsütemezés szükséges az E alapblokk-rejtjelből. Az XCBC három kulcsot ad: a K1 blokkrejtjel egyik kulcsát és két, egyenként n bites kulcsot. Az XCBC-t a következő ábra írja le
A táblázat a kulcshosszak összehasonlítását mutatja.
XCBC | TMAC | OMAC | |
---|---|---|---|
Kulcs hossza | (k + 2n) bit | (k + n) bit | k bit |
Ha néhány m > 0, akkor az XCBC pontosan úgy kerül kiszámításra, mint a CBC MAC, kivéve a kulcs (n bites) XOR műveletét ("kizárólagos vagy") az utolsó blokk titkosításáig.
Ellenkező esetben (ahol ) hozzáadódik M-hez, és az XCBC pontosan úgy kerül kiszámításra, mint a fogadott üzenet MAC CBC-je. Kivéve egy másik kulcs (n bites) XOR-át az utolsó blokk titkosításáig. Az XCBC hátránya azonban, hogy három kulcsot, azaz összesen (k + 2n) bitet igényel. Ennek eredményeként Kurosawa és Iwata kétkulcsos CBC MAC-t (TMAC) javasolt. A TMAC két kulcsot fogad el, összesen (k + n) bitet: a blokk titkosítási kulcsot és a kulcsot (n bit). A TMAC-ot az XCBC-ből úgy kapjuk meg, hogy mozgatjuk (vagy lecseréljük) -ra , ahol u valamilyen nem nulla állandó, és a "•" a szorzást jelöli . Mint már említettük, az OMAC (egykulcsos CBC MAC ) csak egy K kulcsot fogad el az E blokk titkosításból. A kulcs hossza, k bit, minimális, mivel az alaprejtjelnek tartalmaznia kell egy K kulcsot, amely minden esetben k bitből áll. .
Az OMAC az OMAC1 és az OMAC2 szülőneve. Az OMAC1-et az XCBC-ből úgy kapjuk meg , hogy valamilyen nem nullától eltérő u állandót helyettesítünk a -ban , ahol L-t a következő kifejezés adja: . Az OMAC2 hasonló módon érhető el a . Hatékonyan számolhatunk egy műszakban és XOR be és , ill . Az OMAC1-et (illetve az OMAC2-t) a következő diagram írja le:
1. Ha valamilyen m > 0, akkor az OMAC pontosan úgy kerül kiszámításra, mint a CBC MAC, kivéve az XOR műveletet az utolsó blokk titkosítása előtt.
2. Ellenkező esetben (ahol ) hozzáadódik M-hez, és az OMAC pontosan úgy számítható ki, mint a fogadott M üzenet CBC MAC-je, kivéve a (illetve az utolsó blokk titkosítása előtti) XOR műveletet.
Ezenkívül a TMAC-ban a kulcs a kulcs része, míg az OMAC-ban az L nem része a kulcsnak, és a K-ből jön létre. A kulcs hosszának megőrzése miatt az OMAC biztonsága sokkal nehezebben bizonyítható, mint a TMAC, amint az alább látható. . A 2. ábrán legyen M[1] = . Ekkor L az első kimenete . L mindig újra megjelenik az utolsó mondatban. Alapvetően az L ilyen újrafelhasználása a biztonsági igazolás holtpontjához vezetne. (OCB módban és PMAC-ban univerzális hash kulcsként is használatos. L azonban elhanyagolható valószínűséggel jelenik meg valamilyen belső blokk kimeneteként.) Azonban bebizonyítottuk, hogy az OMAC ugyanolyan biztonságos, mint az XCBC, ahol a biztonsági elemzés az abszolút biztonság példája [1]. Továbbá az OMAC minden egyéb pozitív tulajdonságot kapott, amellyel az XCBC (és a TMAC) felruházott. Így az OMAC terület {0,1}, szükség van az E alapblokk titkosítás egykulcsos ütemezésére és a blokk titkosítási hívásokra (hivatkozásokra).
Az A halmaznál x←A azt jelenti, hogy x véletlenszerűen van kiválasztva A halmazból, és az A halmazból bármely érték választása egyenlő valószínűséggel. Ha a, b (∈ {0, 1}*) egyenlő méretű karakterláncok, akkor a ⊕ b a bitenkénti XOR műveletük. Ha a, b (∈ {0, 1}*) nem egyenlő karakterláncok, akkor a ◦ b az összefűzésüket jelöli . (Az egyszerűség kedvéért a következő jelölést vezetjük be: ab:= a ◦ b). Egy n-bites karakterlánc ∈ {0, 1}* esetén jelölje az << 1 = n-bites karakterláncot, amely 1 bittel balra van eltolva, eközben pedig egy >> 1 =
n bites karakterláncot, amely egy bittel jobbra van eltolva. Ha egy ∈ {0, 1}* egy karakterlánc, akkor |a| jelölje a bithosszát. Bármely bitre az a ∈ {0, 1}* karakterlánc olyan, hogy |a| ≤ n,
definiáljuk , ahol az üres karakterlánc egy blokknak számít.
Az E blokk titkosítás egy E : × → , ahol minden E(K, •) = EK(•) a permutációja , viszont a lehetséges kulcsok halmaza, n pedig a blokk hossza. A CBC MAC [6, 7] a legegyszerűbb és legismertebb algoritmus MAC létrehozására E blokkrejtjelből. Legyen az üzenet M = M[1] ◦M[2] ◦ … ◦M[m], ahol | M [1]| = |M[2]| = … = |M[m]| = n. Ekkor az M üzenet CBCK(M), CBC MAC-ja K kulcs esetén Y [m]-ként van definiálva, ahol Y [i] = EK(M[i] ⊕ Y [i − 1]) i = 1 esetén, … ,m és Y[0] = . Bellare, Kilian és Rogaway bebizonyította a CBC MAC biztonságát fix üzenethosszúságnál, mn bitnél.
Tekinthetjük az a pontot a következő módokon: (1) mint absztrakt pont az a mezőben ; (2) n-bites karakterláncként ∈ ; (3) formális polinomként bináris együtthatókkal. Ahhoz, hogy 2 pontot adjunk hozzá , vegyük figyelembe a bitenkénti XOR műveletet rajtuk. Jelölje ezt a műveletet a ⊕ b-vel. Két pont szorzásához rögzítünk néhány f(u) polinomot bináris együtthatóval és n fokszámmal. A nagyobb pontosság érdekében lexikográfiailag az első polinomot választjuk ugyanazon n fokú polinomok közül, amelyeknek minimális együtthatói vannak. Felsorolunk néhány polinomot
n = 64,
n = 128 és
n = 256
esetén.
Két a ∈ és b ∈ pont szorzásához tekintsük a és b polinomokat , és a c(u) művelet eredménye, ahol a GF(2) együtthatóit összeadjuk és megszorozzuk, és a c(u) f(u)-val való elválasztásának maradékát vesszük. Ezenkívül különösen könnyű egy a ∈ pontot megszorozni u - val. Például, ha n = 128,
csak osszuk el az a ∈ pontot u-val, szem előtt tartva, hogy a megszorozzuk u reciprokát a mezőben: . Például,
Az OMAC családot egy E : KE × → blokkrejtjel , egy n bites Cst konstans, egy H : × X → univerzális hash függvény és két egyedi ∈ X konstans határozza meg , ahol X a H függvény véges tartománya. . H, és teljesítenie kell a következő feltételt: (a konstansok véletlenszerűek. Írjunk HL(•)-t H(L, •-re).
1. Bármely y ∈ esetén az L ∈ szám olyan, hogy HL( ) = y legfeljebb néhány kellően kicsi esetén .
2. Bármely y ∈ esetén az L ∈ szám olyan, hogy HL( ) = y legfeljebb néhány kellően kicsi esetén .
3. Bármely y ∈ esetén az L ∈ szám olyan, hogy HL( ) ⊕ HL( ) = y legfeljebb néhány kellően kicsi esetén .
4. Bármely y ∈ esetén az L ∈ szám olyan, hogy HL( ) ⊕L = y legfeljebb néhány kellően kicsi esetén .
5. Bármely y ∈ esetén az L ∈ szám olyan, hogy HL( ) ⊕L = y legfeljebb néhány kellően kicsi esetén .
6. Bármely y ∈ esetén az L ∈ szám olyan, hogy HL( ) ⊕ HL(Cst2) ⊕ L = y legfeljebb néhány kellően kicsi esetén .
A következő egy pszeudokód, amely leírja az OMAC családot.
Algorithm
L ← ;
Y [0] ← ;
Partition M into M[1] ... M[m]
for i ← 1 to m − 1 do
X[i] ← M[i] ⊕ Y [i − 1];
Y [i] ← );
X[m] ← ) ⊕ Y [m − 1];
if |M[m]| = n then X[m] ← X[m] ⊕ ;
else X[m] ← X[m] ⊕ ;
T ← );
return T;
Az OMAC család algoritmusát a 3. ábra szemlélteti, ahol (•) az (1)-ben van definiálva. Az OMAC család K kulcstere: . Egy K ∈ kulcsértéket és egy M ∈ {0, 1}* üzenetet vesz fel, és egy karakterláncot ad vissza a régióból .
Az OMAC1-ben beállítjuk Cst = , (x) = L•x, = u és = , ahol a "•" szorzást jelent -ben . , és egyenértékűek. Az OMAC2 hasonló az OMAC1-hez, kivéve . , és egyenértékűek. Ezen túlmenően, és hatékonyan kiszámítható egy eltolással és egy XOR művelettel a és -ből , a (2) és (3) szerint. Könnyen belátható, hogy a Sec. Az OMAC1-ben és OMAC2-ben a 3 . Az OMAC1 és OMAC2 a 2. ábrán látható, és leírásuk a következő:
1. OMAC1 esetén:
Algorithm
L ← ;
Y [0] ← ;
Partition M into M[1] ... M[m]
for i ← 1 to m − 1 do
X[i] ← M[i] ⊕ Y [i − 1];
if |M[m]| = n
then X[m] ← X[m] ⊕ ;
else Y[i] ← E_k(X[i]);
X[m] ← ) ⊕ Y [m − 1];
if |M[m]| = n then X[m] ← X[m] ⊕ ;
else X[m] ← X[m] ⊕ ;
T ← );
return T;
1. OMAC2 esetén:
Algorithm
L ← ;
Y [0] ← ;
Partition M into M[1] ... M[m]
for i ← 1 to m − 1 do
X[i] ← M[i] ⊕ Y [i − 1];
if |M[m]| = n
then X[m] ← X[m] ⊕ ;
else Y[i] ← E_k(X[i]);
X[m] ← ) ⊕ Y [m − 1];
if |M[m]| = n then X[m] ← X[m] ⊕ ;
else X[m] ← X[m] ⊕ ;
T ← );
return T;
Legyen Perm(n) az összes permutáció halmaza -ból , és legyen P egy véletlenszerű permutáció , ha P véletlenszerű minta Perm(n-ből). Az E blokkrejtjel biztonsága számszerűsíthető a következővel: A maximális előny, amelyet egy A ellenfél nyerhet, amikor megpróbálja kivonni (egy véletlenszerűen kiválasztott K kulccsal) egy véletlenszerű P(•) permutációból, amikor a t és q lekérdezési időket számítjuk ( ami vagy ). Ezt az előnyt a következőképpen határozzuk meg.
Tegyük fel, hogy az E blokk titkosítás biztonságos, ha lényegében kicsi. Hasonlóképpen a MAC algoritmus F : × → , ahol egy kulcshalmaz, akkor F(K, •)-re írunk . Tegyük fel, hogy az ellenfél tör, ha A visszatér , ahol A soha nem kér M-et tőle . Ezután az előnyt a következőképpen határozzuk meg
ahol a maximumot átveszi az összes ellenfél, akik legfeljebb t időn belül "dolgoznak", legfeljebb q kérést adnak, és minden kérés legfeljebb μ bit. Azt mondjuk, hogy a MAC algoritmus védett (biztonságos), ha az érték elhanyagolható. Jelölje Rand(∗, n) az összes függvény halmazát {0, 1}*-tól ig . Ezt a halmazt egy valószínűségi mértékkel adjuk meg, feltételezve, hogy a Rand(∗, n) halmaz egy R véletlenszerű eleme kapcsolódik vagy társítva van az R(M)∈ véletlenszerű sor minden M ∈ {0, 1}* sorához . Ezután az előnyt úgy határozzuk meg,
hogy a maximumot átveszi az összes ellenfél, akik legfeljebb t időt „dolgoznak”, legfeljebb q kérelmet adnak le, és egy kérés legfeljebb μ bitet jelent. Ekkor azt mondhatjuk, hogy a MAC algoritmus pszeudo-véletlen, ha az érték elhanyagolható (a viprf a Variablelength Input PseudoRandom Function - változó hosszúságú pszeudo-véletlen függvények bemenetére van beállítva). Az általánosság elvesztése nélkül feltételezhető, hogy az ellenfelek soha nem kérnek a tartományon kívül , és soha nem ismétlik meg a kéréseket.
Ezután bemutatjuk a fő tételeket (bizonyítás nélküli megfogalmazásukat).
Lemma 5.1 (fő Lemma az OMAC család számára). Tegyük fel, hogy H, Cst1 és Cst2 teljesíti a Sec feltételeket. 3 elhanyagolhatóan kicsi , és legyen Cst tetszőleges n bites állandó is. Tételezzük fel azt is, hogy az OMAC családban (OMAC-család) egy P ∈ Perm(n) véletlenszerű permutációt használunk alapblokk-rejtjelként. Legyen A egy olyan ellenfél, aki legfeljebb q kérést ad le, és minden kérés legfeljebb nm bitet. (m a blokkok maximális száma az egyes lekérdezésekben.) Legyen m ≤ 2n/4. Aztán
hol . A következő eredmények mind az OMAC1-re, mind az OMAC2-re vonatkoznak. Először a következő lemmát kaptuk az 5.1. lemma є = 2−n helyére cserélve.
Lemma 5.2 (fő Lemma az OMAC család számára). Tegyük fel, hogy egy P ∈ Perm(n) véletlenszerű permutációt használunk az OMAC-ban alapblokk-rejtjelként. Legyen A egy olyan ellenfél, amely legfeljebb q kérést tesz, és minden kérés legfeljebb nm bites. Legyen m ≤ 2n/4. Ezután
megmutatjuk, hogy az OMAC pszeudo-véletlen, ha a mögöttes blokk E titkosítás biztonságos.
Megjegyzés 5.1. Legyen E : × → az OMAC-ban használt alapblokk-rejtjel. Ekkor
, ahol t' = t + O(mq) és q' = mq + 1.
Végül megmutatjuk, hogy az OMAC a szokásos értelemben vett aMAC-algoritmusként védett az 5.1 megjegyzésből. 5.1. Tétel. Legyen E : KE × → az OMAC-ban használt alapblokk-rejtjel. Ekkor ,
ahol t' = t + O(mq) és q' = mq + 1.
Az üzenet-hitelesítési kód létrehozására szolgáló legtöbb technológia az elküldött üzenet hash-függvényeként és egy speciális kulcsként jelenik meg, amelyet a küldő és a címzett ismer, ezek közé tartozik: RIPE-MAC, IBC-MAC, UMAC, VMAC. Alapvetően a CBC-MAC különbözik a stream titkosítót használó MAC-tól (ál-véletlen számgenerátorral az információfolyamot két folyamra osztják, amelyeket egymástól külön küldenek el), de a hátránya az, hogy gyenge változásokat mutat a kis változással üzenet. Vegyük fontolóra a Poly1305-AES-t is, ahol egy 128 bites AES kulcsot használnak kulcsként, egy 106 bites kettős komplement kódot, és egy 128 bites pszeudo-véletlenszerű generálást is létrehoznak. A CBC-MAC hátrányaként a kisebb biztonságot, előnyeként pedig a számítási erőforrások kevésbé igényességét jelezheti.