Wie kann ich die Entschlüsselung eines HMAC?
Kann ich eine HMAC mit den folgenden:
var encrypt = crypto.createHmac("SHA256", secret).update(string).digest('base64');
Ich versuche zum entschlüsseln einer kodierten HMAC mit dem Geheimnis:
var decrypt = crypto.createDecipher("SHA256", secret).update(string).final("ascii");
Folgende war nicht erfolgreich. Wie kann ich die Entschlüsselung eines HMAC mit dem Schlüssel?
Bekomme ich die folgende Fehlermeldung:
node-crypto : Unknown cipher SHA256
crypto.js:155
return (new Decipher).init(cipher, password);
^
Error: DecipherInit error
InformationsquelleAutor ThomasReggi | 2013-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
HMAC ist ein MAC/keyed hash, keine Verschlüsselung. Es ist nicht entworfen, um entschlüsselt werden. Wenn Sie verschlüsseln möchten, etwas, verwenden Sie eine cipher wie AES, vorzugsweise im authentifizierten Modus wie AES-GCM.
Nur so zu "entschlüsseln" ist zu raten, die gesamte Eingabe und Vergleich der Ausgabe.
In vielen Fällen ist die Eingabe der Raum ist klein genug, dass die raten funktioniert. In der Praxis wirst du nie erraten einer falschen Eingabe mit den richtigen hash. Sie wird entweder erraten Sie den richtigen Eingang, oder Sie finden keine passenden input an alle. | Aber da HMAC, der getastet ist, werden nur diejenigen wissen, die die Schlüssel verwenden können, dieser Angriff erraten, so dass diese in der Regel nicht ein problem ist (also das ungestanzte mit hashes zu erraten, die Eingabe ist oft ein problem).
Hmm, stimmt, hab mich nach vorne verschoben, da dieser Kommentar, es zu zerstören.
InformationsquelleAutor CodesInChaos
Wieder zu wiederholen-hashes sind nicht so konzipiert, entschlüsselt werden. Jedoch sobald Sie einen hash überprüfen Sie können eine beliebige Zeichenfolge ist gleich dem hash, indem Sie es durch die gleiche Verschlüsselung mit dem gleichen Geheimnis.
Scheint offensichtlich, aber sehr mächtig.
Seien Sie vorsichtig, verwenden Sie eine Vergleich-Funktion, die nicht Auslaufen, wie viele Zeichen ein Spiel über timing.
InformationsquelleAutor ThomasReggi
Als bereits durch CodesInChaos, mit SHA256-HMAC kann nur verwendet werden, um ein hash-Wert, der eine one-way-Reise nur. Wenn Sie möchten, zu verschlüsseln/entschlüsseln, müssen Sie eine Chiffre, wie
aes
oderdes
.Beispiel auf, wie die Verschlüsselung/Entschlüsselung:
Hinweis: speichern Sie die cipher/decipher in eigene variable, und achten auch nicht auf die Kette
.final
nach.update
.Wenn Sie wissen wollen, was die Verschlüsselungen, die auf Ihrem system verfügbar sind, verwenden Sie den folgenden Befehl ein:
nicht wieder ein Cipher-Objekt, so dass Sie nicht tun können
.update(data).final()
wie in seinem Beispiel. Das fehlen von Salz/iv ist das nicht komisch? Sie müssten verwenden Sie.createCipheriv
und.createDecipheriv
.Ich fragte nach der kryptographischen Verkettung-Modus. Sie können nicht nur Daten verschlüsseln mit AES, benötigen Sie ein chaining-Modus und einem padding-Modus. Zum Beispiel, ECB, CBC, GCM,... sind Häufig chaining-Modi. EZB gebrochen ist, und bei der Verwendung von CBC in der Regel müssen Sie auf Authentifizierung hinzufügen von sich selbst, das Sie nicht. | Verschlüsseln mit einem Passwort und kein Salz ist merkwürdig. Es sei denn, erstellt die API ein anderes Salz für jeden Anruf intern, das ist ein Sicherheitsrisiko. | Also dein code hat gute Chancen, verunsichert durch die Verwendung einer bad-Modus oder das fehlen von Salz/IV.
Verschlüsselung ohne Authentifizierung ist gebrochen, in vielen Fällen. Sie können einfach mit einem padding oracle(oder ähnlich) zu bekommen, der Empfänger entschlüsselt es für Sie. | Ableitung-Schlüssel+iv deterministisch aus dem Kennwort bedeutet, dass Sie nur verschlüsseln einer einzigen Nachricht mit, dass das Passwort, da Sie sonst verwenden Sie einen Schlüssel+iv-pair-Mädchen, das ist schlecht. | Scheint, wie die node.js crypto-API ist schlecht konzipiert[wie so viele andere crypto-libs], da es leicht zu schaffen, die schwache Verschlüsselung mit ihm, und schwer zu erstellen, eine starke Verschlüsselung.
OK, entfernt, downvote, aber es sollte eine sichere zufällige IV, natürlich. Static IV sind wenig hilfreich. Wenn möglich, sollten Sie auch bereitstellen, PBKDF statt ein hash der Schlüssel abgeleitet werden soll, aber das ist von etwas geringerer Bedeutung - wenn das Passwort ausreichend Entropie natürlich.
InformationsquelleAutor mekwall
Clean-up-code für eine Minimalistische Ansicht und Entfernung von clutter:
Hinweis: IIFE runnable in node repl, "Wie Sie Ist"
InformationsquelleAutor KK.