2010-04-09 18 views
5

Estoy tratando de tomar un AES HMAC de un archivo usando el programa de línea de comandos openssl en Linux. He estado mirando las páginas man, pero no puedo entender con qué éxito crear un HMAC. Puedo encriptar un archivo usando el comando enc con openssl, pero parece que no puedo crear un HMAC. El cifrado se parece a la siguiente:openssl hmac usando aes-256-cbc

openssl enc -aes-256-cbc -in plaintext -out ciphertext 

Cualquier consejo o tutoriales sería maravilloso

Respuesta

9

Usted puede preguntar acerca CBC-MAC. Para eso, creo que solo encriptas tu mensaje o archivo con un IV de 0 y luego tomas el último bloque (16 bytes para AES256-cbc). I found a blog post que describe cómo hacer esto con OpenSSL:

openssl enc -e -aes-256-cbc -KABCDEF -iv 0000000000000000 < file | tail -c 16 | od -A n 
  • -K es en que proporciona su clave, que la página wiki dice debe ser diferente de lo que está utilizando para cifrar el archivo, si está encriptarlo en absoluto.
  • -iv obviamente proporciona un IV totalmente cero, que es la clave para CBC-MAC.
  • El tail -c 16 es obtener el último bloque AES256-cbc, que tiene 16 bytes de longitud.
  • od es convertirlo a hexadecimal, que ese sitio web dice que es común. De lo contrario, en lugar de od -A n, podría hacer base64 si fuera más aplicable, o dejarlo completamente sin tener solo los bytes sin procesar.

No se puede tomar una HMAC AES de un archivo porque AES256-CBC es un cifrado de bloques, no un algoritmo de hash. AES256-cbc es para encriptar y descifrar un archivo. HMAC es para verificar la integridad de un archivo y requiere un algoritmo hash en su núcleo, como SHA-1 o MD5.

¿Está intentando firmar o verificar un archivo, o encriptarlo? Para iniciar sesión, consulte el comando OpenSSL dgst y use HMAC simples como MD5 o SHA-1, o termine y firme digitalmente con DSS/DSA.

Además, creo que el uso de un cifrado de bloque como MAC se llama EMAC, pero OpenSSL no hace EMAC por lo que yo sé. EMAC simplemente toma el último bloque de un archivo encriptado y lo encripta para crear un MAC.

+0

Quizás me equivoque en mi pregunta original; Necesito el MAC de un texto de cifrado AES. ¿Esto tiene más sentido criptográfico? Creo que el MAC de AES es solo el último bloque encriptado, ¿sí? – Ryan

+0

@Ryan: Agregué información sobre CBC-MAC. Espero eso ayude. Si eso no es lo que quieres decir, tal vez puedas dar más información sobre por qué necesitas calcular este AES MAC. ¿Es esto parte de un protocolo bien conocido? ¿Qué vas a hacer con él una vez que lo computes? Una información general más amplia podría ayudar a otra persona a saltar y brindar la respuesta. – indiv

+0

Esto es * exactamente * lo que necesitaba. Muchas gracias indiv !!!! – Ryan

2

Puede realizar un HMAC de un archivo usando una tecla AES como entrada al HMAC.

Encripte el archivo utilizando cualquier algoritmo AES que desee (en este ejemplo -aes-256-cbc); genere una clave AES basada en una contraseña (cambie "contraseña" a su contraseña) y use el modificador -p para volcar la sal, la clave y iv utilizados para encriptar.

openssl enc -e -k password -p -aes-256-cbc -in plaintext -out ciphertext 
salt=A2402067B9BFD4A1 
key=EB3A88115C30F26C3987F1AB2577DF5B58C80EBEEA623506517FAD843C64E1FC 
iv =B382453BCBF579CE14C0726D343F40E2 

Crear una HMAC de cualquier objeto/archivo usando un algoritmo de hash de su elección y la clave AES que se utilizó para cifrar el archivo:

openssl dgst -hmac EB3A88115C30F26C3987F1AB2577DF5B58C80EBEEA623506517FAD843C64E1FC -sha256 ciphertext 
HMAC-SHA256(ciphertext)= fa3fb9c9c743f35ba81793e2704c3fc9737cd2675011110cb1655ea7ceed2914 

Recuerde que la clave AES para su uso posterior si necesita verificar el HMAC. Tenga en cuenta que no sé qué está tratando de lograr y no puedo afirmar que lo anterior cumple con sus requisitos criptográficos, pero sí muestra cómo cifrar un archivo, obtener la clave de cifrado y usar esa clave de cifrado en un cálculo HMAC.