2016-04-26 6 views
1

Ich habe einen Modul und privaten Exponenten. Wie kann ich einen privaten RSA-Schlüssel in JavaScript daraus generieren?RSA privaten Schlüssel aus dem Modul und privaten Exponenten in JavaScript

Oder wenn diese Werte nicht genug sind, um einen privaten RSA-Schlüssel zu generieren. Was sind die anderen Werte, die ich möglicherweise brauchen könnte.

RSAPrivateKeySpec in Java 7 kann RSA privaten Schlüssel mit Mod und privaten Exp generieren. Ich suche nach einer Entsprechung in JavaScript.

Ich habe auch versucht npm ursa Modul, die leider nicht geklappt hat.

+0

Mögliche Duplikate von [Wie Faktor RSA-Modul mit dem öffentlichen und privaten Exponenten gegeben?] (Http://stackoverflow.com/questions/5747013/how-to-factor-rsa-modul -geben-den-öffentlichen-und-privaten-Exponenten) –

Antwort

2

JSBN kann einen privaten RSA-Schlüssel erstellen, der entschlüsseln kann.

var sk = new RSAKey(); 
sk.setPrivate("<modulus hex>", "<public exponent hex>", "<private exponent hex>"); 
var plaintext = sk.decrypt("<ciphertext hex>"); 

Der öffentliche Exponent wird nicht während der Entschlüsselung verwendet, so können Sie einfach einigen Müll hex hinein passieren, aber es ist entweder "03" (3), "11" (17) oder "010001" (65537) .

Sie müssten jsbn.js, jsbn2.js, rsa.js und rsa2.js einschließen. Beachten Sie, dass die Entschlüsselung viermal langsamer ist als bei einem vollständigen RSA-Schlüssel, da das chinesische Rest-Theorem nicht verwendet werden kann.

+0

Danke Artjon. Aber gibt es einen Weg, den kompletten privaten Schlüssel zu bekommen? Vielleicht die PEM-Datei oder alle anderen privaten Schlüsselkomponenten – WiseWins

+0

Es sieht nicht so aus, als könnte JSBN einen PEM-codierten Schlüssel lesen oder schreiben, aber Sie können sicherlich einen Decoder/Encoder selbst schreiben. Die Schlüsselkomponenten sind immer verfügbar: [code] (https://github.com/jasondavies/jsbn/blob/v1.4/rsa.js#L63-L73) –

1

Der Modul und private Exponenten sind, technisch gesehen, genug, um einen privaten RSA-Schlüssel, abstrakt zu erzeugen; Sie reichen nur nicht aus, um einen privaten RSA-Schlüssel mit seinen Eingängen zu generieren, der für die Optimierung der Entschlüsselung unter Verwendung der Chinese remainder theorem verwendet wird. (As Artjom B.'s answer notes, einige Implementierungen können diese nicht-optimierte Entschlüsselung auszuführen;. Aber einige sind nicht)

Um einen voll privaten RSA-Schlüssel, mit seinen Eingängen zu erzeugen, wie für die Optimierung verwendet, um die ursprünglichen Primzahlen müssen p und q. Es gibt keine einfache, deterministische Weg, um diese aus dem Modul und privaten Exponenten zu erhalten, aber Methoden existieren Suche für sie in einem Raum klein genug, um handlich zu sein. Siehe die Antworten auf diese Frage: Calculate primes p and q from private exponent (d), public exponent (e) and the modulus (n)

+0

Guter Vorschlag über die Faktorisierung des Moduls, aber ich nicht Sehen Sie, wie die Frage ein Duplikat ist. –