Blowfish

Na Galipedia, a Wikipedia en galego.

En criptografía, Blowfish é un codificador de bloques simétricos, deseñado por Bruce Schneier no 1993 e incluído nun gran número de conxuntos de codificadores e produtos de cifrado. Mentres que ningún analizador de cifrados de Blowfish efectivo foi atopado hoxe en día, déuselle máis atención da decodificación de bloques con bloques máis grandes, como AES e Twofish.

Schneier deseñou Blowfish como un algoritmo de uso xeral, intentando substituír o antigo DES e libre de problemas asociados con outros algoritmos. Ó mesmo tempo, moitos outros deseños eran propietarios, patentados ou gardados polo goberno. Schneier declarou “Blowfish non ten patente, e así se quedará nos demais continentes. O algoritmo está a disposición de dominio público, e pode ser usado libremente por calquera”.

Funcionamento do algoritmo[editar | editar a fonte]

Diagrama de Blowfish.

Blowfish usa bloques de 64 bits e chaves que van desde os 32 bits ata os 448 bits. É un codificador de 16 roldas Feistel e usa chaves que dependen das Caixas-S. Teñen unha estrutura similar a CAST-128, o cal usa Caixas-S fixas.

O diagrama amosa a acción de Blowfish. Cada liña representa 32 bits. O algoritmo garda 2 arranxos de subchaves: O arranxo P de 18 entradas e 4 caixas-S de 256 entradas. Unha entrada do arranxo P é usada cada rolda, despois da rolda final, a cada metade do bloque de datos aplícaselle un XOR cunha das 2 entradas do arranxo P que non foron utilizadas.

A función divide as entradas de 32 bits en 4 bloques de 8 bits, e usa os bloques como entradas para as caixas-S. As saídas deben estar no módulo 232 e aplícaselles un XOR para producir a saída final de 32 bits.

Diagrama da función F de Blowfish

Debido a que Blowfish está na rede Feistel, pode ser invertido aplicando un XOR entre P17 e P18 ao bloque texto codificado, e así sucesivamente úsanse as P-entradas en orde reversivo.

A xeración de chaves comeza iniciando os P-arranxos e as caixas-S cos valores derivados dos díxitos hexadecimais de pi, os cales non conteñen patróns obvios. A chave secreta aplícaselle un XOR cas P-entradas en orde (ciclando a llave se é necesario). Un bloque de 64 bits de puros ceros é cifrado co algoritmo como se indica. O texto codificado resultante substitúe P1 e P2. Entón o texto codificado é cifrado de novo cas novas subchaves, P3 e P4 son substituídas polo novo texto codificado. Isto continúa, substituíndo todas as entradas do P-arranxo e todas as entradas das caixas-S. En total, o algoritmo de cifrado Blowfish correrá 521 veces para xerar todas as subchaves, cerca de 4KB de datos son procesados.