2016-12-14 7 views
2

Ich verwende das Modul pkcs11js, um RSA-Schlüssel mit einer Smart Card HSM wie here in the Example #3 gezeigt zu generieren.Knoten js - Verwenden Sie Schlüssel generiert von einer SmartCard HSM mit NodeRSA-Modul

var publicKeyTemplate = [ 
    { type: pkcs11js.CKA_CLASS, value: pkcs11js.CKO_PUBLIC_KEY }, 
    { type: pkcs11js.CKA_TOKEN, value: false }, 
    { type: pkcs11js.CKA_LABEL, value: "My RSA Public Key" }, 
    { type: pkcs11js.CKA_PUBLIC_EXPONENT, value: new Buffer([1, 0, 1]) }, 
    { type: pkcs11js.CKA_MODULUS_BITS, value: 2048 }, 
    { type: pkcs11js.CKA_VERIFY, value: true } 
]; 
var privateKeyTemplate = [ 
    { type: pkcs11js.CKA_CLASS, value: pkcs11js.CKO_PRIVATE_KEY }, 
    { type: pkcs11js.CKA_TOKEN, value: false }, 
    { type: pkcs11js.CKA_LABEL, value: "My RSA Private Key" }, 
    { type: pkcs11js.CKA_SIGN, value: true }, 
]; 
var keys = pkcs11.C_GenerateKeyPair(session, { mechanism: pkcs11js.CKM_RSA_PKCS_KEY_PAIR_GEN }, publicKeyTemplate, privateKeyTemplate); 

Wenn ich keys drucken, erhalte ich so etwas wie:

{ privateKey: <Buffer 70 97 f7 03 00 00 00 00>, 
publicKey: <Buffer b0 ea f2 03 00 00 00 00> } 

Jetzt möchte ich zum Verschlüsseln/Entschlüsseln mit NodeRSA module, aber nicht wissen, wie das Schlüsselobjekt erstellen (mit new NodeRSA(...)), dass wird verwendet, um von diesem zuvor erzeugten Schlüsselpaar zu verschlüsseln/entschlüsseln.

Es ist nicht die Verwendung von NodeRSA erforderlich, ich brauche nur eine Möglichkeit zum Verschlüsseln/Entschlüsseln in Node JS mit einem Schlüsselpaar von der Smartcard, falls jemand ein Beispiel dafür hat, wie man das mit einer anderen Bibliothek macht. Vielen Dank!

Antwort

0

Einige Attribute haben einen Standardwert für PKCS # 11. Für den privaten Schlüssel bedeutet dies, dass CKA_PRIVATE gesetzt ist. Dies bedeutet, dass der Wert des privaten Exponenten (und die CRT-Parameter) nicht zugänglich sind; Die Idee war, sie mit der Smartcard zu schützen, oder?

Normalerweise können Sie die privaten RSA-Schlüsselparameter (mit Ausnahme des Modulus) von einer Smartcard sogar nicht abrufen, wenn Sie die richtigen Attributwerte festlegen. So können private Schlüsseloperationen nicht unter Verwendung einer Software nur Implementierung wie NodeRSA ausgeführt werden, einfach weil die erforderlichen Werte nicht verfügbar sind. Sie müssen sie mit der Smartcard durchführen, z. unter Verwendung von Beispiel 7 von pkcs11js.


Ok, also das ist es für den privaten Schlüssel, werfen wir einen Blick auf Public Key-Operationen. Wie Sie vielleicht vermutet haben, können Sie normalerweise die Attribute des öffentlichen Schlüssels abrufen. Für Operationen mit öffentlichen Schlüsseln benötigen Sie den Modul und den öffentlichen Exponenten. Diese können unter Verwendung von C_GetAttributeValue abgerufen werden. Dazu benötigen Sie das Objekt-Handle, das mit C_FindObjects gefunden werden kann (oder Sie können natürlich das Handle verwenden, das beim Generieren des Schlüsselpaares abgerufen wurde).

Nach dem Abrufen der Attributwerte können Sie einen öffentlichen Schlüssel daraus erstellen und in einer Softwareimplementierung verwenden. Dies hängt von der Implementierung der Smartcard und der PKCS # 11-Bibliothek ab, wenn Sie die Vorgänge auch direkt auf der Smartcard ausführen können.


Was Sie gerade sehen, wenn die keys Druck sind die (Session abhängig) Objekt-Handles des öffentlichen und privaten Schlüssel. Diese sind normalerweise völlig unabhängig von den Attributen (dem Wert) des öffentlichen und privaten Schlüssels.

+0

Danke, ich finde den Modul und öffentlichen Exponenten mit 'C_GetAttributeValue' wie Sie vorgeschlagen haben, wissen Sie, wie man den öffentlichen Schlüssel erstellt oder wie man mit dem öffentlichen Schlüssel auf der Chipkarte mit dieser Bibliothek verschlüsselt? Beispiel 7 ist zum Signieren/Verifizieren, ich habe versucht [Beispiel 8] (https://www.npmjs.com/package/pkcs11js#example-8) - das zweite Argument zu ändern - aber ich bekomme: 'Fehler: CKR_FUNCTION_NOT_SUPPORTED', obwohl Ich weiß, dass die Chipkarte RSA Verschlüsselung/Beschreibung unterstützt, also mache ich etwas falsches ... – myrmix

+0

@myrmix Die PKCS # 11 Bibliothek muss es auch unterstützen. Oftmals unterstützen Smartcards nur die * Entschlüsselung * mit dem privaten Schlüssel (für die Verschlüsselung mit dem öffentlichen Schlüssel auf der Karte ist wenig zu gebrauchen). Wie beim Erstellen des öffentlichen Schlüssels zeigt eine Schnellsuche "http: // nullege.com/codes/search/M2Crypto.RSA.new_pub_key" von M2Crypto, wahrscheinlich gibt es andere. –

Verwandte Themen