Kryptoanalýza kvázigrupovej hašovacej funkcie
01. September, 2010, Autor článku: Slaminková Ivana, Informačné technológie, Študentské práce
Ročník 3, číslo 9
Pridať príspevok
Táto práca je zameraná na kryptoanalýzu hašovacej funkcie založenej na kvázigrupách, ktorá bola prezentovaná v [2], [3]. Článok nadväzuje na prácu [6], ktorá sa zaoberá analýzou použítia kvázigrupy modulárneho odčítania. Skúmanou oblasťou je použitie kvázigrupy izotonej s kvázigrupou modulárneho odčítania. V práci sa zaoberáme konštrukciou hašovacej funkcie a prezentujeme samotný útok.
1. Úvod
Hašovacie funkcie sú v informatike veľmi dobre známe a v modernej kryptografii zohrávajú dôležitú rolu. Ide o funkcie, ktoré transformujú vstupný raťazerc ľubovoľnej dĺžky na výstupný reťazec fixnej dĺžky, ktorému hovoríme digitálny odtlačok.
Definícia 1 [5] Nech je konečná množina slov nad abecedou . Jednocestná hašovacia funkcia (angl. “One-Way Hash Function OWHF”) je funkcia , ktorá spĺňa nasledujúce podmienky:
- Argument môže byť ľubovoľnej dĺžky a výsledný odtlačok má fixnú dĺžku bitov.
Dnes je $latex m \geq 160, \ldots, 256. - Hašovacia funkcia je jednocestá, t.j. pre daný digitálny odtlačok je “tažké” (v reálnom čase výpočtovo nerealizovateľné) nájsť takú správu , že (n8jdenie vzoru; angl. “preimage resistance”) a k danej správe je “ťažké” nájsť takú správu , že a (nájdenie druhého vzoru; angl. “second preimage resistance”).
Podľa počtu vstupov, delíme hašovacie funkcie na nekľúčové a kľúčové. Hašovacie funkcie, ktorých vstupom je správa, ktorej odtlačok chceme získať, nazývame nekľúčové alebo MDCs (Manipulation Detection Codes). Ak je vstupom správa a tajný kľúč, ide o kľúčové hašovacie funkcie, ktorým taktiež hovoríme MACs (Message Autentication Codes).
Bezpečná hašovacia funkcia vytvára jedinečný vzťah medzi vstupom a digitálnym odtlačkom. Je však zrejmé, že z viacerých rôznych vstupov môžeme dostať ten istý digitálny odtlačok, nakoľko ide o zobrazenie z väčšej množiny do menšej. Práve preto musí byť zaručené, aby boli tieto vstupy ťažko identifikovateľné, teda aby bolo zložité nájsť kolíziu.
Definícia 2 [5] Hašovacia funkcia odlná voči kolíziám (angl. “Collision Resistant Hsh Function CRHF”) ej taká hašovacia funkcia , pre ktorú je “ťažké” nájsť také dve rôzne správy že (angl. “collision resistance”).
V kryptografii sa v posledných rokoch objavilo niekoľko kryptosystémov založených na kvázigrupách, aj keď takéto riešenie nie je príliš bežné. Ako je však ukázané v [4], práve použitie kvázigrúp v dizajne S-boxov, môže predstavovať nové riešenia v návrhu blokových šifier.
Kvázigrupy môžeme použiť aj pri návrhu hašovacích funkcií, ako vidíme v [2], [3].
Definícia 3 [1] Štruktúra , sa nazýva konečná kvázigurpa rádu ak platí, že pre ktorékoľvek dva dané prvky , rovnosť a má práve jedno riešenie. Potom Caleyho tabuľka konečnej kvázigrupy rádu je latinský štvorec, t.j. pole s vlastnosťou, že každý riadok a každý stĺpec obsahuje permutáciu prvkov z množiny .
Definícia 4 [1] Nech () a () sú dve konecné kvázigrupy. Usporiadaná trojica () bijektívnych zobrazení množiny na množinu sa nazýva izotópia () na (), ak , pre všetky . Kvázigrupy () a () potom nazývame izotopné.
2. Konštrukcia
Konštrukcia [2], [3] Nech ( ) je konecná kvázigrupa. Nech správa, ktorej odtlacok chceme získat, je postupnost prvkov () z kvázigrupy . Nech je množina všetkých konecných slov nad . Hašovacia funkcia je daná vztahom:
, kde .
Príklad 1 Nech a nech operácia na je definovaná tabulkou 1. Nech a nech správa, ktorej odtlacok chceme vypocítat, je . Potom je odtlacok vypocítaný nasledovne:
.
Tabulka 1: Caleyho tabulka operácie definovanej na .
0 | 1 | 2 | 3 | |
0 | 0 | 2 | 1 | 3 |
1 | 2 | 3 | 0 | 1 |
2 | 1 | 0 | 3 | 2 |
3 | 3 | 1 | 2 | 0 |
Takéto hašovanie nám so sebou prináša obrovské požiadavky na pamät. K získaniu odtlacku správy, by sme museli uložit tabulku o velkosti prvkov, pričom za dnes bezpečnú dlžku odtlačku sa považuje 160 – 256 bitov. Túto pamätovú nárocnost rieši špeciálna kvázigrupa, kvázigrupa modulárneho odcítania. Operácia definovaná na je daná predpisom:
Tabulka 2: Tabulka kvázigrupy modulárneho odcítania pre .
0 | 1 | 2 | 3 | |
0 | 0 | 3 | 2 | 1 |
1 | 1 | 0 | 3 | 2 |
2 | 2 | 1 | 0 | 3 |
3 | 3 | 2 | 1 | 0 |
Tým, že použijeme jednoducho vypocítatelnú operáciu , môžeme používat kvázigrupy s velkým poctom prvkov. V [6] sa podarilo ukázat, že hašovacia funkcia založená na kvázigrupe modulárneho odcítania nie je spolahlivým riešením. Kvôli zvýšeniu bezpecnosti sa preto do návrhu hašovacej funkcie zavádzajú izotopné kvázigrupy.
Definícia 5 Nech (), , je kvázigrupa modulárneho odcítania. Nech a sú známe permutácie. Nech () izotopná s kvázigrupou (). Kvázigrupová operácia v () môže byt zapísaná ako:
.
Generovanie permutácií sa realizuje tak, že sa postupnost prvkov rozdelí na niekolko castí a tie sa rotujú v rôznych smeroch. V [2] a [3] sú prezentované metódy , ktoré generujú požadované permutácie a .
Metóda realizuje výpocet permutácie , co znamená . Podobným spôsobom sú realizované aj dalšie dve permutácie a . Metódy sú uvedené v jazyku C++.
Metóda na výpocet permutácie
ZZ Quasigroup::P1(ZZ x)
{
if(x < Dim2*2) { if (x & 1) (x & 1) { x = 2*((x/2 + 1) % Dim2) + 1; } else { x = 2*((x/2 + Dim2 - 1) % Dim2); } } return x;
}
Metóda na výpocet permutácie
ZZ Quasigroup::P2(ZZ x)
{
bool Shift = m_Dim % 2 >= 1;
if (x < Dim3*3) { switch (x % 3) { case 0: x = 3 * ((x/3 + Dim3/3) % Dim3); break; case 1: x = (3 * (Dim3 - x/3)) + 1; break; case 2: x = (3 * ((x/3 + Dim3 - 1)% Dim3))+ 2; break; }
}
else
{
{
if (x == (Dim3 * 3 + 1))
{
x = (Dim3 * 3) + 2;
}
else
{
x = (Dim3 * 3) + 1;
}
}
}
if (Shift)
{
x = (x + Dim3) % Dim3;
}
return x;
}
Metóda na výpocet permutácie
ZZ QuasiGroup::P3(ZZ x)
{
ZZ Dim2 = m_Dim / 2;
x = (x + Dim2 - 1) % m_Dim;
return x;
}
2.1 Príklad hašovania
Príklad 2 Nech (), , je kvázigrupa modulárneho odcítania s Caleyho tabulkou danou v tabulke 1. Nech , a . Caleyho tabulka kvázigrupy () izotopnej s kvázigrupou () je zobrazená v tabulke 3.
Tabulka 3: Caleyho tabulka kvázigrupy ( ) .
0 | 1 | 2 | 3 | |
0 | 0 | 2 | 3 | 1 |
1 | 3 | 1 | 0 | 2 |
2 | 1 | 0 | 2 | 3 |
3 | 2 | 3 | 1 | 0 |
Nech a nech správa, ktorej odtlacok chceme získat je . Potom je odtlačok vypočítaný nasledovne:
3. Útok na hašovaciu funkciu
Vlastnosť, ktorú musí nevyhnutne spĺňať každá hašovacia funkcia, je odolnosť voči kolízii. Náš útok preto zameriame na overenie tejto vlastnosti. Pokúsime sa nájst dve správy s identickým odtlačkom.
Nech je známym parametrom hašovacej funkcie a majme správu , , . Označme digitálny odtlačok ako [6].
Falošnú správu môžeme vytvoriť pridaním predpony alebo prípony k pôvodnej správe alebo môžeme vytvoriť äplne novú správu, nezávislú na pôvodnej.
3.1 Pridanie predpony / prípony
Pridaním predpony môže falošná správa vyzerať ako , [6]. Na základe toho musí platiť, že . Falošnú správu môžeme taktiež vytvoriť pridaním prípony a môže vyzerať ako , , [6]. Na základe toho musí platiť, že . Môžeme si všimnúť, že všetky prvky predpony, resp. prípony môžeme zvoliť ľubovoľne, s výnimkou jedného (na ľubovoľnom mieste), ktorý je potrebné určiť. Nech a nech Potom potrebujeme nájsť také a , aby platilo .
3.2 Vytvorenie úplne novej správy
Vytvorme novú správu Prvky Našou úlohou je teda nájsť také aby ,
,
,
,
Rovnako vieme chýbajúci prvok odvodiť aj pri pridaní predpony, resp. prípony k pôvodnej správe z podkapitoly 3.1.
.
.
Ako vidíme, zložitosť nájdenia správneho prvku spočíva v nájdení inverzných permutácií a , či už vytvoríme úplne novú správu alebo doplníme pôvodnú správu o predponu alebo príponu. Permutáciu invertovať nepotrebujeme. Pre obidva tieto typy vytvorenia novej správy je potom zložitosť útoku rovnaká. Tiež vidíme, že ani známy parameter takto zvoleného návrhuhašovacej funkcie, nijako neovplyvní zložitosť hľadania kolízie, či už ho poznáme alebo nie.
3.3 Hladanie inverzných permutácií
Je známe, že invertovanie permutácií je vo všeobecnosti náročný problém. Keď sa však podrobnejšie pozrieme na metódy generovania permutícií z kapitoly 2, prichádzame na zaujímavý fakt. Metóda na generovanie permutácie je navrhnutá tak, že permutáciu nikdy nevygeneruje. Pre ukážku uvádzame niekoľko príkladov v tabuľke 4.
Tabulka 4: Tabulka generovania prvkov .
Generované prvky | |
4 | [0, 4, 2, 3] |
7 | [2, 2, 0, 5, 6, 4, 1] |
8 | [0, 7, 5, 3, 4, 2, 6, 7] |
14 | [3, 13, 11, 6, 10, 2, 9, 7, 5, 0, 4, 8, 12, 13] |
Z hľadiska definície 4, to predstavuje podstatný problém, keďže podľa nej majú byť a jednoznačne permutácie. Nakoľko ale jedna z nich nie je, neplatia ďalšie vlastnosti, ktoré sú základom návrhu tejto hašovacej funkcie.
Príklad 3 Nech a nech a sú vygenerované metódami uvedenými v kapitole 2. Potom je , a . Tabuľka operácie na množine je zobrazená v tabuľke 5.
Tabulka 5: Tabuľka operácie na množine ..
0 | 1 | 2 | 3 | |
0 | 3 | 3 | 1 | 0 |
1 | 0 | 0 | 2 | 1 |
2 | 1 | 1 | 3 | 2 |
3 | 2 | 2 | 0 | 3 |
Podľa definície 3 musí pre konečnú kvázigrupu platiť, že pre ktorékoľvek dava prvky , mus9 ma5 rovnosť a práve jedno riešenie. Zvoľme teda a . Po dosadení dostávame
.
Z tabuľky 5 je potom
alebo a
Vidíme, že má dve možné riešenia tejto rovnosti , čím nie je splnená podmienka v definícii 3. Taktiež neplatí, že príslušná tabuľka je latinský štvorec.
Dôsledok 1 nie je konečná kvázigrupa a Caleyho tabuľka ku nie je latinský štvorec.
Čo sa týka teoretického hľadiska, vidíme, že celá konštrukcia návrhu, je na základe takéhoto generovania permutácie úplne narušená. Hašovať sa ale aj napriek tomuto faktu dá, čo si ukážeme na nasledujúcom príklade.
Príklad 4 Nech a nech a sú vygenerované metódami uvedenými v kapitole 2. Tabuľka operácie na množine je zobrazená v tabuľke 5. Nech správa, ktorej odtlačok chceme vypočítať je a nech . Odtlačok správy vypočítame pomocou tabuľky 5 nasledovne:
Keďže vieme hašovať, môžeme sa aj v tomto prípade pokúsiť vytvoriť falošnú správu s rovnakým odtlačkom. Už v predchádzajúcich príkladoch sme prišli na to, že zložitosť útoku as odvíja od zložitosťi invertovania permutácie a od zložitosti invertovania , ktorá však, už ako viem, nie je permutáciou.
Vytvorme teda novú správu, ktorej odtlačok sa bude zhodovať s vyššie vypočítaným . Nech nová správa je . Označme . Platí, že , teda .
Vieme, že môžeme vypočítať nasledovne:
Po dosadení dostávame
K určeniu potrebujeme poznať a . Pozrime sa preto na možnosti invertovania funkcií, ktoré sme uviedli v časti 2.
Metóda na invertovanie permutácie
Už na prvý pohľad vidíme, že permutácia sa generuje zložito. Veľmi jednoducho vieme nájsť inverzný algoritmus k pôvodnému. Metóda je uvedená v jazyku C++.
ZZ Quasigroup::invP3(ZZ x)
{
ZZ Dim2 = m_Dim / 2;
x = (x + 1 - Dim2) % m_Dim;
return x;
}
Metóda na invertovanie permutácie
Algoritmus na generovanie prvkov už vyzerá o čosi zložitejšie a problém, ktorý tu vzniká, je hlavne ten, že nejde o permutáciu. Problém sa redukuje na invertovanie postupností s párnym počtom prvkov, teda , . Dôvodom je to, že počet prvkov postupnosti (permutácie, vo všeobecnom prípade) vypočítame z dĺžky odtlačku, a to , kde je dĺžka odtlačku. Nikdy sa teda nestane, aby permutácia mala nepýrny počet prvkov.
Z tabuľky 4 vidíme, že jednoznačne určiť pôvodný prvok k inverznému, môže predstavovať problém, ak by sa prvky opakovali kdekoľvek v danej postupnosti a opakovalo by sa ich rôzne veľa. Algoritmus bol však navrhnutý tak, že nám vygeneruje 3 typy postupností, čo vidíme v nasledujúcej tabuľke 6.
Tabulka 6: Tabulka typov postupností
Špecifický znak | |
4, 10, 16, 22, … | 1 sa zobrazuje na |
6, 12, 18, 24, … | 1 sa zobrazuje na |
8, 14, 20, 26, … | 1 a sa zobrazuje na |
Príklady jednotlivých typov môžeme nájsť v tabuľke 4. Ostatné prvky postupnosti , okrem vyššie spomenutých prvkov 1 a , sa generujú s jednoznačným určením inverzného prvku. Pri prvom a druhom type postupnosti ho však vieme určiť jednoznačne tiež, je ním 1. Pri treťom type vznikajú dve možnosti chýbajúcich prvkov, no otestovanie dvoch možností, nepredstavuje žiadny problém. Metóda je uvedená v jazyku C++.
ZZ* Quasigroup::invP2(ZZ x)
{
ZZ * arr = new ZZ[2];
arr[0] = x;
arr[1] = to_ZZ(-1);
ZZ Dim3 = m_Dim / 3;
if(m_Dim % 2 == 0)
{
if(x < Dim3 * 3)
{
switch(x % 3)
{
case 0:
arr[0]=3*((x/3 - Dim3/3)% Dim3);
break;
case 1:
arr[0]=3*(Dim3 - (x-1)/3) + 1;
break;
case 2:
arr[0]=3*(((x-2)/3 + 1 - Dim3)% Dim3)+ 2;
break;
}
}
else
{
if(x == m_Dim || x == m_Dim + 1)
{
arr[0] = 1;
return arr;
}
}
if(x == (Dim3 * 3) + 1)
{
arr[0] = 1;
arr[1] = (Dim3 * 3) + 1;
}
}
return arr;
}
Metóda na invertovanie permutácie
Pre úplnosť uvádzame aj inverznú funkciu k permutácii , o ktorej sme si však povedali, že ju k vytvoreniu falošnej správy invertovať nepotrebujeme. Metóda je uvedená v jazyku C++.
ZZ Quasigroup::invP1(ZZ x)
{
if (m_Dim % 2 == 0)
{
if(x % 2 == 0)
{
x = 2 * ((x / 2 + 1 - Dim2) % Dim2);
}
else
{
x = 2 * (((x - 1) / 2 - 1) % Dim2) + 1;
}
}
else
{
if(x == m_Dim)
{
x = m_Dim;
}
else
{
if(x % 2 == 0)
{
x = 2 * ((x / 2 + 1 - Dim2) % Dim2);
}
else
{
x = 2 * (((x - 1) / 2 - 1) % Dim2) + 1;
}
}
}
return x;
}
Ak už poznáme algoritmy na generovanie inverzných prvkov, môžeme dokončiť vytvorenie falošnej správy. Potrebujeme vypočítať
Vyššie uvedenými metódami vypočítame inverzné prvky a po dosadení dostávame
a teda
Opäť sa nám podarilo nájsť správu, ktorej odtlačok je zhodný s odtlačkom pôvodnej správy.
,
.
Dôsledok 2 Hašovacia funkcia nie je odolná voči nájdeniu kolízie, voči nájdeniu druhého vzoru ani voči nájdeniu prvého vzoru.
4. Záver
V práci sme predstavili návrh hašovacej funkcie založenej na kvázigrupách, podla [2], [3]. Ide o použitie kvázigrupy izotopnej s kvázigrupou modulárneho odčítania. Už pri študovaní samotnej konštrukcie, sme prišli na podstatný problém v generovaní permutácií, nakoľko jedna z uvedených metód permutáciu negeneruje
(časť 3.3). Z teoretického hľadiska to problém je, ale hašovat sa aj napriek tomuto faktu dá, čo sme ukázali na príklade 4.
Útok sme založili na nájdení kolízie a zistili sme, že jeho zložitosť, závisí od zložitosti nájdenia permutácie inverznej k a od zlo6itosti n8jdenia postupnosti inverznej k .
Z podkapitoly 3.1 a 3.2 môžeme vidieť, že útok je rovnako zložitý, ak falošnú správu vytvoríme modifikovaním pôvodnej správy, teda pridáme predponu, príponu, resp. obidva, alebo vytvoríme úplne novú správu nezávislú na pôvodnej. Taktiež vidíme, že známy parameter nijako nevplýva na bezpečnosť hašovacej funkcie a zložitosť útoku je rovnaká, či ho poznáme alebo nie.
Nakoľko sa daná permutácia a postupnosť negenerujú príliš zložito, podarilo sa nájsť inverzné metódy na ich generovanie (časť 3.3). Následne sa podarilo vytvoriť falošnú správu, ktorej odtlačok bol zhodný s odtlačkom pôvodnej správy.
5. Literatúra
- DÉNES, J., KEEDWELL, A. D., "Latin Squares and their Applications", Academic Press, New York, 1974
- DVORSKÝ, J., OCHODKOVÁ, E., SNÁŠEL, V., "Hashovací funkce založená na kvázigrupách", Mikulášska kryptobesídka, Praha, 2001, pp. 27-36
- DVORSKÝ, J., OCHODKOVÁ, E., SNÁŠEL, V., "Hash functions based on large quasigroups", Proc. of Velikonocní kryptologie, Brno, 2002, pp. 1-8
- GROŠEK, O., SATKO, L., NEMOGA, K., Ïdeal difference tables from an algebraic point of view", Cryptology and Information Security, Proceedings of VI RECSI, Teneriffe, Spain, 2000, pp. 453-454
- PREENEL, B., "The state of hash functions", Cryptology and Information Security, Proceedings of VI RECSI, Teneriffe, Spain, 2000, pp. 3-27
- VOJVODA, M., "Cryptoanalysis Of One Hash Function Based On Quasigroup", Tatra Mt. Math.Publ. 29, 2004, pp. 173-181
Spoluautorom tohto článku je Ing. Milan Vojvoda, PhD, Katedra aplikovanej informatiky a výpočtovej techniky, Fakulta elektrotechniky a informatiky STU Bratislava