RC2 (Blockchiffre)
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. GeschichteDie 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. ArbeitsweiseDer 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 Der Datenblock besteht aus den vier 16-Bit-Wörtern 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);
}
KryptoanalyseRC2 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. Weblinks
|
Portal di Ensiklopedia Dunia