Mais um blog inútil.

Maio 29, 2009

Lucifer

Filed under: Coding,Serious Business — dongs @ 0:58

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.

Lucifer C Source code.

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.

2 comentários a “Lucifer”

  1. Thank you very much! - This is cool to study...

  2. falso diz:

    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]);

Leave a Reply for falso

widgeon
widgeon
widgeon
widgeon