close

Liten krypteringsalgoritme

Hopp til navigasjon Hopp til søk
Liten krypteringsalgoritme
TEA InfoBox Diagram.png
To trinn av Feistel-funksjonen (1 syklus) i TEA
Generell
DesignereRoger Needham og David Wheeler
Første utgivelse1994
EtterfølgereXTEA , XXEA
Detaljer
Nøkkelstørrelse128 biter
Blokkstørrelse64 biter
StrukturFeistel nettverk
Antall passeringervariabler: 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

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

Eksterne lenker