Raiden | |
---|---|
Creator | Julio Castro, Javier Olabarrieta |
Creată | 2006 _ |
publicat | 2006 _ |
Dimensiunea cheii | 128 de biți |
Dimensiunea blocului | pe 64 de biți |
Numărul de runde | 16 |
Tip de | Rețeaua Feistel |
Raiden este un cifru bloc de tip Feistel Network introdus în 2006 de un grup de autori condus de Julio César Hernández Castro . Algoritmul a fost dezvoltat folosind programarea genetică și se bazează pe ideile cifrului bloc TEA , care este larg cunoscut pentru combinația sa de cod compact, structură simplă și memorabilă și viteză mare de execuție. Deoarece algoritmul TEA a fost recent recunoscut ca fiind vulnerabil la o serie de atacuri, autorii au propus, în opinia lor, un înlocuitor echivalent pentru algoritm, probabil lipsit de vulnerabilități și doar puțin inferioară ca viteză.
Cifrul Raiden, repetând complet structura algoritmului TEA, criptează un bloc de 64 de biți, are două subblocuri de 32 de biți, o cheie secretă de 128 de biți și efectuează implicit 16 runde complete, fiecare dintre ele având două runde de Rețeaua Feistel . Structura cifrului permite utilizarea a 32 sau mai multe runde.
pentru că acesta este un algoritm de cifrare bloc, în care lungimea blocului este de 64 de biți și lungimea datelor poate să nu fie un multiplu de 64 de biți, valoarea tuturor octeților care completează blocul la un multiplu de 64 de biți este setată la 0x01 .
Algoritmul, spre deosebire de TEA, nu a fost investigat de criptoanaliști în acest moment. Potrivit autorilor, 16 runde complete ale algoritmului au un nivel de securitate egal cu 32 de runde complete ale algoritmului TEA, deși nu au vulnerabilitățile algoritmului original. Cea mai importantă diferență față de cifrul TEA este programul extins al cheilor. În timp ce algoritmul TEA prevede doar adăugarea unei variabile cu o constantă 0x9e3779b9 , Raiden folosește un program de chei apropiat de PRNG , transformă cheia și generează subchei pentru fiecare rundă. Cifrul trece cu succes textele Diehard , Sexton și ORL. [unu]
Algoritmul Raiden este, de asemenea, destul de simplu de implementat, luând doar câteva linii de cod . La fel ca TEA , algoritmul se bazează pe operațiuni pe numere nesemnate de 32 de biți ( unsigned long ).
void raiden_encode ( cheie const u32 [ 4 ], date const u32 [ 2 ], rezultat u32 [ 2 ]) { u32 b0 = date [ 0 ], b1 = date [ 1 ], k [ 4 ] = { tasta [ 0 ], tasta [ 1 ], tasta [ 2 ], tasta [ 3 ]}, sk ; int i ; pentru ( 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 )); } rezultat [ 0 ] = b0 ; rezultat [ 1 ] = b1 ; } void raiden_decode ( cheie const u32 [ 4 ], date const u32 [ 2 ], rezultat u32 [ 2 ]) { u32 b0 = date [ 0 ], b1 = date [ 1 ], k [ 4 ] = { tasta [ 0 ], tasta [ 1 ], tasta [ 2 ], tasta [ 3 ]}, subchei [ 16 ]; int i ; pentru ( i = 0 ; i < 16 ; i ++ ) subchei [ i ] = k [ i % 4 ] = (( k [ 0 ] + k [ 1 ]) + ( ( k [ 2 ] + k [ 3 ] ) ^ ( k [ 0 ] << ( k [ 2 ] & 0x1F )))); pentru ( i = 15 ; i >= 0 ; i -- ) { b1 -= (( subcheile [ i ] + b0 ) << 9 ) ^ (( subcheile [ i ] - b0 ) ^ (( subcheile [ i ] + b0 ) >> 14 )); b0 -= (( subcheile [ i ] + b1 ) << 9 ) ^ (( subcheile [ i ] - b1 ) ^ (( subcheile [ i ] + b1 ) >> 14 )); } rezultat [ 0 ] = b0 ; rezultat [ 1 ] = b1 ; }
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |