Mais um blog inútil.

Junho 5, 2009

Threefish

Filed under: Coding,Serious Business,Useless — dongs @ 4:54

Uma das formas de criar hash functions seguras passa por reutilizar uma cifra num ou noutro modo de operação especial. Entre estes encontram-se o modo Davies-Meyer, UBI, Miyaguchi-Preneel, etc.

Um dos candidatos ao SHA-3, o Skein, utiliza uma cifra nova em modo UBI --- Threefish. Dada esta conversa toda sobre o AES-256 ser inseguro, e como não temos já cifras seguras suficientes, implementei esta cifra em C a partir das especificações acessíveis aqui. Existem vários tamanhos para o bloco e chave do Threefish --- implementei apenas o mais realista para cifração de dados: bloco de 256 bits, chave de 256 bits.

Além do bloco e chave de 256 bits, esta cifra aceita um parâmetro adicional, chamado "tweak". Tipicamente para cifração de dados não é muito útil, mas isto muda de figura quando queremos criar modos de operação para cifração sector a sector, como os utilizados pelo TrueCrypt e companhia. A cifra é bastante simples: 72 iterações de adições, xor e rotações em inteiros de 64 bits. A cada 4 iterações é misturada uma subchave derivada da chave com o bloco. No fim de cada iteração a ordem dos inteiros é alterada através de uma permutação. Se acederem às especificações da cifra, irão notar que esta não segue a estrutura típica de uma Feistel Network --- trata-se de uma Substitution-Permutation Network. As vantagens deste design serão abordadas noutra altura mais conveniente.

Uma implementação canónica que aparenta respeitar as especificações encontra-se aqui. O desempenho desta implementação é miserável --- ~250 cpb em 32 bits, ~50 cpb em 64 bit quando a cifra é usada em CTR mode.

O próximo post abordará como optimizar esta cifra para níveis usáveis de desempenho.

2 comentários a “Threefish”

  1. mirage diz:

    Ei pare com essa cifração [~ PTnetCop Script ~]

  2. [...] prometido aos meus fiéis leitores ontem, hoje vamos ver como optimizar a cifra Threefish de 250 ciclos por byte (em 32 bit) para algo mais [...]

Comentar

widgeon
widgeon
widgeon
widgeon