Home > Algorithmen > TEA

Algorithmen

TEA

TEA steht für Tiny Encryption Algorithm, was so viel bedeutet wie "winziger Verschlüsselungs-Algorithmus". Dies trifft in der Tat zu: TEA ist im Gegensatz zu vielen anderen Blockalgorithmen ziemlich klein. TEA verschlüsselt 64-Bit-Blöcke mit einem 128-Bit-Schlüssel. Dazu wird der Block in zwei Blöcke aufgeteilt. TEA benutzt eine Konstante DELTA zur Verschlüsselung; DELTA ist definiert als (sqrt(5)-1) · 231. Die Verschlüsselung ist recht einfach: Der eingehende 64-Bit-Block wird in zwei Hälften, nennen wir sie y und z, aufgeteilt. Diese durchlaufen 16 oder 32 Runden. Eine Variable x wird dabei definiert, zu der in jeder Runde DELTA addiert wird. Die Entschlüsselung verläuft umgekehrt, nur dass x anders initialisiert werden muss. TEA ist ein interessanter Entwurf zur Entwicklung eines kleinen, schnellen Blockalgorithmus, doch leider weist TEA Schwächen auf. Mehrere Leute haben Verbesserungen vorgeschlagen ("ExtendedTEA"), doch ob diese sicherer sind, muss sich erst noch erweisen.

Trotzdem hier eine einfache C-Version von TEA:

#define DELTA        0x9e3779b9
#define ROUNDS       32
#define LOG_ROUNDS    5
/* ... */
unsigned long key[4], y, z, sum = 0;
int i;
/* key   - Schlüssel (128 Bit)
 * y, z  - 32-Bit-Blöcke
 * sum   - Variable für DELTA
 * ...
 * Verschlüsselung
 */
for (i = 0; i < ROUNDS; i++)
{
  sum += DELTA;
  y += (z << 4) + key[0] ^ z + sum ^ (z >> 5) + key[1];
  z += (y << 4) + key[2] ^ y + sum ^ (y >> 5) + key[3];
}
/* ...
 * Entschlüsselung
 */
sum = DELTA << LOG_ROUNDS;
for (i = 0; i < ROUNDS; i++)
{
  z -= (y << 4) + key[2] ^ y + sum ^ (y >> 5) + key[3];
  y -= (z << 4) + key[0] ^ z + sum ^ (z >> 5) + key[1];
  sum -= DELTA;
}