Blowfish: qué es y características del cifrado por bloques
Descubre Blowfish: origen, funcionamiento y características del cifrado por bloques; ventajas, limitaciones y aplicaciones clave para mejorar la seguridad informática.
En criptografía, Blowfish es un cifrado de bloque simétrico con clave, diseñado en 1993 por Bruce Schneier. Desde su publicación se ha incluido en numerosos productos y bibliotecas de cifrado. Blowfish ofrece una buena velocidad de cifrado en software y durante muchos años no se conocieron ataques efectivos contra la versión completa. Con el tiempo, el algoritmo de cifrado por bloques AES y otros esquemas recibieron mayor atención para aplicaciones modernas.
Schneier creó Blowfish como un algoritmo de uso general para reemplazar al antiguo DES y evitar las limitaciones de otros diseños de la época. En el momento de su lanzamiento, muchos algoritmos estaban patentados o eran de uso restringido. Schneier declaró expresamente que "Blowfish no está patentado, y seguirá estándolo en todos los países. El algoritmo pasa a ser de dominio público y puede ser utilizado libremente por cualquiera". Esto facilitó su adopción y estudio por la comunidad.
Diseño y características principales
Blowfish es un cifrado Feistel de 16 rondas con las siguientes características técnicas relevantes:
- Tamaño de bloque: 64 bits.
- Longitud de la clave: variable, hasta 448 bits (acepta claves de 4 a 56 bytes, es decir, típicamente de 32 a 448 bits).
- Estructura interna: utiliza un arreglo P de 18 subclaves de 32 bits y cuatro grandes cajas S dependientes de la clave (cada S contiene 256 entradas de 32 bits).
- Programa de claves: complejo y costoso: las S-box y la P-array se inicializan con constantes (derivadas de las dígitos hexadecimales de π), se mezclan con la clave y se realizan cifrados iterativos para generar todas las subclaves.
- Rendimiento: muy rápido en operación de cifrado/descifrado con una clave ya establecida, pero el establecimiento de una nueva clave (key schedule) es relativamente lento —se estima que tarda un tiempo equivalente a cifrar varios kilobytes—, lo que hace que el cambio frecuente de claves sea costoso.
La dependencia de las cajas S respecto a la clave y el complejo programa de claves eran intencionados para reforzar la resistencia frente a análisis criptoanalíticos, pero la lentitud del preprocesado de clave limita su uso en sistemas con recursos muy reducidos (por ejemplo, algunas tarjetas inteligentes antiguas).
Seguridad y criptoanálisis
A lo largo de los años se han publicado varios estudios sobre la seguridad de Blowfish:
- En 1996, Serge Vaudenay describió un ataque teórico sobre versiones reducidas del algoritmo y señaló la existencia de una clase de claves débiles que podrían detectarse bajo condiciones particulares. Estos ataques requieren cantidades imprácticas de texto plano conocido para aplicarse a la versión completa en la práctica.
- Vincent Rijmen desarrolló un ataque diferencial de segundo orden capaz de romper hasta cuatro rondas, pero no extendible a las 16 rondas completas.
- No se ha conocido, hasta hoy, un criptoanálisis práctico que rompa las 16 rondas completas de Blowfish aparte de la búsqueda por fuerza bruta sobre la clave.
- En 1996 se detectó también un error de extensión de signo en una implementación en C publicada, que mostró la importancia de implementar correctamente algoritmos criptográficos.
- Un punto crítico en la práctica es el tamaño de bloque de 64 bits: en escenarios donde se cifran grandes volúmenes de datos bajo la misma clave, los cifrados de 64 bits son vulnerables a colisiones por el efecto cumpleaños. Ataques como Sweet32 (2016) demostraron que los cifrados de bloque de 64 bits (por ejemplo 3DES y Blowfish) pueden exponer datos cuando se transfieren grandes cantidades en conexiones persistentes (TLS), por lo que actualmente se desaconseja su uso en protocolos y aplicaciones que manejan flujos extensos de datos.
Por todo ello, aunque Blowfish sigue siendo seguro para muchos usos con claves adecuadas y volúmenes de datos limitados, las recomendaciones actuales favorecen cifrados con bloque de 128 bits (como AES) o algoritmos modernos como Twofish, que Schneier mismo ha recomendado como alternativa.
Usos, ventajas y limitaciones
- Ventajas: libre de patentes y de dominio público; alto rendimiento en cifrado/descifrado con clave establecida; diseño sencillo de implementar correctamente.
- Limitaciones: tamaño de bloque de 64 bits (problemático para grandes volúmenes de datos); inicialización de claves lenta, lo que lo hace inapropiado cuando las claves cambian con frecuencia o en dispositivos muy limitados.
- Legado y derivados: Blowfish ha servido como base para algoritmos y herramientas posteriores. Un ejemplo conocido es bcrypt, un esquema de hash de contraseñas que aprovecha el costoso programa de claves de Blowfish para aumentar el coste computacional de ataques por diccionario o fuerza bruta. También, como indica el uso en OpenBSD, la lentitud controlada del key schedule puede emplearse deliberadamente para reforzar el almacenamiento de contraseñas (de cascado de contraseñas y fortalecimiento de la clave).
Recomendaciones prácticas
Para nuevas implementaciones y protocolos que manejan grandes volúmenes de datos o requieren compatibilidad con estándares modernos, se recomienda preferir algoritmos con tamaño de bloque de 128 bits (por ejemplo, AES) o modernos esquemas autenticados (AEAD). Blowfish puede seguir siendo útil para sistemas con datos limitados y donde la compatibilidad o la simplicidad sean prioridades, siempre evaluando el riesgo asociado al tamaño de bloque y a la gestión de claves.
En resumen, Blowfish es un diseño histórico importante, público y eficiente en muchas circunstancias, pero hoy día suele considerarse reemplazable por algoritmos más recientes y adaptados a las necesidades de seguridad actuales.
Páginas relacionadas
- Estándar de cifrado avanzado
- eSTREAM - Una evaluación de nuevos cifrados de flujo que está llevando a cabo la UE.
- Twofish
- MacGuffin
Preguntas y respuestas
P: ¿Qué es Blowfish?
R: Blowfish es un cifrado simétrico por bloques con clave que fue creado en 1993 por Bruce Schneier. Se ha incluido en muchos productos de cifrado desde entonces.
P: ¿Para qué se creó Blowfish?
R: Blowfish se creó como algoritmo de uso general para sustituir al antiguo algoritmo DES y eliminar los problemas y dificultades de otros algoritmos de cifrado.
P: ¿Qué longitud puede tener la clave para Blowfish?
R: La longitud de la clave para Blowfish puede oscilar entre 0 y 448 bits.
P: ¿Cuáles son algunas de las características del diseño de Blowfish?
R: Algunas características del diseño incluyen cajas S dependientes de la clave y un programa de claves muy complejo.
P: ¿Se conoce algún criptoanálisis de la versión de ronda completa de Blowfish?
R: A fecha de 2008, no se conoce ninguna forma de romper las 16 rondas completas aparte de una búsqueda por fuerza bruta.
P: ¿Qué tipo de ataque encontró Serge Vaudenay contra Blowfish?
R: Serge Vaudenay encontró un ataque de texto plano conocido que necesita 28r + 1 textos planos conocidos para romperse, donde r es el número de rondas. También encontró una clase de claves débiles que podían ser detectadas y rotas por este mismo ataque con sólo 24r + 1 textos planos conocidos.
P: ¿Recomienda Bruce Schneier utilizar ahora Twofish en lugar de Blowfish?
R: Sí, Bruce Schneier recomienda utilizar Twofish en lugar de Blowfish ahora debido a sus medidas de seguridad mejoradas en comparación con algoritmos más antiguos como DES o incluso más nuevos como AES.
Buscar dentro de la enciclopedia