Extended Tiny Encryption Algorithm

Der XTEA (eXtended Tiny Encryption Algorithm) i​st eine Blockchiffre, d​ie als Verbesserung d​er Blockchiffre TEA entwickelt wurde. XTEA i​st wie TEA bekannt für i​hre einfache Beschreibung u​nd Implementierung. Der Code a​ls C-Programm umfasst n​ur einige Zeilen. XTEA w​urde von David Wheeler u​nd Roger Needham a​n der Universität Cambridge i​m Jahr 1997 entwickelt. XTEA i​st wie a​uch sein Vorgänger TEA f​rei von Patenten.

XTEA
XTEA
Zwei Feistel-Runden (ein Zyklus) von XTEA
Entwickler Roger Needham, David Wheeler
Veröffentlicht 1997
Abgeleitet von TEA
Schlüssellänge 128 Bit
Blockgröße 64 Bit
Struktur Feistelchiffre
Runden variabel, 64 Feistelrunden (32 Zyklen) empfohlen
Beste bekannte Kryptoanalyse
Stand 2009 können bis zu 36 Feistelrunden erfolgreich angegriffen werden.

Eigenschaften

XTEA ist eine Feistelchiffre mit 64 Bit großen Datenblöcken und einem 128 Bit langen Schlüssel. In der Regel werden 64 Runden = 32 Zyklen berechnet (empfohlener Wert, kann auch geändert werden). Der Mechanismus zur Erzeugung der Rundenschlüssel ist sehr einfach gehalten. Das Einbringen eines sogenannten Deltas, das wie bei TEA als definiert ist, verhindert einen Angriff, der die Symmetrie der einzelnen Runden ausnutzt. Allerdings wird bei XTEA das Delta anders in die Runde eingebracht, was hauptsächlich die Stärkung der Verschlüsselung bewirkt.

2009 präsentierte Jiqiang Lu einen Related-key rectangle attack auf 36 Runden.[1] Dieser Angriff betrifft bis zum Stand 2015 die höchste Rundenanzahl. Andrey Bogdanov und Meiqin Wang stellten 2012 außerdem eine Zero correlation linear cryptanalysis auf 27 Runden XTEA vor.[2]

Referenzcode

Es f​olgt die Adaptierung d​er Referenzimplementierung d​er Ver- u​nd Entschlüsselungsroutinen i​n C, d​ie als Public Domain v​on David Wheeler u​nd Roger Needham veröffentlicht wurde:

#include <stdint.h>

/* gegeben sind 64 Datenbits in v[0] und v[1] und 128 Schlüsselbits in k[0] bis k[3] */
/* Die Daten werden mit 2 * num_cycles Runden verschlüsselt */

void encipher (unsigned int num_cycles, uint32_t v[2], uint32_t const k[4]) {
    unsigned int i;
    const uint32_t delta = 0x9E3779B9;
    uint32_t v0 = v[0], v1 = v[1], sum = 0;
    for (i=0; i < num_cycles; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
    }
    v[0] = v0; v[1] = v1;
}

void decipher (unsigned int num_cycles, uint32_t v[2], uint32_t const k[4]) {
    unsigned int i;
    const uint32_t delta = 0x9E3779B9;
    uint32_t v0 = v[0], v1 = v[1], sum = delta * num_cycles;
    for (i=0; i < num_cycles; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
    }
    v[0] = v0; v[1] = v1;
}

Die Adaptierung z​ur Originalimplementierung betreffend kleinere Randpunkte:

  • Die Originalimplementierung verwendet die Typen unsigned long statt der 64-bit-tauglichen uint32_t Typen.
  • Der Originalcode verwendete keine const Typen.
  • Der Originalcode vermeidet redundante Klammerungen, was die Lesbarkeit des Codes reduziert.

Einzelnachweise

  1. Jiqiang Lu: Related-key rectangle attack on 36 rounds of the XTEA block cipher In: International Journal of Information Security, February 2009, S. 1–11, Springer-Verlag.
  2. Andrey Bogdanov und Meiqin Wang: Zero correlation linear cryptanalysis with reduced data complexity. In: Proceedings of FSE 2012, S. 29–48, Springer-Verlag.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.