TEA (kryptografie)
TEA (rozepsaně anglicky Tiny Encryption Algorithm) je bloková šifra postavená na myšlence Feistelovy sítě a vytvořená na Cambridgeské univerzitě Davidem Wheelerem a Rogerem Needhamem v roce 1994. Používá klíče délky 128 bitů, velikost bloku 64 bitů a volitelný počet rund (doporučeno 64 v rámci Feistelovy sítě, respektive 32, pokud se dvojice Feistelových počítá za jednu).
Referenční implementace
Sami autoři uvolnili svou referenční implementaci napsanou v Céčku jako volné dílo:
void encrypt(unsigned long v[2], unsigned long k[4]) {
unsigned long v0 = v[0], v1 = v[1], sum = 0, i; /* set up */
unsigned long delta = 0x9E3779B9; /* a key schedule constant */
unsigned long k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */
for (i = 0; i<32; i++) { /* basic cycle start */
sum += delta;
v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3); /* end cycle */
}
v[0] = v0; v[1] = v1;
}
void decrypt(unsigned long v[2], unsigned long k[4]) {
unsigned long v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i; /* set up; sum is 32*delta */
unsigned long delta = 0x9E3779B9; /* a key schedule constant */
unsigned long k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */
for(i = 0; i<32; i++) { /* basic cycle start */
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta; /* end cycle */
}
v[0] = v0; v[1] = v1;
}
Konstanta s šestnáctkovým zápisem 0x9E3779B9
byla transparentně vybrána jako číslo rovné ⌊232/ϕ⌋, kde ϕ je hodnota zlatého řezu.
Konstanta má zabránit jednoduchým útokům na jednoduchost rund. Šifra má totiž velmi jednoduché rundovní klíče, kdy se ve všech rundách se používá stejný úvodní klíč.
Bezpečnost
TEA má několik slabin. Především ke každému klíči patří tři další klíče vytvářející stejný šifrový text, faktický prostor klíčů tak odpovídá jen 126 bitům. Navíc to oslabuje vlastnosti TEA pro použití jako kryptografické hašovací funkce, což bylo i historicky použito pro útok na systémy Xbox, které takto šifru TEA využívaly.
Šifra je kvůli tomu zranitelná útokem příbuznými klíči, který umožňuje útok s výběrem otevřeného textu, při kterém stačí k úspěchu otevřených textů.
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Tiny Encryption Algorithm na anglické Wikipedii.
Externí odkazy
- Online implementace v JavaScriptu (anglicky)