2016-07-01 1 views
1

J'ai généré une paire de clés ECDH et obtenu la clé publique correspondante. En utilisant nodejs et la bibliothèque de chiffrement.Analyse de la clé publique ECDH crypto au format JWK pour l'utiliser avec WebCrypto

const ecdh = crypto.createECDH('secp384r1'); 
ecdh.generateKeys(); 
const publicKey = ecdh.getPublicKey('hex'); 

Je suis la mise en œuvre d'une bibliothèque côté client pour chiffrer les données à l'aide de cette clé publique, l'algorithme ECDH et l'interface SubtleCrypto de WebCrypto.

Pour ce faire, je dois importer la clé publique (générée avec nodejs crypto), WebCrypto importKey method a quelques options de format pour le faire, mais je peux le faire fonctionner avec pas d'entre eux. J'ai remarqué que jwk est plus utilisé que les autres.

Un exemple d'un jwk est

{ 
    kty: "EC", 
    crv: "P-256", 
    x: "kgR_PqO07L8sZOBbw6rvv7O_f7clqDeiE3WnMkb5EoI", 
    y: "djI-XqCqSyO9GFk_QT_stROMCAROIvU8KOORBgQUemE", 
    d: "5aPFSt0UFVXYGu-ZKyC9FQIUOAMmnjzdIwkxCMe3Iok", 
    ext: true, 
} 

Alors, comment puis-je analyser ma clé publique dans un objet jwk. Ma clé publique ressemble à ceci: 04f8b2a6e9d2ffa424c3e7b6addf23112153920fd0209390da460f99e03bf8665052e72df4a0b7927381f1b026c98a3a2b348fdd10969875e6b0e86cb1f093a5fc07e49fbbbf091922ce71af17f4a79de03f6069836a7143b137be34451f162235

Répondre

1

Je n'ai pas de réponse directe pour vous mais vous pouvez regarder le https://github.com/PeculiarVentures/node-webcrypto-ossl qui vous fournit une interface webcrypto dans le nœud. Si vous ne voulez pas l'utiliser directement, vous pouvez trouver la réponse à votre question dans sa gestion JWK.

+0

Merci @rmhrisk, mais la bibliothèque n'analyse pas la clé de jwk. https://github.com/PeculiarVentures/node-webcrypto-ossl/blob/master/lib/subtle.ts#L424. J'ai également essayé d'utiliser le format brut, mais j'ai reçu un 'DOMException' disant:' format de clé d'importation non pris en charge pour l'algorithme' –

+0

Dans quel navigateur êtes-vous? Safari a des problèmes avec importKey – rmhrisk

+0

J'utilise Chrome et Canary, donc je suppose que ce n'est pas le problème. –

1

Peut-être que le key-encoder-library peut vous aider. Essayez d'exporter en tant que PEM et vérifiez si cela fonctionne. Pensez à créer vos clés avec le noeud-webcrypto-ossl-lib. Le format 'jwk' est une aide réelle pendant le développement. On peut facilement cloner les clés exportées comme ceci:

cloneK = JSON.parse(JSON.stringify(exportedKey))