Unterschied zwischen der Unterzeichnung mit SHA256 vs. signieren mit RSA-SHA256
Spiele ich mit digitale Signaturen mit node.js. Für test-Zwecke habe ich eine digitale Signatur von XML-Daten, zuerst mit nur SHA256, dann mit RSA-SHA256.
Die Sache, die mich verwirrt ist, dass beide Methoden der Unterzeichnung erstellen, die genau die gleiche Signatur. Beide Signaturen identisch sind. Wenn Sie identisch sind, warum dann zwei unterschiedliche Methoden (SHA256 vs. RSA-SHA256)?
Ich folgenden code:
var crypto = require('crypto'),
path = require('path'),
fs = require('fs'),
pkey_path = path.normalize('private_key.pem'),
pkey = '';
function testSignature(pkey) {
var sign1 = crypto.createSign('RSA-SHA256'),
sign2 = crypto.createSign('SHA256');
fs.ReadStream('some_document.xml')
.on('data', function (d) {
sign1.update(d);
sign2.update(d);
})
.on('end', function () {
var s1 = sign1.sign(pkey, "base64"),
s2 = sign2.sign(pkey, "base64");
console.log(s1);
console.log(s2);
});
}
//You need to read private key into a string and pass it to crypto module.
//If the key is password protected, program execution will stop and
//a prompt will appear in console, awaiting input of password.
testSignature(fs.readFileSync(pkey_path));
Den obigen code-Ausgänge einen string, das ist die Signatur, und dann wieder genau die gleiche Zeichenkette, die auch eine Unterschrift von den gleichen Daten, sondern erstellt mit - vermeintlich - unterschiedlichen-Algorithmus, noch ist es identisch mit dem vorherigen...
- leider ist es nicht verwandt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Signatur kann erstellt werden, indem SHA256 allein.
SHA256 ist eine Hash-Algorithmus, d.h. einen Algorithmus erstellen einen kurzen Fingerabdruck-Zahl, die für eine beliebig große Menge von Daten. Zum erzeugen einer Signatur, dieser Fingerabdruck noch behandelt werden muss, irgendwie zu ermöglichen, die Identifizierung des Inhabers, der einige private Signatur-Schlüssel. Eine solche Behandlung ist die Verschlüsselung der fingerprint mit dem privaten Schlüssel eines rsa-Schlüsselpaares die anderen zu entschlüsseln und das Ergebnis mit dem zugehörigen öffentlichen Schlüssel-und damit stellen Sie sicher, dass der Halter des privaten Schlüssels in der Tat gegeben haben muss, die der Unterzeichner.
Im Kontext des crypto-API, die RSA-Verschlüsselung entweder ist die Standard-Behandlung, wenn die Behandlung nicht explizit benannt wird, oder die Art der Behandlung ist abgeleitet aus dem privaten Schlüssel, den Sie verwenden, die als parameter in der
sign
rufen Sie --- wenn es einen privaten RSA-Schlüssel, der verwendet RSA; wenn es ein DSA-Schlüssel, verwendet es die DSA; ...Was Sie sehen, ist zwei mal ein PKCS#1 v1.5 Signatur. Dies ist eine deterministische Regelung für die Signaturen, also es gibt immer das gleiche Ergebnis (zum Vergleich: das PSS-System randomisierte, bessere Sicherheits-Eigenschaften). RSA-PKCS#1 v1.5 signaturerstellung und-PSS signature generation definiert ist, innerhalb RFC 3447 (auch bekannt als RSA-v2.1 technische Daten).
Wenn Sie Ihren code mit RSA 512 bits (für Testzwecke, verwenden Sie einen Schlüssel von 2048 bit oder mehr), dann erhalten Sie das folgende Ergebnis:
Privater Schlüssel:
Signatur als base-64 - (mit deinem code):
und hexadezimal
entschlüsselt mit RAW RSA (D. H. nur der modularen Errichtung in die Stufe mit dem öffentlichen exponent):
Dies ist ein sehr gutes Beispiel einer PKCS#1-Signatur, leicht zu erkennen an den
FF
Polsterung, gefolgt von der ASN.1 Struktur (beginnend mit30
SEQUENZ):So, dass das Ding am Ende ist der hash, in diesem Fall über nur
Test 123\n
da wollte ich nicht zu geben, beliebige XML-heute.