it-swarm-es.com

¿Cuáles son los cifrados realistas y más seguros para cifrados de código de autenticación de mensajes simétricos, asimétricos, hash?

Estoy interesado en actualizar esta doble pregunta para 2011:

  1. ¿Qué criptología es la más apropiada para dispositivos de baja potencia (como un teléfono celular) y, sin embargo, sigue siendo efectiva?

  2. ¿Qué criptología es más segura para un desarrollador .NET?

En noviembre del '08 Rasmus Faber respondió esto pregunta de desbordamiento de pila similar con esta respuesta:

  • Cifrado simétrico: AES-256

  • Cifrado asimétrico: RSA con clave de 4096 bits (creo que es el máximo en .NET) o ECDSA con clave de 571 bits (pero eso solo es compatible con .NET 3.5)

  • Hash: SHA-512

  • Código de autenticación de mensaje: HMAC con SHA-512

Dicho esto, son excesivos para la mayoría de las aplicaciones, y debería funcionar bien con AES-128, RSA con clave de 2048 bits, SHA-256 y HMAC con SHA-256.

¿Estas recomendaciones siguen siendo ciertas hoy?

24
goodguys_activate

Las recomendaciones que usted cita son un poco exageradas. Un punto a tener en cuenta es que más allá de un cierto nivel (por ejemplo, en el tamaño de la clave o el tamaño de salida de la función hash), todas las funciones son "irrompibles con la tecnología previsible" y es un poco delicado compararlas. Afirmar que SHA-512 es "más robusto" que SHA-256 significa que está imaginando que SHA-256 podría romperse, lo que, por lo que podemos decir por ahora y los próximos 40 años, no es cierto (más allá de 40 años , tratar de imaginar qué tecnología podríamos tener es arriesgado; hace 40 años, nadie se imaginaba Internet como lo es hoy, pero la mayoría de la gente asumió que para 2010 todos manejaríamos autos voladores).

AES-128 ya es lo suficientemente seguro y menos costoso (AES-256 usa 14 rondas, mientras que AES-128 usa 10 rondas).

La clave RSA rota más grande actualmente es un módulo de 768 bits, y tomó un gran esfuerzo (cuatro años y cerebros realmente grandes). Las claves de 1024 bits se consideran utilizables para la seguridad a corto plazo, aunque se recomiendan claves más grandes. Las claves de 2048 bits son apropiadas. El uso de una clave dos veces más grande significa 8 veces más trabajo para firmar o descifrar, por lo que no desea exagerar. Consulte este sitio para obtener una encuesta sobre cómo la longitud de la clave RSA puede relacionarse con la seguridad.

ECDSA sobre una curva de 256 bits ya alcanza un nivel de seguridad "irrompible" (es decir, aproximadamente el mismo nivel que AES con una clave de 128 bits o SHA-256 contra colisiones). Tenga en cuenta que hay curvas elípticas en campos primos y curvas en campos binarios; qué tipo es más eficiente depende del hardware involucrado (para curvas de tamaño similar, una PC preferirá las curvas en un campo principal, pero el hardware dedicado será más fácil de construir con campos binarios; el CLMUL instrucciones sobre los nuevos procesadores Intel y AMD pueden cambiar eso).

SHA-512 utiliza operaciones de 64 bits. Esto es rápido en una PC, no tan rápido en una tarjeta inteligente. SHA-256 es a menudo una mejor oferta en hardware pequeño (incluidas arquitecturas de 32 bits, como enrutadores domésticos o teléfonos inteligentes).

En este momento, los sistemas RFID baratos tienen una potencia demasiado baja para usar cualquiera de los anteriores (en otras palabras, los sistemas RFID que no pueden ser tan baratos como podrían ser). Los sistemas RFID todavía usan algoritmos personalizados de seguridad a menudo cuestionables. Los teléfonos celulares, por otro lado, tienen suficiente potencia de CPU para hacer una criptografía adecuada con AES o RSA (sí, incluso teléfonos no inteligentes baratos).

38
Thomas Pornin

La respuesta citada es mi respuesta a lo que es el más seguro cripto en .NET.

Mi recomendaciones (tanto para dispositivos de alta como de baja potencia):

  • Cifrado simétrico: AES-128

  • Cifrado asimétrico: RSA con clave de 2048 bits o ECDSA/ECDH con clave de 256 bits

  • Hash: SHA-256

  • Código de autenticación de mensaje: HMAC con SHA-256

  • Cifrado de flujo: AES-128 en modo CTR

11
Rasmus Faber

En términos de seguridad, estas recomendaciones siguen siendo válidas y lo mismo que yo haría.

Para los cifrados asimétricos, realmente hay tres cosas que le preocupan: cifrado, intercambio de claves y firmas. RSA puede ser tanto un esquema de cifrado como de firma, mientras que ECDSA es específicamente una firma. Sin embargo, también hay versiones de curva elíptica de cifrado e intercambio de claves (aunque no estoy seguro de qué es de dominio público). Dicho esto, los tamaños de los parámetros son los mismos para los tres.

El único otro cavet es que SHA-256/512 pronto será reemplazado pero "pronto" en este caso será 2012.

Con respecto a la baja potencia, realmente depende de qué tan baja sea la potencia. Si por teléfono celular se refiere a un teléfono inteligente, todos estos son apropiados. Para una tarjeta inteligente, RFID, red de sensores, etc., es una historia diferente. Además, la mayoría de los algoritmos de baja potencia no estarán en una biblioteca estándar. Sin embargo, lo guiaría hacia los tamaños de los parámetros en la última oración de "no exagerar".

6
PulpSpy

Por seguridad hasta el año 2030, los expertos en NIST recomiendan al menos SHA-224, 2048 bits para RSA o DSA, EDCSA de 224 bits y AES-128 o triple-DES de 3 teclas.

Con base en su trabajo, a fines de 2010, el gobierno de los EE. UU. Desprecia estos algoritmos: SHA-1, RSA o DSA de 1024 bits, ECDSA de 160 bits (curvas elípticas), 2TDEA de 80/111 bits (DES triple de dos claves) )

Para obtener más información, consulte esta publicación y los documentos del NIST a los que hace referencia: http://securitymusings.com/article/1587/algorithm-and-key-length-deprecation

6
nealmcb

Respuestas correctas criptográficas por Colin Percival en 2009 todavía está bastante actualizado en mi humilde opinión y cubre la pregunta y más.

5
Bruno Rohée

Para los cifrados simétricos, puede ser mejor usar AES-128 en lugar de AES-256 debido a posibles debilidades en el cronograma clave para AES-256: http://www.schneier.com/blog/archives/2009/ 07/another_new_aes.html

2
Justin Clarke

Lo que hicimos fue seleccionar varios métodos de cifrado y hash y convertir todos los resultados a un formato hexadecimal común. Nuestros datos más confidenciales están utilizando SHA-256 y DES-3, mientras que los datos menos confidenciales que se pueden adivinar fácilmente están utilizando MD5 y RC4 y también estamos utilizando una conversión directa XOR para algunas cosas). Cada cifrado simétrico tiene su propia contraseña y todos los datos cifrados están codificados con una suma de verificación. Confiar en un cifrado para todo es peligroso.

0
Dave