Permutationscode bei DES
-
Moin,
muss mir grad den DES algorithmus anschauen - und vom prinzip her hab ich ihn auch verstanden.. aber der code dazu ist noch etwas mit fragezeichen voll...
Eine allgemeine Frage hab ich zur Permutation - dort werden immer Bit-Masken angewandt bei DES mit z.B. 0x33333333 etc - welche Bedeutung haben diese (wie wird hier die Permutation unterteilt?) - warum muss die eigentliche Permutation 4x ausgeführt werden?
z.B. bei der Permutation am Anfang des Algorithmus: left und right entsprechen den Daten 64Bit (von denen left den linken teil, also die linken 32bit enthält). work=0;
PERMUTATION_INIT (left, work, right);
#define PERMUTATION_INIT(left, temp, right) \ PERMUTATION(left, temp, right, 4, 0x0F0F0F0F); \ PERMUTATION(left, temp, right, 16, 0x0000FFFF); \ PERMUTATION(left, temp, right, 2, 0x33333333); \ PERMUTATION(left, temp, right, 8, 0x00FF00FF); \ right = (right << 1) | (right >> 31); \ temp = (left ^ right) & 0xAAAAAAAA; \ right ^= temp; \ left ^= temp; \ left = (left << 1) | (left >> 31);
Auch das Pattern 0xAAAAAAAA ist mir noch unklar. Die XOR Verknüpfung von left / right mit temp hebt die XOR Verknüpfung von der Permutation (define PERMUTATION) wieder auf?
#define PERMUTATION(a, temp, b, offset, mask) \ temp = ((a >> offset) ^ b) & mask; \ b ^= temp; \ a ^= temp << offset;
derHans