2016-03-25 1 views
1

https://github.com/dchest/tweetnacl-js vient fortement recommandé pour moi.Comment crypter une clé secrète en utilisant un mot de passe avec tweetnacl-js?

J'ai un projet dans lequel l'équipe souhaite afficher sa paire de clés codée en base64 sur un ID. Bien sûr, ils ne veulent pas simplement afficher la clé secrète, mais plutôt stocker une version cryptée. Quelque chose comme ça ...

// do the encryption 
let keyPair = tweetnacl.sign.keyPair(); 
let publicKey = tweetnacl.util.encodeBase64(keyPair.publicKey); 
let signature = tweetnacl.util.encodeBase64(tweetnacl.sign.detached(tweetnacl.util.decodeUTF8(certData), keyPair.secretKey)); 
let secretKey = tweetnacl.util.encodeBase64(keyPair.secretKey); 
let encryptedSecretKey = CryptoJS.AES.encrypt(secretKey, this.props.data.password).toString(); 

Je suis déconseillé d'utiliser CryptoJS. Y at-il une meilleure façon de le faire en utilisant tweetnacl seulement?

Merci.

+2

J'espère que vous avez été [conseillé contre crypto dans JS] (https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/javascript-cryptography-considered- nuisible /) plutôt qu'agaces cette mise en œuvre particulière. Aussi, votre lien dit ** Version bêta. La bibliothèque est stable et l'API est gelée, mais elle n'a pas été examinée de manière indépendante. **. Vous voudrez peut-être repenser beaucoup ici. – SmokeDispenser

+0

cela semble être une question pour tweetnacl – schroeder

Répondre

0

tweetnacl possède une implémentation de chiffrement symétrique appelée secretbox. Vous pouvez crypter tout ce que vous voulez comme AES, y compris votre clé secrète.

pseudocode:

var smkey = stringToUint8Array(keystring); // must be 32 bytes, pad it if you have to 
var nonce = nacl.randomBytes(nacl.box.nonceLength); 
var encryptedSecretKey = nacl.secretbox(secretKey, nonce, smkey); 

Ensuite, vous pouvez convertir le Uint8Array chiffré à chaîne ou base64 et utiliser.