¿Se beneficia de usar PBKDF2 en la clave generada por RNGCryptoServiceProvider?

5

Tengo un programa que genera una contraseña de 32 bytes (256 bits) de longitud fija con el proveedor RNGCryptoService y luego usa Rfc2898DeriveBytes en esa contraseña para obtener una clave de cifrado.

Sin embargo, para ahorrar recursos del sistema, estaba pensando en usar la contraseña original. ¿Tengo razón en que no hay ningún beneficio al usar Rfc2898DeriveBytes en la contraseña de 256 bits generada por RNGCryptoServiceProvider ? 256 bits es el tamaño de clave para el algoritmo (AES-256), así que debería poder usar la contraseña sin cambios. ¿Es RNG criptográficamente lo suficientemente seguro como para generar las claves directamente?

    
pregunta Razick 18.12.2013 - 15:45
fuente

2 respuestas

4

"PBKDF2" comienza por "PB" que significa "Basado en contraseña". Esto es para contraseñas . Una contraseña no es solo una secuencia de letras; es una secuencia de letras que un humano puede recordar y escribir . Una clave de 256 bits, generada como las claves debe ser (con un PRNG criptográficamente fuerte), no es una contraseña, incluso si la codifica como letras.

Otra forma de decirlo es que el núcleo de la funcionalidad de PBKDF2 es hacer frente a la debilidad inherente de las contraseñas: ya que pueden ser manejadas por cerebros humanos, son débiles y pueden ser forzadas brutalmente. Una clave criptográfica adecuada (como la que genera con RNGCryptoServiceProvider ) no tiene esta debilidad y, por lo tanto, no necesita PBKDF2.

Ahora hay un uso tangencial: PBKDF2 no es solo PB, también es un KDF . Tiene una longitud de salida configurable. Como tal, si su clave de origen es más corta de lo que necesita, entonces un KDF, en particular PBKDF2, puede ser útil para obtener todo el material clave que desee. Por ejemplo, tiene una clave de 256 bits, pero necesita cifrar y para verificar la integridad, y para eso le gustaría tener una clave AES de 256 bits y una clave de 256 bits para HMAC. Para convertir una clave maestra de 256 bits en 512 bits de material clave, necesita un KDF. Sin embargo, PBKDF2, con sus idiosincrasias específicas de contraseña (entrada es letras , no bits; hay una necesidad de una sal), en general no es adecuado para tales trabajos. SSL / TLS utiliza para tales trabajos una función personalizada (que se ha investigado a fondo, ya que SSL es un destino de alto perfil para criptógrafos) al que llama "el PRF".

    
respondido por el Thomas Pornin 18.12.2013 - 15:54
fuente
3

Sí, tienes razón. No tendrá ningún problema al utilizar 256 bits generados aleatoriamente. Contraseña generada utilizando un CSPRNG como clave de cifrado.

RNGCryptoServiceProvider llama directamente a Windows CSPRNG CryptGenRandom para que pueda estar seguro de que su clave se genera con un RNG seguro.

    
respondido por el Ayrx 18.12.2013 - 15:49
fuente

Lea otras preguntas en las etiquetas