Lucifer
Lucifer foi uma cifra desenvolvida pela IBM durante os anos 70 que definiu a estrutura de todas as cifras nas décadas seguintes. A cifra DES foi directamente derivada da Lucifer; ambas eram Feistel networks.
Ao contrário do DES, no entanto, a Lucifer era mais vulnerável a ataques diferenciais (um exemplo das fraquezas da cifra mais adiante). Tinha também um bloco e chave maiores (ambos de 128 bits). O código que se segue tem apenas valor histórico, dado que a cifra é bastante insegura para os standards actuais.
O exemplo fornecido cifra um bloco de 0s com uma chave composta também inteiramente de 0s. O que acontece é evidente:
53 53 53 53 53 53 53 53 F2 F2 F2 F2 F2 F2 F2 F2
Além de se notarem claramente as delimitações dos dois blocos da Feistel net, é tremendamente evidente que isto não é uma permutação aleatória de bits, como uma boa cifra devia ser.
Esta implementação foi derivada do artigo "LUCIFER: a cryptographic algorithm." de Arthur Sorkin, 1984. Aqui.
Thank you very much! - This is cool to study...
Fiz um um pequeno diff para tornar esta cifra ainda melhor!
diff lucifer.c lucifer-fixed.c -u
--- lucifer.c Fri May 29 00:37:54 2009
+++ lucifer-fixed.c Sun May 31 23:09:19 2009
@@ -110,6 +110,21 @@
memset(key, 0, 16);
memset(block, 0, 16);
+
+ block[0]= 'Y';
+ block[1]= 'O';
+ block[2]= 'U';
+ block[3]= ' ';
+ block[4]= 'L';
+ block[5]= 'O';
+ block[6]= 'S';
+ block[7]= 'E';
+
+ key[0] = 'J';
+ key[1] = 'E';
+ key[2] = 'W';
+ key[3] = 'S';
+
lucifer_encrypt(block, key);
for(i=0; i < 16; ++i) printf("%02X ", block[i]);