A HPC ( Hasty Pudding Cipher ) egy blokkszimmetrikus kriptográfiai algoritmus, amelyet a híres amerikai kriptológus és matematikus, Richard Schreppel hozott létre 1998 -ban az Arizonai Állami Egyetemről . A kriptoalgoritmus nevének első két szava "lisztes puding " -nak fordítható . A HPC nyilvánvalóan a rengeteg „ravasz” numerikus transzformáció miatt kapott ilyen furcsa nevet, ami jelentősen megnehezíti az elemzést .
A HPC a Feistel cellán alapul, és van egy érdekes tulajdonsága - mind a titkosított blokk, mind a titkosítási kulcs méretét semmi sem korlátozza. Valójában a HPC algoritmus öt különböző (de egymáshoz kapcsolódó) al-algoritmusból áll, amelyek mindegyike különböző hosszúságú blokkok titkosítására szolgál:
Név | Blokkméret bitekben |
---|---|
HPC Tiny | 0-35 |
HPC rövid | 36-64 |
HPC közepes | 65-128 |
HPC hosszú | 129-512 |
HPC kiterjesztett | 513 és több |
A titkosítás 8 körben történik. Egy titkosított 128 bites blokkot két 64 bites regiszterbe írnak, és ezek után rengeteg különböző matematikai műveletet hajtanak végre rajtuk:
Kijelölés | Művelet |
---|---|
modulo 2 kiegészítés | |
modulo kiegészítés | |
modulo kivonás | |
balra forgatás n bittel | |
forgatás jobbra n bittel | |
egy 64 bites blokk alacsony bájtjának nullázása | |
bitenkénti logikai "és" |
Ezenkívül néhány állandó is részt vesz a körben :
A 8 átalakítási kör befejezése után további 2 műveletet hajtanak végre:
A visszafejtés az inverz műveletek fordított sorrendben történő végrehajtásával történik.
A kulcsbővítési eljárás feladata egy kiterjesztett kulcs létrehozása , amely egy 256 64 bites szóból álló tömb . Nyilvánvaló, hogy mindegyik albalgoritmusnak saját eljárással kell rendelkeznie. A kiterjesztett kulcstömbök egyikének ismerete nem teszi lehetővé sem a többi tömb, sem a titkosítási kulcs kiszámítását . Rögzített méretű titkosított blokkok esetén azonban elegendő egyszer egy kiterjesztett kulcsot generálni ehhez az algoritmushoz.
A kulcs fennmaradó 253 szava a következőképpen inicializálódik:
A titkosítási kulcs és az inicializált kiterjesztett kulcstömb bitenkénti modulo 2 hozzáadása történik, de legfeljebb 128 szó.
Megtörténik a kiterjesztett kulcs adatkeverési funkciója , amely biztosítja, hogy a kulcs minden bitje hatással legyen a kiterjesztett kulcs minden bitjére :
1. lépésA regiszterek inicializálása folyamatban van :
A kiterjesztett kulcs minden szavára az ábrán látható műveletet hajtjuk végre. A hatás fokozása érdekében az algoritmus szerzője 3 keverési kört javasol.
Ha a kulcs mérete meghaladja a 128 64 bites szót, akkor a 2. és 3. lépés minden 128 szavas blokknál megismétlődik, így a kulcsok összetettségi sorrendben történő keverésének eljárása megközelítőleg hasonló magához a titkosítási eljáráshoz .
Célja a titkosítási eredmény módosítása ugyanazokkal a bemeneti blokkokkal és kulcsokkal . A kiegészítő kulcs lehet titkos, ami növeli a kulcsinformációk tényleges mennyiségét, de egy korlátlan kulcshosszúságú algoritmusban ez a lehetőség szükségtelen lehet. Ilyen esetekben egyszerűen visszaállíthatja a kiegészítő kulcsot .
David Wagner sebezhetőséget HPC titkosításban [7] később Carl D'Halluin, Gert Bijnens, Bart Presnel és Vincent Rayman publikált egy tanulmányt [8] , amely ezt megerősítette. Kiderült, hogy az algoritmus körülbelül minden 256. kulcsa 230 egyenértékű kulcsot tartalmaz . Ezt a hiányosságot azonban a szerző még a verseny első fordulójának eredményének összesítése előtt azonnal kijavította.
Az ilyen típusú támadások során a támadó, aki hozzáfér a nyílt szöveg és a titkosított szöveg párjaihoz, a "Spice" kiegészítő kulcs tömbjének manipulálásával figyelheti, hogyan változik a nyílt szöveg vagy a titkosított szöveg a következő titkosítások során . A szerző szerint azonban ilyen típusú támadásokat még nem figyeltek meg, és az ezen a területen végzett munka a kriptoanalitikus közösség erőfeszítéseit igényli. [2]
Szimmetrikus titkosítási rendszerek | |
---|---|
Rejtjelfolyam adatfolyam | |
Feistel hálózat | |
SP hálózat | |
Egyéb |