SEAL ( S oftware - optimized Encryption Algorithm , softwarově optimalizovaný šifrovací algoritmus) je algoritmus symetrického proudového šifrování dat optimalizovaný pro softwarovou implementaci.
Vyvinutý v IBM v roce 1993 Philem Rogawayem a Donem Coppersmithem . _ _ Algoritmus je optimalizován a doporučen pro 32bitové procesory . K provozu vyžaduje několik kilobajtů vyrovnávací paměti a osm 32bitových registrů . Rychlost šifrování je přibližně 4 strojové cykly na bajt textu. Pro kódování a dekódování se používá 160bitový klíč . Aby se předešlo nežádoucí ztrátě rychlosti v důsledku pomalých operací zpracování klíčů , SEAL na něm předem provede několik transformací, což vede ke třem tabulkám určité velikosti. Místo samotného klíče se tyto tabulky používají přímo k šifrování a dešifrování textu.
Algoritmus je považován za velmi spolehlivý, velmi rychlý [1] a od prosince 1993 je chráněn patentem USA č. 5454039 [2] .
V roce 1991 Ralph C. Merkle popsal nákladovou efektivitu softwarových šifer . Podle jeho názoru nejúčinnější z nich byly Khufu , FEAL a RC4 . Stále se zvyšující potřeby zákazníků po spolehlivé kryptografii však vyžadovaly hledání nových a zdokonalování starých řešení.
V létě 1992 byl zahájen vývoj první verze nového softwarově optimalizovaného algoritmu SEAL 1.0 . Hlavní myšlenky a princip fungování vývojáři převzali z blokové šifry Ralph Merkle ( ang. Ralph C. Merkle ) Khufu , která se jim v té době zdála nejdokonalejší. Rozhodli se dosáhnout nejlepších vlastností projektu (hlavně rychlosti) a zúžili rozsah zařízení , na kterých je jeho realizace možná. Volba byla učiněna ve prospěch 32bitových strojů s alespoň osmi obecnými registry a mezipamětí o velikosti alespoň 8 KB . V březnu 1993 bylo rozhodnuto vytvořit blokovou šifru , ale struktura z rodiny pseudonáhodných funkcí vyvinutá do října téhož roku fungovala rychleji, což vedlo vývojáře k streamování šifrování .
Tato struktura se skládala ze čtyř registrů , z nichž každý měnil svého „souseda“ v závislosti na tabulce získané z klíče . Po řadě takových úprav se hodnoty registru přidají do sekvence klíčů, která s každou iterací roste, dokud nedosáhne určité délky.
Při vývoji byla téměř veškerá pozornost věnována vnitřní smyčce algoritmu , protože procedura inicializace registru a způsob generování tabulek z klíče měly malý vliv na jeho bezpečnost. Ve své finální podobě se projekt SEAL 1.0 objevil až v prosinci 1993 .
V roce 1996 Helen Handschuh a Henri Gilbert SEAL 1.0 a na samotný SEAL 1.0. Potřebovali texty, každé čtyři 32bitová slova, aby našli závislost pseudonáhodné funkce na klíči . V důsledku toho byla provedena některá vylepšení a změny v dalších verzích algoritmu SEAL 3.0 a SEAL 2.0 . Například ve verzi 1.0 končila každá iterace s klávesovou sekvencí úpravou pouze dvou registrů a ve verzi 3.0 byly upraveny všechny čtyři. SEAL 3.0 a SEAL 2.0 také používaly algoritmus SHA-1 ( Secure Hash Algorithm-1 ) ke generování tabulek namísto původního SHA , díky čemuž byly odolnější vůči kryptoanalýze .
Při popisu algoritmu se používají následující operace a zápisy:
Aby se předešlo ztrátě rychlosti šifrování při pomalých operacích, používá algoritmus tři tabulky: R , S a T . Tyto tabulky jsou vypočteny pomocí procedury z algoritmu SHA-1 a závisí pouze na klíči . Plnění těchto tabulek lze popsat pomocí funkce G , která vrací 160bitovou hodnotu ze 160bitového řetězce a 32bitového čísla .
Zavádíme následující funkce a proměnné v závislosti na indexu :
160bitový řetězec je pak rozdělen do pěti 32bitových slov, takže
Je také vytvořeno šestnáct 32bitových slov
Poté se provedou konečné výpočty:
Představujeme funkci where for
Pak tabulky:
Dále se klíč v algoritmu nepoužívá.
Před generováním pseudonáhodné funkce je třeba připravit čtyři 32bitové servisní registry ( , , a ) a čtyři 32bitová slova ( , , a ). Jejich hodnoty jsou určeny z tabulek a , 32bitového čísla a nějakého čísla v následujícím postupu.
Pro šifrování textu je potřeba vytvořit pseudonáhodnou funkci.
Proces šifrování se skládá z velkého počtu iterací , z nichž každá končí vygenerováním pseudonáhodné funkce . Počet prošlých iterací ukazuje počítadlo l . Všechny jsou rozděleny do několika fází s podobnými operacemi. V každé fázi je horních 9 bitů jednoho z registrů ( A , B , C nebo D ) použito jako ukazatel , kterým se vybírá hodnota z tabulky T. Tato hodnota se přičte aritmeticky nebo bitově modulo 2 (XOR) s dalším registrem (opět jedním z A , B , C nebo D ). První vybraný registr se poté otočí doprava o 9 pozic. Dále se buď upraví hodnota druhého registru sčítáním nebo XOR s obsahem prvního (již posunutým) a provede se přechod do dalšího stupně, nebo se tento přechod provede ihned. Po 8 takových kolech se hodnoty A , B , C a D sečtou (aritmeticky nebo XORed ) s určitými slovy z tabulky S a přidají se k posloupnosti kláves y . Posledním krokem iterace je přidání dalších 32bitových hodnot ( n1 , n2 nebo n3 , n4 ) do registrů . Navíc výběr konkrétní hodnoty závisí na paritě čísla této iterace .
Při vývoji tohoto algoritmu byla hlavní pozornost věnována následujícím vlastnostem a nápadům:
Šifra SEAL vyžaduje asi čtyři strojové cykly k zašifrování a dešifrování každého bajtu textu . Běží rychlostí přibližně 58 Mb/s na 32bitovém 50 MHz procesoru a je jednou z nejrychlejších šifer na trhu .
Symetrické kryptosystémy | |
---|---|
Streamové šifry | |
Síť Feistel | |
Síť SP | |
jiný |