2011-03-09 19 views
10

¿Cuál es la diferencia entre MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_256, MCRYPT_BLOWFISH, etc. ¿Cuál es la más adecuada para la transferencia de datos en la web?¿Cuáles son las diferencias entre estos algoritmos de cifrado?

+0

qué datos se están transfiriendo, ¿en qué se transfieren? –

+0

Esta pregunta es muy amplia. ¿Puedes limitar el alcance? –

Respuesta

19

Rijandel es otro nombre para AES, el algoritmo actual "un buen estándar". El número 128 o 256 es la longitud de la clave.

Blowfish es un cifrado de bloque de 64 bits algo más antiguo (AES es un cifrado de bloque de 128 bits).

No se puede decir que ninguno de ellos sea "mejor" o "peor", porque ninguno se ha roto realmente, pero en general AES debería ser superior, y la mayoría de las implementaciones también son más rápidas. Además, las CPU más modernas son compatibles con AES en hardware, lo que lo hará aún más rápido ... por lo que hay pocas razones para que no sea para usar AES.

En cuanto a la longitud de la clave, 128 bits es bastante suficiente para un cifrado simétrico. A menos que, por supuesto, seas el guardián de los códigos de armas nucleares de tu país, en ese caso querrás usar claves de 256 bits.

Tenga en cuenta que si desea utilizar una clave de 256 bits de forma razonable, necesitará una contraseña de alrededor de 40 caracteres. Lo que demuestra una vez más que el algoritmo de cifrado no es el eslabón débil de la cadena de seguridad, sino el ser humano.

Editar: Pensándolo bien, 50-60 caracteres es probablemente una suposición más razonable para la longitud de contraseña requerida en una clave de 256 bits. El idioma inglés tiene considerablemente menos de 2 bits de entropía por personaje. Supongamos que utilizas una secuencia de caracteres algo más aleatoria de letras y dígitos (aunque todavía debes ser capaz de recordarla ...), así que tal vez tengamos 4-5 bits de entropía por personaje (¡bastante optimista!). Eso requeriría que escriba entre 51 y 64 caracteres, por lo que la entropía de la contraseña coincide aproximadamente con la de la clave.

Ahora la pregunta es: ¿Cuántos de nosotros tenemos una contraseña de 50 caracteres? :-)

Actualización:
A finales de 2011, existe un ataque por la recuperación de claves en Rijndael/AES (Bogdanov, Khovratovich, Rechberger) que no es uno de los "principalmente teórica" ​​o "hilarante reducido ronda "tipo de ataques. El ataque funciona en todo el AES y es aproximadamente 4 veces más rápido que la fuerza bruta. Formalmente, uno puede considerar que Rijndael está "roto".
Prácticamente, el ataque es irrelevante hasta la fecha. Incluso con la longitud de clave admitida más corta, un ataque cuatro veces más rápido que la fuerza bruta requiere operaciones de 2 , lo que no es práctico incluso con una implementación de hardware masivo. Sin embargo, esto podría cambiar en el futuro si se puede mejorar el ataque.

+1

¿Quién dice que la clave de encriptación (y IV) tiene que ser legible por el ser humano? ['openssl_random_pseudo_bytes (32)'] (http://us3.php.net/manual/en/function.openssl-random-pseudo-bytes.php) obtendrá 256 bits de aleatoriedad criptográficamente adecuada, que resulta ser la tamaño máximo de clave en AES-256. Se puede almacenar de forma segura codificada en base64. – Charles

+0

2 bits de entropía por personaje? Suena demasiado bajo para las contraseñas, supongo que más de 5 o 6 bits por personaje. Supongo que la entropía por personaje del texto en inglés (como un artículo de periódico) será mucho menor que la de las contraseñas. –

+0

@Charles: Es cierto que puede crear trivialmente 256 bits de aleatorio para una clave, pero ¿para qué sirve? Eso solo cambia el problema una etapa más: ¿cómo se protege esta clave aleatoria? No importa cuántos bits aleatorios tenga una clave generada aleatoriamente, no tiene más seguridad que el eslabón más débil de la cadena de seguridad. La encriptación simétrica nunca es el eslabón débil. El 99% del tiempo es humano (porque los humanos fracasan completamente al elegir buenas contraseñas y mantenerlas a salvo), y para el 1% restante casi siempre será un protocolo de intercambio de claves. – Damon

1

Depende del tipo de respuesta que desee: las diferencias en la implementación son una mera preocupación de programación, mientras que las diferencias en el diseño suelen ser pruebas matemáticas bastante detalladas. Explicar las intrincadas diferencias de diseño entre varios algoritmos de cifrado posiblemente esté fuera del alcance de este sitio. Además, cada algoritmo tiene debilidades, algunas conocidas, otras no. Las debilidades específicas en los algoritmos existentes generalmente resultan en su retiro, pero puede haber formas de evitarlos (Ejemplo clásico: DES tenía un subconjunto de claves que daba como resultado un código fácil de descifrar. La solución era no usar esas claves).

3

Tanto Rijndael como Blowfish se consideran seguros.

MCRYPT_RIJNDAEL_128 vs MCRYPT_RIJNDAEL_256:
La única diferencia es el tamaño de bloque. Puede usar claves de 128 bits, 192 bits o 256 bits.
Las llaves más grandes tardan más tiempo en fuerza bruta.
La versión de 256 bits es por eso más segura.
Nota: La versión de 128 bits todavía tarda mucho tiempo tiempo en fuerza bruta.

Actualmente Rijndael es el Advanced Encryption Standard:
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

AES es generalmente más rápido que Blowfish porque:
- El propio algoritmo es más eficiente para los procesadores (bit vs bloques de bytes).
- Los procesadores Manny admiten la aceleración de hardware para AES.

Conclusiones:
- Las tres opciones son lo suficientemente seguras para la transferencia de datos.
- La elección depende de cuán "secretos" sean los datos.
- Rijndael es más utilizado y, por lo tanto, es más fácil de implementar en algunas situaciones.

+2

La fuerza bruta en una clave 128 no es realista. Simplemente no va a suceder. Si tiene un i7, puede hacer alrededor de 40 millones de operaciones AES por segundo. Supongamos que mis números están en un factor de 1000 erróneos, y supongo que un atacante tiene una gigantesca red zombie con 500 millones de esas máquinas. Ahora divida 2^128 por esos números y divida por (86400 * 365) nuevamente. Eso todavía es 10^11 años. Diablos, nuestro planeta ni siquiera existe desde hace 10^11 años. Es * mucho * más probable que su frase de contraseña se rompa. – Damon

+0

Eso es exactamente por lo que mencioné que lleva 'mucho tiempo'. Actualmente, la fuerza bruta es la única manera de descifrar los datos encriptados AES sin la clave, en otras palabras, no hay un método más rápido que el de probar todas las opciones posibles. Básicamente, el cifrado AES de 128 bits sigue siendo inmensamente seguro, hay demasiadas posibilidades :) – Anne

+3

'RIJNDAEL_256' no es AES. Solo 'RIJNDAEL_128' – CodesInChaos

-1

RSA es un algoritmo de cifrado asimétrico y máxima Longitud de clave 2048 para el año propuesto 2030 AES es un algoritmo simétrico con un tamaño de clave máximo de 256 bits para el año propuesto 2015 Un algoritmo de cifrado Serpent es también algoritmo simétrico con clave 256 y año propuesto 2015

+0

¡Eso no responde la pregunta! – alfasin

2

La (s) respuesta (s) a esta pregunta indicando que, con respecto a MCRYPT_RIJNDAEL_128 y MCRYPT_RIJNDAEL_256, "El número 128 o 256 es la longitud de la clave" - ​​esto es incorrecto. Estos números se refieren a blocksize, no a la longitud de la clave. Sin embargo, ambas implementaciones (que usan un tamaño de bloque de 128 o 256 bits) pueden aceptar claves de 128 o 256 bits.

Cuestiones relacionadas