AES para cifrado de clave

3

¿Es AES una buena opción para proteger una clave almacenada en la computadora de un usuario de mi aplicación? He visto hilos en las contraseñas de hashing que sugieren el uso de algoritmos lentos para defenderse contra Brute ataques de fuerza.

También, cualquier recomendación sobre qué parámetros debo usar para RijnadealManaged , como el algoritmo de relleno, ciphermode o tamaño de clave?

    
pregunta Casebash 27.07.2011 - 04:39
fuente

3 respuestas

6

Es mejor usar DPAPI .

Si bien AES-256 / CBC / PKCS7 / etc es una buena opción de cifrado + parámetros, eso no solucionará su problema: después de cifrar la clave de cifrado, ¿qué hace con la clave de cifrado de clave (KEK)? ? Seguirás atascado teniendo que cifrar la clave de cifrado ...

DPAPI proporciona una solución excelente, que le permite repartir la responsabilidad de la administración de claves en el sistema operativo. (Tipo de.)

Puede usar la clase ProtectedData , desde el Sistema. Seguridad. El espacio de nombres de la criptografía es muy simple y directo. Solo asegúrese de configurar USER_MODE para asegurarse de que solo ese usuario tenga acceso para descifrar la clave.

Si retrocede por un momento, dependiendo de la aplicación, es mejor que utilice DPAPI para proteger el KEK (clave de cifrado de clave), y no la clave de cifrado en sí, ya que compartir y distribuir claves es más fácil, al igual que cambiar las claves (si necesario).

    
respondido por el AviD 27.07.2011 - 10:41
fuente
1

También soy nuevo en criptografía, así que toma esto con un grano de sal, pero usando AES en CBC es probablemente una buena opción, aunque realmente depende de qué / cómo esté encriptando). AES con claves de 128 bits es suficiente para documentos de nivel SECRETO; Se requieren claves de 192 o 256 bits para los documentos TOP SECRET de acuerdo con la NSA . En cuanto al relleno, creo que el estándar es PKCS7 Padding , por lo que probablemente deberías seguir con eso. Si decide utilizar CBC, asegúrese de generar un IV aleatorio (la misma longitud que su clave) cada vez que cifre cualquier dato con esa clave. Debe asegurarse de que mientras use la misma clave nunca use el mismo IV para cifrar otro mensaje. La IV se considera pública, por lo que simplemente puede almacenarla junto con sus datos encriptados para que pueda utilizarse para inicializar el cifrado durante el descifrado.

Habiendo dicho todo eso, probablemente lo más seguro es ver si .NET tiene una biblioteca similar a Jasypt o KeyCzar . Estas bibliotecas se ocuparán de todos los pequeños detalles peligrosos para ti, por lo que no terminarás creando agujeros de seguridad que ni siquiera sabías que eran posibles.

¡Espero que al menos apunte en la dirección correcta!

    
respondido por el senecaso 27.07.2011 - 05:41
fuente
1

En general, no debería hacer esto usted mismo, sino seguir las pautas del sistema que está utilizando.

La forma "correcta" de almacenar contraseñas es con un hash "unidireccional", con "sal" y "fortalecimiento de clave".

El término "unidireccional" significa justamente eso. Una vez que lo hash, nunca puedes recuperar la contraseña tú mismo. No hay forma de recuperar la contraseña. Sin embargo, aún puede verificar si el usuario ha ingresado la contraseña correcta repitiendo el hash en lo que escribió y ver si coincide con el que está almacenado en la base de datos.

Si los hackers roban sus hashes de contraseña, pueden descifrarlos sin conexión.

El crack más común es calcular previamente un número de hashes de millones de contraseñas. Cuando roban hashes de su sitio, los buscan en una tabla y encuentran instantáneamente la contraseña original.

Para anular eso, debes "saltear" la contraseña. Generas un texto aleatorio y hash ese texto con la contraseña. A continuación, almacena ese sal + hash en su base de datos.

Esto obliga a los piratas informáticos a "forzar la fuerza bruta" de sus contraseñas en lugar de usar una "búsqueda de tabla". Los equipos de escritorio de los piratas informáticos pueden calcular 1 billón de hashes por segundo, por lo que rápidamente descubrirán contraseñas pequeñas.

Para vencer eso, simplemente hash repetidamente el valor. Si repite el hash mil veces, el pirata informático ahora solo puede probar un millón por segundo.

Desafortunadamente, cuanto más caro sea para el pirata informático, más caro será hacer las contraseñas de prueba por ti mismo. Repetir el hash 1000 veces es un buen compromiso entre reducir la velocidad del pirata informático e impactar el rendimiento de su servidor.

Otra forma de ralentizar al pirata informático es aplicar reglas a las contraseñas, como exigir que tengan al menos 8 caracteres y que contengan números y símbolos. La mayoría de las contraseñas son palabras, en letras minúsculas. Eso significa que el hacker solo necesita probar 26 combinaciones por letra. Si las contraseñas se componen de mayúsculas y minúsculas, números y símbolos, se convierten en alrededor de 100 combinaciones por letra.

El objetivo de lo anterior es enseñarte todas las complicaciones de cómo los piratas informáticos atacan las contraseñas y las cosas que pasan los administradores para defender esas contraseñas. Por lo general, no tiene que preocuparse por eso: simplemente elige la solución que el sistema subyacente que está utilizando ha elegido para usted.

    
respondido por el Robert David Graham 27.07.2011 - 18:39
fuente

Lea otras preguntas en las etiquetas