
Я наткнулся на следующую команду для unix на binance, которую я пытался распаковать. Смотрите здесь:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md
(Раздел: Примеры конечных точек SIGNED для 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
решение1
HMAC также называется ключевой хэш. Таким образом, вы можете сгенерировать тот же хэш во время проверки, только если у вас есть тот же ключ, который использовался во время генерации подписи. Результат MAC называетсятег аутентификации.
HMAC — это специальная конструкция, которая использует два вызова хэша (в вашем случае SHA-256), который используется внутри, и не использует никаких другихкриптографические примитивы. Поэтому его можно рассматривать как определенныйрежимсамого хеша. Отсюда включение вдгст.
В вашем коде отсутствуют данные ключа, которые, конечно, требуются для создания хэша с ключом. Это должно быть представлено после -hmac
. К сожалению, openssl
требуется двоичный формат ключа. Для получения дополнительной информации см.этот старый разговор в списке рассылки OpenSSL.
EDIT #1: Копнув немного глубже, если вы хотите указать ключ в шестнадцатеричном формате, вы можете использовать такую строку:
echo -n "Hello world!" | openssl dgst -sha256 -mac hmac -macopt hexkey:01020304
Выход функции — это выход второго запуска хэша, поэтому он неотличим от просто SHA-256, если вы просто посмотрите на размер результата хэша / HMAC. Конечно, содержимое будет совершенно отличаться от простого хэширования данных (или ключа и данных, объединенных).
EDIT #2: Однако вы не указали ключ, поэтому на самом деле HMAC пропускается и используется SHA-256. Это было отмечено как ошибка, см.здесь
решение2
Мои 2 цента, если у вас iOS (или Mac OS...) и вы устали возиться, я написал это..
https://apps.apple.com/it/app/hmac-sha256generator/id6448465719?l=en