Entender la aplicación de hashes, HMACs y KDFs

0

Creo que comprendo los casos de aplicación correctos para las siguientes funciones de criptografía, pero me gustaría confirmar mi comprensión y también propagar el uso seguro de la criptografía en todos los intertubos. La criptografía y su implementación a menudo son confusas, y es realmente importante comprender lo que hace el algoritmo y sus casos de uso.

Aquí está mi entendimiento:

Funciones de hash criptográficas (hash)

Una función hash criptográfica , dada una entrada, debe, cuando se implementa correctamente, generar una salida "única" dado que entrada. Ejemplos populares de funciones hash son SHA-1 y SHA-2 y el algoritmo SHA-256 en esas familias.

Debería usar una función de hash para "garantizar" la integridad de un archivo o carga útil, pero tanto los hash como las cargas originales solo deberían transferirse a través de canales confiables / autenticados / encriptados, ya que cualquiera puede generar un hash desde cualquier entrada. No debe usar una función hash directamente en la derivación de clave, debe usar un KDF. No debe utilizar una función hash para el caso de uso de un código de autenticación de mensaje, ya que los hashes son anónimos y pueden generarse sin el conocimiento de ningún secreto. No debe usar un hash directamente para almacenar las contraseñas ingresadas por el usuario, los KDF son para eso.

Códigos de autenticación de máquina hash (HMAC)

Los códigos de autenticación de mensajes hash se usan para combinar una clave secreta y una entrada para generar un hash donde solo alguien poseer tanto la carga útil / archivo de entrada original como la clave secreta podría generar el código de autenticación de mensajes con hash. Todas las implementaciones de HMAC deben implementarse de acuerdo con RFC-2104 .

Debe usar un HMAC para validar de forma segura el contenido de la carga útil. Si cifra un archivo utilizando un modo de cifrado no autenticado como AES-CBC, puede usar un HMAC con la clave de cifrado y la salida cifrada para "autenticar" la carga útil. Esto significa que solo puede validar el contenido del archivo cifrado si también tiene la clave de cifrado. Esto hace que el archivo encriptado sea a prueba de manipulaciones; puede saber con bastante alta certeza que el archivo es lo que cree que es, siempre que su clave sea única. Un ejemplo más simple de un caso de uso para HMAC es el envío de un archivo a través de canales no confiables; Si Bob envía un archivo y un HMAC a Alice y ambos saben que la clave es "1337p @ $$ w0rdz", Alice puede determinar con alta probabilidad que el archivo que recibió es el mismo que envió Bob. Sin embargo, si Mallory también conoce la clave, y Mallory puede modificar el correo electrónico que recibe Alice, Mallory también podrá generar archivos en los que Alice confiará. No debe usar un HMAC para hashear una contraseña ingresada por un usuario con un "secreto" conocido internamente, use KDF para eso.

Funciones de derivación de claves (KDF)

Las funciones de derivación de claves son funciones criptográficas diseñadas para generar una salida de tipo hash desde una entrada de clave secreta. Estas funciones están diseñadas específicamente para ser computacionalmente caras, por lo que la obtención de claves es difícil. Ejemplos populares son PBKDF2 , BCrypt y Scrypt . A menudo usan funciones hash internamente para envolver la entrada o la salida de la clave.

Cuando esté tratando con una contraseña ingresada por el usuario, debe usar un KDF. Por ejemplo, si necesita cifrar un archivo usando AES-256 en modo CBC, debe tomar la contraseña ingresada por el usuario, ejecutarla a través de un KDF y luego usarla como clave de cifrado. Si necesita almacenar las contraseñas ingresadas por el usuario en una base de datos, páselas a través de un KDF difícil de computar y luego guárdelas en la base de datos.

¿Esto cubre generalmente los diferentes casos de uso de cuándo debería y no debería usar estas tres operaciones de cifrado?

    
pregunta Naftuli Kay 08.05.2015 - 23:13
fuente

0 respuestas

Lea otras preguntas en las etiquetas