2017-10-13 9 views
-1

Récemment, j'essayais de faire quelque chose avec le code d'ECDSA. Je veux changer la longueur de la clé, mais en vain. J'ai vérifié sur Internet et trouvé un code source d'ECDSA, mais d'une manière ou d'une autre, il ne permet que 32 octets.Comment changer la longueur de clé d'ECDSA?

Par exemple, je trouve ceci:

var crypto = require("crypto"); 
var eccrypto = require("eccrypto");   

// A new random 32-byte private key. 
var privateKey = crypto.randomBytes(32); 

// Corresponding uncompressed (65-byte) public key. 
var publicKey = eccrypto.getPublic(privateKey); 

var str = "message to sign"; 

// Always hash you message to sign!  
var msg = crypto.createHash("sha256").update(str).digest(); 

eccrypto.sign(privateKey, msg).then(function(sig) { 
    console.log("Signature in DER format:", sig); 
    eccrypto.verify(publicKey, msg, sig).then(function() {  
       console.log("Signature is OK"); 
    }).catch(function() {  
     console.log("Signature is BAD"); 
    }); 
}); 

de this site. J'ai essayé de changer le privateKey de 32 octets à 16 octets et d'autres valeurs. Il a fini par me donner des erreurs. Récemment, j'ai découvert que pour avoir une longueur de clé différente, vous avez besoin de différentes courbes. Est-ce que quelqu'un sait comment changer la courbe dans le code ci-dessus? Si non, quelqu'un fournirait-il un code source pouvant utiliser différentes longueurs de clé ECDSA?

(Je suis assez nouveau à ECC, donc si j'ai mal utilisé les termes ou si j'ai complètement mal compris le concept, s'il vous plaît pardonnez).

+1

Veuillez lire [Dans quelles circonstances puis-je ajouter "urgent" ou d'autres expressions similaires à ma question, afin d'obtenir des réponses plus rapides?] (// meta.stackoverflow.com/q/326569) - le résumé est que cette Ce n'est pas un moyen idéal de s'adresser aux bénévoles, et il est probablement contreproductif d'obtenir des réponses. Merci de ne pas ajouter ceci à vos questions. – halfer

Répondre

1

Selon https://github.com/bitchan/eccrypto#implementation-details (qui ressemble à la bonne bibliothèque pour votre code), la bibliothèque ne prend en charge que la courbe secp256k1.

La plupart des autres bibliothèques, si elles ne disposent pas d'un contexte autre que la courbe 256 bits, supposeront secp256r1 (r au lieu de k), ce qui signifie que la bibliothèque choisie ne fonctionne pas avec beaucoup de bibliothèques . (Par exemple, Windows 7, 8 et 8.1 ne peut pas faire secp256k1 en utilisant les bibliothèques cryptographiques fournies par le système d'exploitation)

Donc pour "comment utiliser une clé de taille différente avec cette bibliothèque?" la réponse est "vous ne pouvez pas, désolé". Et pour "quelle bibliothèque puis-je utiliser, alors?" la réponse est "désolé, cela sort du cadre de StackOverflow".

+0

Cela signifie-t-il que je dois utiliser un code séparé et trouver une bibliothèque distincte pour chaque numéro de longueur de clé? – YMbrothers

+0

En règle générale, non. La plupart des bibliothèques gèrent plusieurs courbes. Vous venez d'en trouver un qui ne supporte qu'un. – bartonjs