AES vs Blowfish para el cifrado de archivos

106

Quiero cifrar un archivo binario. Mi objetivo es evitar que alguien lea el archivo que no tenga la contraseña.

¿Cuál es la mejor solución, AES o Blowfish con la misma longitud de clave? Podemos suponer que el atacante tiene grandes recursos (software, conocimiento, dinero) para descifrar el archivo.

mimrock
fuente
4
Blowfish es más de una década de antigüedad, te creo aes medias vs twofish ...
torre
Tienes razón, podría haber preguntado eso. Afortunadamente, Jerry me resumió muy bien el tema.
mimrock
@Rook Cuanto más antiguo, mejor es la regla general para los algoritmos de seguridad. Los nuevos algoritmos son para personas que se preocupan más por el rendimiento que por la seguridad.
partir del

Respuestas:

187

Probablemente AES. Blowfish fue el predecesor directo de Twofish. Twofish fue la entrada de Bruce Schneier en la competencia que produjo AES. Fue juzgado como inferior a una entrada llamada Rijndael, que fue lo que se convirtió en AES.

Interesante aparte: en un momento de la competencia, se les pidió a todos los participantes que dieran su opinión sobre cómo se clasificaban los cifrados. Probablemente no sea una sorpresa que cada equipo eligiera su propia entrada como la mejor, pero todos los demás equipos eligieron a Rijndael como el segundo mejor.

Dicho esto, existen algunas diferencias básicas en los objetivos básicos de Blowfish frente a AES que pueden (posiblemente) favorecer a Blowfish en términos de seguridad absoluta. En particular, Blowfish intenta dificultar un ataque de fuerza bruta (agotamiento de la clave) haciendo que la configuración inicial de la clave sea una operación bastante lenta. Para un usuario normal, esto tiene pocas consecuencias (todavía es menos de un milisegundo) pero si está probando millones de claves por segundo para romperlo, la diferencia es bastante sustancial.

Sin embargo, al final, no veo eso como una gran ventaja. Generalmente recomiendo AES. Mis próximas opciones probablemente serían Serpent, MARS y Twofish en ese orden. Blowfish vendría en algún lugar después de esos (aunque hay un par de otros que probablemente recomendaría antes de Blowfish).

Jerry Coffin
fuente
11
Creo que otros algoritmos se consideraron más seguros que Rijndael, pero ofreció un rendimiento muy bueno, mientras que su seguridad se consideró lo suficientemente buena. Diseñar un algoritmo de cifrado es siempre un compromiso entre seguridad y rendimiento.
CodesInChaos
10
@CodeInChaos: Dependiendo de su punto de vista, eso es al menos cierto: Serpent fue probablemente el diseño más conservador. En particular, pensaron que una versión de 16 rondas sería suficiente, por lo que duplicaron eso a 32 rondas. El mejor ataque conocido actualmente es efectivo contra solo 11 asaltos. Si la pregunta original no hubiera restringido específicamente las opciones a AES y Blowfish, y simplemente hubiera pedido el cifrado más seguro y razonablemente conocido, probablemente habría dicho Serpent ...
Jerry Coffin
Además, ese "aparte de interesante" ha surgido en varias preguntas y fuentes cuando estudio para mi examen CompTIA Security +. ¡Las pequeñas cosas pueden no ser tan inútiles después de todo!
Everlight
Blowfishes el más rápido
user924
22

Es un hecho poco reconocido que el tamaño de bloque de un cifrado de bloque también es una consideración de seguridad importante (aunque no es tan importante como el tamaño de la clave).

Blowfish (y la mayoría de los otros cifrados de bloques de la misma época, como 3DES e IDEA) tienen un tamaño de bloque de 64 bits, que se considera insuficiente para los tamaños de archivo grandes que son comunes en estos días (cuanto más grande es el archivo y más pequeño el tamaño del bloque , mayor es la probabilidad de que se repita un bloque en el texto cifrado, y tales bloques repetidos son extremadamente útiles en el criptoanálisis).

AES, por otro lado, tiene un tamaño de bloque de 128 bits. Esta consideración por sí sola es una justificación para utilizar AES en lugar de Blowfish.

coste y flete
fuente
2
La ventaja de un tamaño de bloque de 64 bits es que facilita la colocación del nuevo algoritmo en una aplicación anterior como reemplazo de (3-) DES.
dajames
El tamaño del bloque es un argumento interesante. Escribí, hace varios meses, un artículo que teoriza que el tamaño de bloque de cualquier cifrado simétrico puede extenderse a cualquier longitud: cubicspot.blogspot.com/2013/02/…
CubicleSoft
16

En cuanto a los algoritmos en sí, me decantaría por AES, por la sencilla razón de que ha sido aceptado por NIST y será revisado por pares y criptoanalizado durante años. Sin embargo, sugeriría que, en aplicaciones prácticas, a menos que esté almacenando algún archivo que el gobierno quiera mantener en secreto (en cuyo caso la NSA probablemente le proporcionaría un algoritmo mejor que AES y Blowfish), el uso de cualquiera de estos algoritmos ganó no hace mucha diferencia. Toda la seguridad debe estar en la clave, y ambos algoritmos son resistentes a los ataques de fuerza bruta. Blowfish solo ha demostrado ser débil en implementaciones que no utilizan las 16 rondas completas. Y aunque AES es más nuevo, ese hecho debería hacer que se incline más hacia BlowFish (si solo tuviera en cuenta la edad). Piénsalo de esta manera,

Esto es lo que le plantearía ... en lugar de mirar estos dos algoritmos y tratar de elegir entre el algoritmo, ¿por qué no mira su esquema de generación de claves? Un atacante potencial que quiera descifrar su archivo no se quedará allí sentado y creará un conjunto teórico de claves que se pueden usar y luego realizar un ataque de fuerza bruta que puede llevar meses. En su lugar, va a explotar otra cosa, como atacar el hardware de su servidor, realizar ingeniería inversa en su ensamblaje para ver la clave, tratar de encontrar algún archivo de configuración que contenga la clave o tal vez chantajear a su amigo para que copie un archivo de su computadora. . Esos serán los lugares donde sea más vulnerable, no el algoritmo.

nerdbeardo
fuente
4
AES se agregó recientemente a la lista de "cifrados rotos" en Wikipedia, pero el peor ataque contra Blowfish es contra cuatro rondas y está claramente ausente de la lista de cifrados rotos. El comentario de Bruce sobre la sorpresa de que la gente todavía use Blowfish es lo que aleja a los implementadores. Sin embargo, no está roto, tiene soporte para tamaños de clave variables, admite tamaños de clave más grandes que AES y, desde una perspectiva de programación, es fácil de implementar en comparación con la mayoría de los otros cifrados de bloques simétricos. Blowfish ha sobrevivido a la prueba del tiempo, que es la mayor amenaza para cualquier cifrado simétrico.
CubicleSoft
Estoy de acuerdo en que AES no está en absoluto roto. Sin embargo, en los próximos 10 años necesitaremos un nuevo estándar. Además, cualquiera de los finalistas de AES fue fantástico. Serpent es considerado por muchos como el más difícil de romper, pero AES fue el más elegante. (Y sí, si miras cómo haces el cifrado y descifrado, es definitivamente elegante.)
nerdybeardo
8

AES.

(También supongo que te refieres a dos peces, no al pez globo mucho más viejo y más débil)

Ambos (AES y twofish) son buenos algoritmos. Sin embargo, incluso si fueran iguales o dos, estaba ligeramente por delante en mérito técnico, TODAVÍA elegiría AES.

¿Por qué? Publicidad. AES es EL estándar para el cifrado gubernamental y, por lo tanto, millones de otras entidades también lo utilizan. Un criptoanalista talentoso simplemente obtiene más "beneficios por el dinero" al encontrar una falla en AES que para los menos conocidos y usados.

La oscuridad no proporciona protección en el cifrado. Más cuerpos mirando, estudiando, investigando, atacando un algoritmo siempre es mejor. Quiere el algoritmo más "examinado" posible y ahora mismo es AES. Si un algoritmo no está sujeto a un escrutinio intenso y continuo, debe confiar menos en su fortaleza. Seguro que dos peces no se han visto comprometidos. ¿Es por la fuerza del cifrado o simplemente porque no hay suficientes personas que lo hayan mirado de cerca ... TODAVÍA?

Gerald Davis
fuente
5

La elección del algoritmo probablemente no importa tanto. Usaría AES ya que se ha investigado mejor. Lo que es mucho más importante es elegir el modo de operación correcto y la función de derivación de clave .

Es posible que desee echar un vistazo a la especificación del formato TrueCrypt para inspirarse si desea un acceso aleatorio rápido. Si no necesita acceso aleatorio, XTS no es el modo óptimo, ya que tiene debilidades que otros modos no lo hacen. Y es posible que también desee agregar algún tipo de verificación de integridad (o código de autenticación de mensajes).

CódigosInChaos
fuente
1
Absolutamente, es de vital importancia utilizar una buena función de derivación de claves, como PBKDF2.
caf
3

Sé que esta respuesta viola los términos de su pregunta, pero creo que la respuesta correcta a su intención es simplemente esta: use el algoritmo que le permita la longitud de clave más larga, luego asegúrese de elegir una clave realmente buena. Las pequeñas diferencias en el rendimiento de la mayoría de los algoritmos bien considerados (criptográficamente y cronológicamente) se ven superadas por unos pocos bits adicionales de una clave.

Mike Jones
fuente
7
No puedo estar de acuerdo. El cifrado Lucifer de IBM (predecesor de DES) se utilizó como clave de 128 bits, pero DES (con solo una clave de 56 bits) resultó ser mucho más seguro una vez que se (re) descubrió el criptoanálisis diferencial.
Jerry Coffin
3
Simplemente mirar la longitud de la clave es una métrica muy pobre.
Gerald Davis
2
Por eso dije "los algoritmos mejor considerados". Si considera que Blowfish 128bit es inferior a AES 128bit, debería estar de acuerdo en que Blowfish 256bit saca AES 128bit del agua. Asimismo, la generación y gestión de claves es igualmente importante. Si su clave es "contraseña", realmente no importa en absoluto qué algoritmo utilice. Lo que estoy diciendo es que el OP probablemente esté mirando algo incorrecto.
Mike Jones
2
En la pregunta se indica que las claves se derivarán de contraseñas. Es probable que romper el sistema mediante la fuerza bruta de la contraseña sea mucho más fácil que atacar cualquiera de los algoritmos mencionados aquí. Keylength es casi completamente irrelevante cuando la clave se deriva de una contraseña.
dajames
¿Anotas mi respuesta, a pesar de que dices exactamente lo mismo que yo? Dije longitud de clave y elegí una clave realmente buena. ¿Según qué definición de "bueno" consideraría que una clave es buena si no llena todos los bits de la clave?
Mike Jones
3

Ambos algoritmos (AES y twofish) se consideran muy seguros. Esto se ha cubierto ampliamente en otras respuestas.

Sin embargo, dado que AES se usa mucho ahora en 2016, se ha acelerado específicamente por hardware en varias plataformas, como ARM y x86. Si bien no es significativamente más rápido que dos peces antes de la aceleración del hardware, AES ahora es mucho más rápido gracias a las instrucciones dedicadas de la CPU.

galinette
fuente