OpenSSL HMAC с использованием AES-256-CBC - PullRequest
5 голосов
/ 10 апреля 2010

Я пытаюсь получить AES HMAC файла с помощью программы командной строки openssl в Linux.Я просматривал справочные страницы, но не могу понять, как успешно создать HMAC.Я могу зашифровать файл с помощью команды enc с помощью openssl, но не могу создать HMAC.Шифрование выглядит следующим образом:

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

Любой совет или учебное пособие было бы замечательно

Ответы [ 2 ]

9 голосов
/ 10 апреля 2010

Возможно, вы спрашиваете о CBC-MAC . Для этого, я думаю, вы просто шифруете свое сообщение или файл с IV, равным 0, а затем берете последний блок (16 байтов для AES256-cbc). Я нашел сообщение в блоге , в котором описано, как это сделать с OpenSSL:

openssl enc -e -aes-256-cbc -K 0123456789ABCDEF -iv 0000000000000000 < file | tail -c 16 | od -A n
  • -K - это место, где вы предоставляете свой ключ, который, по словам вики-страницы, должен отличаться от того, который вы используете для шифрования файла, если вы вообще его шифруете.
  • -iv, очевидно, обеспечивает полный ноль IV, который является ключом для CBC-MAC.
  • tail -c 16 - получить последний блок AES256-cbc длиной 16 байт.
  • od - преобразовать его в шестнадцатеричный код, что, по словам этого веб-сайта, является обычным явлением. В противном случае вместо od -A n вы можете сделать base64, если это более применимо, или оставить его полностью, чтобы иметь только необработанные байты.

Вы не можете получить AES HMAC файла, потому что AES256-cbc является блочным шифром, а не алгоритмом хеширования. AES256-cbc предназначен для шифрования и дешифрования файла. HMAC предназначен для проверки целостности файла и требует в своей основе алгоритма хеширования, такого как SHA-1 или MD5.

Вы пытаетесь подписать или подтвердить файл или зашифровать его? Чтобы подписать, проверьте команду OpenSSL dgst и используйте простые HMAC, такие как MD5 или SHA-1, или сделайте все возможное и поставьте цифровую подпись с помощью DSS / DSA.

Кроме того, я считаю, что использование блочного шифра в качестве MAC называется EMAC , но OpenSSL, насколько я знаю, не выполняет EMAC. EMAC просто берет последний блок зашифрованного файла и шифрует его для создания MAC.

2 голосов
/ 14 февраля 2014

Вы можете выполнить HMAC файла, используя клавишу AES в качестве ввода в HMAC.

Зашифруйте файл, используя любой алгоритм AES, который вы хотите (в этом примере -aes-256-cbc); сгенерируйте ключ AES на основе пароля (измените «пароль» на ваш пароль) и используйте ключ -p, чтобы сбросить соль, ключ и iv, используемые для шифрования.

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

Создайте HMAC для любого объекта / файла, используя любой алгоритм хеширования и ключ AES, который использовался для шифрования файла:

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

Запомните ключ AES для использования позже, если вам необходимо проверить HMAC. Обратите внимание, что я не знаю, что вы пытаетесь выполнить, и я не могу утверждать, что вышеизложенное отвечает вашим криптографическим требованиям, но оно показывает, как зашифровать файл, получить ключ шифрования и использовать этот ключ шифрования в вычислениях HMAC. *

...