ENRUPT | |
---|---|
Creator | Sean O'Neil _ _ |
Creată | 2007 _ |
publicat | 2008 _ |
Dimensiunea cheii | min. 32 de biți în trepte de 32 de biți |
Dimensiunea blocului | min. 64 de biți în trepte de 32 de biți |
Numărul de runde | 8×(xw/32) + 4×(kw/32) |
Tip de | Rețea Feistel modificată dezechilibrat [1] |
EnRUPT este un algoritm criptografic bloc simetric și o primitivă cripto în criptografie dezvoltat de Sean O'Neil .
O caracteristică a algoritmului este flexibilitatea sa extremă. De fapt, algoritmul este un criptoprimitiv care vă permite să implementați un cifr de bloc cu o dimensiune de bloc arbitrară - de la 64 de biți și o lungime a cheii de la 32 de biți . În acest caz, numărul de runde va fi egal cu 4 × (2 × xw + kw), unde xw este dimensiunea blocului în cuvinte, kw este lungimea cheii în cuvinte. Dimensiunea cuvântului poate fi de 32 sau 64 de biți . Cu un cuvânt de 32 de biți, numărul de runde este de 8 × (xb / 32) + 4 × (kb / 32), unde xb este dimensiunea blocului în biți, kb este lungimea cheii în biți. Pentru un cifru cu un bloc de 128 de biți și o cheie de 512 de biți, sunt utilizate 96 de runde, iar cu o cheie de 256 de biți, 64 de runde.
Deoarece EnRUPT este o cripto-primitivă de facto, poate fi folosit ca un cifr bloc simetric rapid, cifr de flux ( EnRUPT ireversibil, irRUPT), funcție hash (mdRUPT), MAC, RNG , PRNG .
La fel ca algoritmul TEA , EnRUPT este foarte ușor de implementat. De fapt, cifrul este o versiune simplificată, consolidată și accelerată a algoritmului XXTEA . Mai jos este un exemplu simplu și flexibil de implementare a algoritmului în modul de criptare bloc pe 32 de biți.
#definiți er1(k) (rotr(2*x[(r-1)%xw]^x[(r+1)%xw]^k^r,8)*9^k) enRUPT ( u32 * x , const u32 xw , u32 * cheie , const u32 kw ) { u32 r , s = 4 , n = s * ( 2 * xw + kw ); pentru ( r = 1 ; r <= n ; r ++ ) x [ r % xw ] ^= er1 ( cheia [ r % kw ]); } unRUPT ( u32 * x , const u32 xw , u32 * cheie , const u32 kw ) { u32 r , s = 4 , n = s * ( 2 * xw + kw ); pentru ( r = n ; r ; r -- ) x [ r % xw ] ^= er1 ( cheia [ r % kw ]); }Unde x este un bloc de numere nesemnate pe 32 de biți, cheia este cheia, xw este lungimea mesajului, kw este lungimea cheii.
Există un atac asupra versiunii pe 32 de biți a cifrului bloc EnRUPT, cu condiția ca criptoanalistul să aibă capacitatea de a modifica cheia și de a obține un număr mare de perechi de text simplu și de text cifrat, pentru o cheie de 256 de biți și un bloc de 128 de biți , sunt necesare aproximativ 2 64 de texte selectate. Acest atac este aplicabil și pentru cifrul XXTEA . [2] [3]
În competiția SHA-3 , s-a determinat că o funcție hash bazată pe algoritmul EnRUPT are coliziuni pentru toți cei șapte parametri de securitate declarați. Complexitatea găsirii unei coliziuni a variat de la 236 la 240 de operații pentru diferite variante ale algoritmului, ceea ce a făcut posibilă demonstrarea [4] a unei coliziuni practice pentru varianta EnRUPT-256.
Potrivit autorilor algoritmului EnRUPT, un atac de succes ( ing. atac de liniarizare ) a fost efectuat nu asupra funcției hash în ansamblu și nu asupra structurii acesteia, ci doar asupra variantei declarate cu un parametru specific s = 4. Creșterea parametrul s la 8 ar trebui să conducă la o difuzie crescută și să asigure un nivel mai ridicat de securitate, prin reducerea vitezei de calcul a funcției la jumătate. Cu toate acestea, studii independente ale acestei versiuni a algoritmului nu au fost efectuate.
În cadrul aceleiași competiții SHA-3 , a fost publicată lucrarea [5] , care arată posibilitatea găsirii unui prototip pentru varianta EnRUPT-512. Acest atac necesită aproximativ 2480 de operații, ceea ce este doar puțin mai bun decât 2512 pentru o căutare completă, dar arată totuși o slăbiciune în structura algoritmului.
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |