Raiden | |
---|---|
Tvůrce | Julio Castro, Javier Olabarrieta |
Vytvořeno | 2006 _ |
zveřejněno | 2006 _ |
Velikost klíče | 128 bit |
Velikost bloku | 64 bit |
Počet kol | 16 |
Typ | Síť Feistel |
Raiden je bloková šifra typu Feistel Network představená v roce 2006 skupinou autorů pod vedením Julia Césara Hernándeze Castra . Algoritmus byl vyvinut pomocí genetického programování a je založen na myšlenkách blokové šifry TEA , která je široce známá pro svou kombinaci kompaktního kódu, jednoduché a zapamatovatelné struktury a vysoké rychlosti provádění. Vzhledem k tomu, že algoritmus TEA byl nedávno uznán jako zranitelný vůči řadě útoků, autoři podle jejich názoru navrhli ekvivalentní náhradu za algoritmus, pravděpodobně bez zranitelností a jen o málo nižší rychlosti.
Raidenova šifra, která zcela opakuje strukturu algoritmu TEA, šifruje 64bitový blok, má dva 32bitové podbloky, 128bitový tajný klíč a standardně provádí 16 úplných kol, z nichž každé má dvě kola Síť Feistel . Struktura šifry umožňuje použití 32 a více kol.
Protože jedná se o algoritmus blokové šifry, kde délka bloku je 64 bitů a délka dat nemusí být násobkem 64 bitů, hodnota všech bajtů doplňujících blok na násobek 64 bitů je nastavena na 0x01 .
Algoritmus, na rozdíl od TEA, nebyl v tuto chvíli ve skutečnosti prozkoumán kryptoanalytiky. Podle autorů má 16 úplných kol algoritmu úroveň zabezpečení rovnající se 32 úplným kolům algoritmu TEA, přičemž nemá zranitelnosti původního algoritmu. Nejdůležitějším rozdílem od šifry TEA je rozšířený klíčový plán. Zatímco algoritmus TEA poskytuje pouze přidání proměnné s konstantou 0x9e3779b9 , Raiden používá klíčový plán blízký PRNG , transformuje klíč a generuje podklíče pro každé kolo. Šifra úspěšně prochází texty Diehard , Sexton a ENT. [jeden]
Algoritmus Raiden je také poměrně jednoduchý na implementaci, zabere pouze několik řádků kódu . Stejně jako TEA je algoritmus založen na operacích s 32bitovými čísly bez znaménka ( unsigned long ).
void raiden_encode ( klíč const u32 [ 4 ], data const u32 [ 2 ], výsledek u32 [ 2 ]) { u32 b0 = data [ 0 ], b1 = data [ 1 ], k [ 4 ] = { klíč [ 0 ], klíč [ 1 ], klíč [ 2 ], klíč [ 3 ]}, sk ; int i ; pro ( i = 0 ; i < 16 ; i ++ ) { sk = k [ i % 4 ] = (( k [ 0 ] + k [ 1 ]) + (( k [ 2 ] + k [ 3 ]) ^ ( k [ 0 ] << ( k [ 2 ] & 0x1F ) ))); b0 += (( sk + b1 ) << 9 ) ^ (( sk - b1 ) ^ (( sk + b1 ) >> 14 )); b1 += (( sk + b0 ) << 9 ) ^ (( sk - b0 ) ^ (( sk + b0 ) >> 14 )); } výsledek [ 0 ] = b0 ; výsledek [ 1 ] = b1 ; } void raiden_decode ( klíč const u32 [ 4 ], data const u32 [ 2 ], výsledek u32 [ 2 ]) { u32 b0 = data [ 0 ], b1 = data [ 1 ], k [ 4 ] = { klíč [ 0 ], klíč [ 1 ], klíč [ 2 ], klíč [ 3 ]}, podklíče [ 16 ]; int i ; for ( i = 0 ; i < 16 ; i ++ ) podklíče [ i ] = k [ i % 4 ] = ( ( k [ 0 ] + k [ 1 ]) + ( ( k [ 2 ] + k [ 3 ] ) ^ ( k [ 0 ] << ( k [ 2 ] & 0x1F )))); pro ( i = 15 ; i >= 0 ; i -- ) { b1 -= (( podklíče [ i ] + b0 ) << 9 ) ^ (( podklíče [ i ] - b0 ) ^ (( podklíče [ i ] + b0 ) >> 14 )); b0 -= (( podklíče [ i ] + b1 ) << 9 ) ^ (( podklíče [ i ] - b1 ) ^ (( podklíče [ i ] + b1 ) >> 14 )); } výsledek [ 0 ] = b0 ; výsledek [ 1 ] = b1 ; }
Symetrické kryptosystémy | |
---|---|
Streamové šifry | |
Síť Feistel | |
Síť SP | |
jiný |