Я наткнулся на следующую команду для 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
Ответы:
HMAC также называется хеш-ключом. Таким образом, вы можете генерировать один и тот же хеш при проверке, если у вас есть тот же ключ, который использовался при генерации подписи. Результат MAC называется тег аутентификации ,
HMAC - это специальная конструкция, которая использует два вызова хеша - в вашем случае SHA-256 - который используется внутри и не использует никаких других криптографические примитивы , Поэтому его можно рассматривать как конкретный Режим самого хэша. Отсюда и включение в dgst ,
В вашем коде отсутствуют ключевые данные, которые, конечно, необходимы для создания ключевого хэша. Это должно быть представлено после
-hmac
, к несчастьюopenssl
требуется двоичный формат ключа. Для получения дополнительной информации см. этот старый разговор в списке рассылки OpenSSL ,РЕДАКТИРОВАТЬ # 1: копать немного глубже, если вы хотите указать ключ в шестнадцатеричном формате, вы можете использовать строку, как это:
Выходные данные функции являются выходными данными второго запуска хэша, поэтому он не отличается от просто SHA-256, если вы просто посмотрите на размер результата хеш / HMAC. Разумеется, содержимое будет полностью отличаться от простого хеширования данных (или объединения ключей и данных).
РЕДАКТИРОВАТЬ # 2: Однако вы не указали ключ, так что на самом деле HMAC пропускается и используется SHA-256. Это было помечено как ошибка, см. Вот
источник
-hmac
, Если вы хотите использовать двоичные ключи, вам необходимо преобразовать их в шестнадцатеричные строки (как вenc -K
вариант) и использовать альтернативную форму командыopenssl dgst -sha256 -mac HMAC -macopt hexkey:ABCDEF0102
например