RC2 (Blockchiffre)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
RC2
RC2
RC2
Die MIX-Transformation von RC2; eine Runde des Typs MIXING besteht aus der vierfachen Anwendung dieser Transformation
Entwickler Ronald L. Rivest
Veröffentlicht 1987
Schlüssellänge 8–128 Bit in minimal 8-Bit-Schritten, standardmäßig mit 64-Bit-Schritten
Blockgröße 64 Bit
Struktur Feistelchiffre
Runden 18, 16 des Typs MIXING, 2 des Typs MASHING
Beste bekannte Kryptoanalyse
Ein Angriff mit verwandtem Schlüssel und der damit benötigten Anzahl von 234 Klartextblöcken

RC2 ist eine 64 Bit Blockchiffre mit variabler Schlüssellänge, die von Ronald Rivest als möglicher Ersatz für DES im Jahr 1987 entwickelt wurde. RC steht für Rivest Cipher oder Ron’s Code. Ronald Rivest war auch bei der Entwicklung der Chiffren RC4, RC5 und RC6 federführend beteiligt.

Die Entwicklung von RC2 wurde von Lotus gesponsert, welche nach einer kundenspezifischen Chiffre suchten. Nachdem diese von der NSA evaluiert wurde, konnte sie als Teil der Software Lotus Notes außerhalb der Vereinigten Staaten exportiert werden. Die NSA schlug viele Änderungen am Algorithmus vor, die dann von Ronald Rivest eingearbeitet wurden. Nach weiteren Verhandlungen wurde die Blockchiffre für den Export freigegeben. Parallel mit RC4 fiel RC2 mit einer Schlüssellänge von 40-Bit nicht unter die amerikanischen Exportbeschränkungen für Kryptographie.

Ursprünglich wurden die Details des Algorithmus als Eigentum der Firma RSA Security geheim gehalten. Doch am 29. Januar 1996 wurde der Quellcode von RC2 anonym im Usenet-Forum scy.crypt eingetragen. Eine Aufdeckung des Quellcodes in ähnlichem Stil fand auch bei RC4 statt. Es ist bis heute unklar, ob der Verfasser Zugang zum Quellcode hatte, oder ob RC2 durch sogenanntes Reverse Engineering aufgedeckt wurde.

Der RC2-Algorithmus benutzt einen Schlüssel variabler Länge. Die Geschwindigkeit der Verschlüsselung hängt dabei nicht von der Schlüssellänge ab, da aus dem Schlüssel vorab eine schlüsselabhängige Tabelle K mit 64 Wörtern von je 16 Bit berechnet wird.

Der Datenblock besteht aus den vier 16-Bit-Wörtern R[0] bis R[3]. Die 18 Runden sind als Feistelnetzwerk angelegt, 16 davon sind vom Typ MIXING, 2 weitere vom Typ MASHING. Eine Runde des Typs MIXING besteht aus der vierfachen Anwendung der Mix-Transformation. Die Verschlüsselung als C-Code:

uint16_t K[64]; // Rundenschlüssel und S-Box

void mixing (uint16_t R[4], int &n) {
   const int S[4] = { 1, 2, 3, 5 };
   for (int i=0 ; i<4 ; ++i) {
      uint16_t C = R[i+3 & 3];
      R[i] += R[i+2 & 3] & C | R[i+1 & 3] & ~C;
      R[i] += K[n++];
      R[i] = R[i] << S[i] | R[i] >> 16-S[i];
   }
}

void mashing (uint16_t R[4]) {
   for (int i=0 ; i<4 ; ++i)
      R[i] += K[R[i+3 & 3] & 63];
}

void encrypt (uint16_t R[4]) { // verschlüsselt den Datenblock R
   int n = 0;
   for (int j=0 ; j<5 ; ++j)
      mixing(R, n);
   mashing(R);
   for (int j=0 ; j<6 ; ++j)
      mixing(R, n);
   mashing(R);
   for (int j=0 ; j<5 ; ++j)
      mixing(R, n);
}

RC2 ist verwundbar gegenüber einem Angriff mit verwandtem Schlüssel, welcher 234 Klartextblöcke benötigt. Diese Analyse wurde von John Kelsey 1997 durchgeführt.

  • R. Rivest: RFC: 2268 – A Description of the RC2(r) Encryption Algorithm. März 1998 (englisch).