Объяснение флага -hmac в открытом SSL
Я наткнулся на следующую команду для unix on binance, которую я пытался распаковать. Смотрите здесь: https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md
(Раздел: ПОДПИСАННЫЕ Примеры конечной точки для POST /api/v1/order)
openssl dgst -sha256 -hmac
Насколько я понимаю, это вызов команды openssl для создания дайджеста, дайджест будет иметь разновидность sha256, как согласовано в стандартных спецификациях. Что я не понимаю, так это -hmac
флаг. Что это такое и что оно делает до математического уровня?
Моя попытка решить проблему:
Я сделал поиск в Google с openssl -hmac
а также openssl dgst -hmac
но 10 лучших результатов мне не помогли. Поэтому я думаю, что более опытные пользователи лучше спросить.
Обновления:
Флаг не упоминается в следующих документах: https://www.mkssoftware.com/docs/man1/openssl_dgst.1.asp и поэтому я начинаю верить, что он может не иметь криптографического назначения. Хотя я сейчас не уверен.
Я нашел то, что похоже на флаг, упомянутый в этом вопросе: https://stackoverflow.com/questions/7285059/hmac-sha1-in-bash
2 ответа
HMAC также называется хеш-ключом. Таким образом, вы можете генерировать один и тот же хеш при проверке, если у вас есть тот же ключ, который использовался при генерации подписи. Результат MAC называется тегом аутентификации.
HMAC - это специальная конструкция, которая использует два вызова хеша - в вашем случае SHA-256 - который используется внутри и не использует никаких других криптографических примитивов. Поэтому его можно рассматривать как особый режим самого хэша. Отсюда и включение в дгст.
В вашем коде отсутствуют ключевые данные, которые, конечно же, необходимы для создания ключевого хэша. Это должно быть представлено после -hmac
, к несчастью openssl
требуется двоичный формат ключа. Для получения дополнительной информации см. Этот старый разговор в списке рассылки OpenSSL.
РЕДАКТИРОВАТЬ #1: копать немного глубже, если вы хотите указать ключ в шестнадцатеричном формате, вы можете использовать строку, как это:
echo -n "Hello world!" | openssl dgst -sha256 -mac hmac -macopt hexkey:01020304
Выходные данные функции являются выходными данными второго запуска хэша, поэтому он не отличается от просто SHA-256, если вы просто посмотрите на размер результата хеш / HMAC. Разумеется, содержимое будет полностью отличаться от простого хеширования данных (или объединения ключей и данных).
РЕДАКТИРОВАТЬ #2: Однако вы не указали ключ, так что на самом деле HMAC пропускается и используется SHA-256. Это было помечено как ошибка, см. Здесь
мои 2 цента, если у вас iOS (или Mac OS...) надоело возиться, я это написал..
https://apps.apple.com/it/app/hmac-sha256generator/id6448465719?l=en