Pregunta

Estoy escribiendo un programa sencillo para el cifrado de archivos. Sobre todo como un ejercicio académico, sino posiblemente para el futuro uso serio. Todo el trabajo pesado se hace con bibliotecas de terceros, pero poner las piezas juntas de una manera segura sigue siendo un gran reto para los no criptógrafo. Básicamente, tengo casi todo funcione de la manera que creo que debería.

Estoy usando AES de 128 bits para el cifrado con una longitud de clave de 128 bits. Quiero usuarios sean capaces de entrar en las contraseñas de longitud variable, por lo que decidí hash de la contraseña con MD5 y luego usar el hash como clave. Pensé que esto era aceptable. - la llave se supone siempre que ser un secreto, así que no hay razón para preocuparse por los ataques de colisión

Ahora que he implementado esto, me encontré con un par de artículos que indica que esta es una mala idea. Mi pregunta es: ¿por qué? Si se elige una buena contraseña, el cifrado se supone que es lo suficientemente fuerte por sí solo para no revelar la tecla, excepto a través de una extraordinaria (es decir: no factible en la actualidad) el esfuerzo de fuerza bruta, ¿verdad? ¿Debo utilizar algo así como PBKDF2 para generar la clave o es sólo una exageración para todos, pero las aplicaciones criptográficas más extremas?

¿Fue útil?

Solución

Este artículo sobre clave que refuerza podría ayudarle. Básicamente desea hacer la llave más fuerte (más entropía que en una contraseña) y hacer su derivación de la contraseña de forma fiable tiempo.

Otros consejos

Bueno, ya que su puesto es en general, permítanme decir algunas cosas generales:

  1. MD5, SHA-0, SHA-1 son todos los hashes rotos, y no se debe utilizar para cualquier propósito criptográfica, utilizar SHA-2.

  2. Usted debe, por lo general, utilizar métodos bien conocidos y documentados para derriving teclas de contraseñas (usted no menciona qué idioma, por favor decir cuál está utilizando).

  3. Al hacer cualquier tipo de programación de la seguridad, la cosa más importante que hacer es, antes de hacer nada, estrictamente documentar su 'modelo de amenaza'. Esto es básicamente una lista de todos los ataques que está tratando de prevenir, y cómo va a hacerlo, y también lo que los ataques ordenar que no se puede prevenir en contra. Es muy divertido de hacer, y que va a llegar a aprender sobre todos los ataques y otras cosas interesantes.

La respuesta a su nueva pregunta es: que sin duda debe ser algo así como el uso de PBKDF2 para generar la clave.

Asumo que va a tener una contraseña (por lo menos 10 caracteres números inferiores y superiores puntuacion ¿verdad?), Que luego generar una clave AES-256. La clave se utiliza para cifrar / descifrar el archivo (s). Que desea utilizar algo así como PBKDF2 con el fin de disminuir la posibilidad de que una persona que recibe el archivo de averiguar su clave / contraseña a través de ataques de fuerza bruta. Usando algo como PBKDF2 (y una sal de azar!) Aumenta el costo de romper el cifrado en el archivo.

Lo que realmente es recomendar que utilice esto como un juguete y no para proteger algo que realmente te importa. Si usted no es un experto en seguridad, que se va a cometer errores, incluso los expertos (y muchos de ellos juntos) cometer errores: http://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-discovered.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top