Liten krypteringsalgoritme
| Liten krypteringsalgoritme | |
|---|---|
| To trinn av Feistel-funksjonen (1 syklus) i TEA | |
| Generell | |
| Designere | Roger Needham og David Wheeler |
| Første utgivelse | 1994 |
| Etterfølgere | XTEA , XXEA |
| Detaljer | |
| Nøkkelstørrelse | 128 biter |
| Blokkstørrelse | 64 biter |
| Struktur | Feistel nettverk |
| Antall passeringer | variabler: anbefaler 64 trinn av Feistel-funksjonen (32 sykluser) |
| Bedre kryptoanalyse | |
| TEA lider av det tilsvarende nøkkelproblemet (Kelsey et al., 1996 ) og kan hackes ved hjelp av et nøkkelrelatert angrep ved å bruke 2 23 valgt klartekst og en tid på 2 32 . | |
I kryptografi er Tiny Encryption Algorithm (TEA) et blokkchiffer kjent for sin enkelhet og enkle implementering (vanligvis er noen få linjer med kode nok). Den ble unnfanget av David Wheeler og Roger Needham fra dataavdelingen ved University of Cambridge [1] , og presentert for første gang i 1994 på den andre Fast Software Encryption , holdt i Leuven ( Belgia ) [2] .
Algoritmen er ikke underlagt noe patent .
Egenskaper
TEA opererer på 64 - bits blokker og bruker en 128-bit lang kryptografisk nøkkel . Den har en Feistel-nettverksstruktur med 64 trinn (foreslått), vanligvis implementert i par kalt loops . Den har en veldig enkel nøkkelstyringsfunksjon , som blander alle bitene på samme måte hver syklus. I tillegg brukes multipler av en konstant for å gjøre algoritmen motstandsdyktig mot enklere angrep basert på symmetrien til trinnene. Denne konstanten, 2654435769 ( ) er valgt til å være der det gylne snitt er .
TEA har noen svakheter, hvorav den mest alvorlige er relatert til de ekvivalente nøklene : hver nøkkel tilsvarer 3 andre, noe som betyr at den effektive lengden på nøkkelen bare er 126 biter [3] . Som en konsekvens av dette blir TEA på ingen måte referert til som en kryptografisk hashfunksjon . Denne svakheten ble brukt til å hacke Microsoft Xbox - konsollen , der chifferen ble brukt som en hash-funksjon for å kontrollere oppstartsprogramvaren [4] . TEA er også mottakelig for et nøkkelrelatert angrep , som krever 2 23 klartekster valgt med et par korrelerte nøkler og en tid på 2 32 [5] .
Den uvanlige minimumsstørrelsen på TEA vil gjøre det til et interessant valg i mange situasjoner der det er ekstreme begrensninger knyttet til ressurser, for eksempel i gamle maskinvaresystemer hvor minnemengden ofte er minimal. På den annen side antyder den påviste usikkerheten til algoritmen å bruke en av variantene som har blitt presentert for å rette opp svakhetene i strukturen.
Versjoner
Den første offentlige versjonen av TEA ble fulgt av en andre versjon kalt XTEA , eXtended TEA , som inkorporerte noen modifikasjoner med sikte på å gjøre algoritmen sikrere: i motsetning til den opprinnelige algoritmen, integrerer den en mer kompleks nøkkeladministrasjonsfunksjon og en annen rekkefølge av bit skift- , XOR- og tilleggsoperasjoner. Sammen med XTEA ble også Block TEA presentert , identisk med XTEA, men som itererer over hele meldingen og vurderer den som en enkelt blokk.
En tredje versjon, kalt Corrected Block TEA (kjent som XXTEA ), ble publisert i 1998 : den stammer fra XTEA, men skiller seg i muligheten for å bruke datablokker av hvilken som helst lengde.
Referansekode
Følgende er C -tilpasninger av TEA-krypterings- og dekrypteringsrutinene , utgitt til det offentlige domene av David Wheeler og Roger Needham:
#include <stdint.h>
void encrypt ( uint32_t * v , uint32_t * k ) {
uint32_t v0 = v [ 0 ], v1 = v [ 1 ], sum = 0 , i ; / * sette opp * /
uint32_t delta = 0x9e3779b9 ; / * en nøkkelplankonstant * /
uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; / * cache nøkkel * /
for ( i = 0 ; i < 32 ; i ++ ) { / * grunnsyklusstart * /
sum + = delta ;
v0 + = (( v1 << 4 ) + k0 ) ^ ( v1 + sum ) ^ (( v1 >> 5 ) + k1 );
v1 + = (( v0 << 4 ) + k2 ) ^ ( v0 + sum ) ^ (( v0 >> 5 ) + k3 ); } / * sluttsyklus * /
v [ 0 ] = v0 ; v [ 1 ] = v1 ;
}
void dekrypter ( uint32_t * v , uint32_t * k ) {
uint32_t v0 = v [ 0 ], v1 = v [ 1 ], sum = 0xC6EF3720 , i ; / * oppsett; sum == delta * 32 * /
uint32_t delta = 0x9e3779b9 ; / * en nøkkelplankonstant * /
uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; / * cache nøkkel * /
for ( i = 0 ; i < 32 ; i ++ ) { / * grunnsyklusstart * /
v1 - = (( v0 << 4 ) + k2 ) ^ ( v0 + sum ) ^ (( v0 >> 5 ) + k3 );
v0 - = (( v1 << 4 ) + k0 ) ^ ( v1 + sum ) ^ (( v1 >> 5 ) + k1 );
sum - = delta ; } / * sluttsyklus * /
v [ 0 ] = v0 ; v [ 1 ] = v1 ;
}
Merk at standardimplementeringen er knyttet til en spesifikk mikroprosessorarkitektur , noe som betyr at byte-rekkefølgehensyn er viktige når chifferteksten distribueres og behandles på forskjellige systemer. Det originale dokumentet spesifiserer ingen detaljer om arkitekturen til mikroprosessorene, så alle som implementerer et system som bruker TEA må vurdere disse detaljene selv.
Merknader
- ^ Offisiell side for Computer Laboratory ved Cambridge University
- ^ TEA, en liten krypteringsalgoritme
- ^ Bruce Schneier og David Wagner: Nøkkelplankrypteringsanalyse av IDEA, G-DES, GOST, SAFER og Triple-DES ( 1996 )
- ^ 17 Microsoft-feil gjort i Xbox Security System Arkivert 16. april 2009 på Internet Archive .
- ^ Bruce Schneier og David Wagner: Beslektet nøkkelkrypteringsanalyse av 3-WAY, Biham-DES, CAST, DES-X NewDES, RC2 og TEA ( 1997 )
Relaterte elementer
- RC4 - Et strømchiffer som, i likhet med TEA, er designet for å være veldig enkelt å implementere.
- XTEA - The Block TEA, den første modifiserte versjonen av TEA.
- XXTEA - The Corrected Block TEA, den andre modifiserte versjonen av TEA.
Andre referanser
- En kryptoanalyse av TEA ( 2003 )
- En anvendelse av genetiske algoritmer for kryptoanalyse av en TEA-syklus ( 2002 )
Eksterne lenker
- En kryptoanalyse av Tiny Encryption Algorithm ( PDF ), på cs.ua.edu .
- Forestillinger om TEA og implementeringer på forskjellige språk , på 143.53.36.235:8080 . Hentet 14. oktober 2008 (arkivert fra originalen 12. juni 2017) .
- Test vektorer for TEA ,på cix.co.uk.
- PHP-implementering av XTEA , på php-einfach.de .
- JavaScript-implementering av TEA , på movable-type.co.uk .