En criptografía, Twofish es un cifrado de bloque de clave simétrica con un tamaño de bloque de 128 bits y longitudes de clave de hasta 256 bits.
En 1997, el NIST convocó un concurso para elegir un sucesor del DES que se conocería como AES, Twofish fue uno de los cinco finalistas del concurso Advanced Encryption Standard, pero no fue seleccionado como estándar.
Twofish está relacionado con el anterior cifrado por bloques Blowfish. Las principales características de Twofish son el uso de cajas S dependientes de la clave precalculada y un programa de claves relativamente complejo. Una mitad de una clave de n bits se utiliza como clave de cifrado real y la otra mitad de la clave de n bits se utiliza para modificar el algoritmo de cifrado (cajas S dependientes de la clave). Twofish utiliza algunos elementos de otros diseños; por ejemplo, la transformación pseudo-Hadamard (PHT) de la familia de cifradores SAFER. Twofish utiliza la misma estructura Feistel que el DES.
En la mayoría de las plataformas de software, Twofish es ligeramente más lento que Rijndael (el algoritmo elegido para Advanced Encryption Standard) para las claves de 128 bits, pero algo más rápido para las claves de 256 bits.
Autores y contexto
Twofish fue diseñado por un equipo liderado por Bruce Schneier e integrado por John Kelsey, Doug Whiting, David Wagner, Chris Hall y Niels Ferguson. Fue publicado como una de las propuestas para el concurso AES a finales de los años 90 y compartió la fase final con otros diseños conocidos (Rijndael, Serpent, RC6 y MARS).
Diseño y características principales
- Tamaño de bloque: 128 bits.
- Longitudes de clave: 128, 192 y 256 bits (soporta claves de hasta 256 bits).
- Estructura: red Feistel de 16 rondas con pre- y post-whitening (claves de blanqueo).
- Subclaves: se generan 40 subclaves en el programa de claves: 32 usadas en las 16 rondas (2 por ronda) y 8 para el blanqueo.
- Cajas S dependientes de la clave: las S-box son generadas a partir de material de clave, lo que complican los ataques basados en propiedades fijas de las S-box.
- Elementos matemáticos: uso de multiplicaciones en matrices MDS (Maximum Distance Separable), un código Reed–Solomon para mezclar subclaves y la transformación pseudo-Hadamard (PHT) en la función de la ronda.
Funcionamiento básico
Twofish opera dividiendo el bloque de 128 bits en cuatro palabras de 32 bits. En cada ronda, se aplica una función de ronda que combina las S-box dependientes de la clave, una mezcla lineal basada en una matriz MDS y la PHT para producir salidas que se combinan con las palabras de estado mediante la estructura Feistel. Antes de la primera ronda y después de la última se aplican operaciones de whitening (XOR con subclaves) para aumentar la resistencia frente a ataques sencillos.
Programa de claves y S-box
El programa de claves de Twofish es relativamente complejo: parte de la clave se usa directamente para generar las S-box dependientes de la clave y la otra parte para producir las subclaves que entran en la rutina de blanqueo y en las rondas. La generación de las S-box emplea transformaciones no lineales y el uso de un código Reed–Solomon sobre bytes para asegurar propiedades de difusión y resistencia a ciertos tipos de análisis.
Seguridad y criptoanálisis
Twofish ha resistido bien el escrutinio criptográfico desde su presentación. Hasta la fecha no se conocen ataques prácticos que comprometan la seguridad completa de Threefish con claves correctas y el cifrador completo. Existen resultados académicos que describen ataques teóricos sobre versiones reducidas del número de rondas y modelos de clave relacionada, pero estos no comprometen la seguridad práctica del algoritmo tal y como fue propuesto (16 rondas y sin suposiciones especiales sobre la clave).
Como resumen: Twofish se considera seguro para usos prácticos y no se le han encontrado vulnerabilidades que permitan romper claves completas dentro de límites computacionales razonables.
Rendimiento y comparaciones
En implementaciones puramente por software, Twofish suele ser competitivo. Históricamente ha mostrado ser ligeramente más lento que Rijndael/AES para claves de 128 bits en muchas plataformas, pero en algunas arquitecturas y para claves de 256 bits puede resultar más rápido. Además, en entornos donde no está disponible la aceleración por hardware AES-NI, Twofish sigue siendo una opción razonable por su diseño orientado a eficiencia en software.
Implementaciones y uso práctico
Twofish se distribuyó con código de referencia y sin restricciones de patente, lo que facilitó su inclusión en bibliotecas y aplicaciones de cifrado. Ha sido implementado en múltiples bibliotecas criptográficas y herramientas; entre los usos más conocidos en aplicaciones de cifrado de disco y contenedores se encuentran proyectos como TrueCrypt y su derivado VeraCrypt, que han ofrecido Twofish como una de las opciones de cifrado.
Licencia y disponibilidad
Los autores publicaron Twofish sin restricciones de patente y pusieron a disposición implementaciones de referencia, lo que permitió su uso libre en software libre y comercial. Esto, junto con su diseño claro y documentación, facilitó su adopción por parte de desarrolladores y proyectos interesados en alternativas al AES.
Conclusión
Twofish es un cifrador de bloque moderno y bien estudiado, diseñado para ofrecer seguridad y buen rendimiento en software. Aunque no fue seleccionado como AES, su diseño influyente, su ausencia de restricciones de patente y su resistencia a ataques prácticos lo mantienen como una opción válida en contextos donde se desea un cifrado robusto de 128 bits de bloque y claves de hasta 256 bits.