
Ich bin auf Binance auf den folgenden Unix-Befehl gestoßen, den ich entpacken wollte. Siehe hier:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md
(Abschnitt: SIGNED-Endpunktbeispiele für POST /api/v1/order)
openssl dgst -sha256 -hmac
So wie ich es verstehe, handelt es sich um einen Aufruf des OpenSSL-Befehls zur Erstellung eines Digests. Der Digest wird vom Typ SHA256 sein, wie in den Standardspezifikationen vereinbart. Was ich nicht verstehe, ist das -hmac
Flag. Was ist das und was bewirkt es auf mathematischer Ebene?
Mein Versuch zur Lösung des Problems:
Ich habe eine Google-Suche mit openssl -hmac
und durchgeführt openssl dgst -hmac
, aber die ersten 10 Ergebnisse haben mir nicht geholfen. Ich denke also, erfahrenere Benutzer sollten besser fragen.
Aktualisierung:
Die Flagge wird in diesen Dokumenten nicht erwähnt:https://www.mkssoftware.com/docs/man1/openssl_dgst.1.aspund so fange ich an zu glauben, dass es möglicherweise keinen kryptografischen Zweck hat. Obwohl ich mir im Moment nicht sicher bin.
Ich habe etwas gefunden, das der in dieser Frage erwähnten Flagge ähnelt:https://stackoverflow.com/questions/7285059/hmac-sha1-in-bash
Antwort1
HMAC wird auch als Keyed Hash bezeichnet. Sie können also bei der Überprüfung nur dann denselben Hash generieren, wenn Sie denselben Schlüssel haben, der bei der Signaturerstellung verwendet wurde. Das Ergebnis des MAC wird alsAuthentifizierungs-Tag.
HMAC ist ein spezielles Konstrukt, das zwei Aufrufe des Hashs verwendet - in Ihrem Fall SHA-256 -, der intern verwendet wird, und es verwendet keine anderenkryptographische Grundelemente. Es könnte daher als eine spezifischeModusdes Hashes selbst. Daher die Aufnahme indgst.
In Ihrem Code fehlen die Schlüsseldaten, die natürlich erforderlich sind, um einen verschlüsselten Hash zu erstellen. Dies sollte nach angezeigt werden -hmac
. Leider openssl
ist ein binäres Format des Schlüssels erforderlich. Weitere Informationen finden Sie unterdiese alte Unterhaltung auf der OpenSSL-Mailingliste.
BEARBEITEN #1: Wenn Sie etwas tiefer graben, können Sie eine Zeile wie diese verwenden, wenn Sie den Schlüssel als Hexadezimalzahl angeben möchten:
echo -n "Hello world!" | openssl dgst -sha256 -mac hmac -macopt hexkey:01020304
Die Ausgabe der Funktion ist die Ausgabe des zweiten Hash-Durchlaufs, daher ist sie nicht von SHA-256 zu unterscheiden, wenn Sie nur die Größe des Hash-/HMAC-Ergebnisses betrachten. Natürlich wird der Inhalt völlig anders sein, als wenn nur die Daten gehasht würden (oder Schlüssel und Daten verknüpft würden).
EDIT #2: Sie haben jedoch keinen Schlüssel angegeben, daher wird HMAC tatsächlich übersprungen und SHA-256 verwendet. Dies wurde als Fehler gekennzeichnet, sieheHier
Antwort2
meine 2 Cents, wenn Sie iOS (oder Mac OS ...) verwenden und keine Lust mehr haben, herumzuspielen, habe ich es geschrieben ...
https://apps.apple.com/it/app/hmac-sha256generator/id6448465719?l=en