如何更改ECDSA的密钥长度?

时间:2017-10-13 13:09:25

标签: javascript digital-signature elliptic-curve ecdsa

最近,我试图用ECDSA的代码做点什么。我想改变它的密钥长度但是徒劳无功。我检查了互联网并找到了一些ECDSA的源代码,但不知怎的,它只允许32个字节。

例如,我发现了这个:

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");
   });
});

来自this网站。我试图将privateKey从32个字节更改为16个字节和其他值。它最终给了我错误。

最近我发现要有不同的密钥长度,你需要不同的曲线。有人知道如何改变上面代码中的曲线吗?如果没有,有人会提供可以使用不同密钥长度的ECDSA的源代码吗?

(我对ECC很新,所以如果我使用错误的术语或者我完全误解了它的概念,请原谅)。

1 个答案:

答案 0 :(得分:1)

根据https://github.com/bitchan/eccrypto#implementation-details(看起来像您的代码的正确库),该库仅支持secp256k1曲线。

如果除了曲线为256位曲线空间之外没有任何上下文,大多数其他库将假设它是secp256r1(r而不是k),这意味着您选择的库不能互操作有很多图书馆。 (例如,Windows 7,8和8.1无法使用操作系统提供的加密库执行secp256k1

因此对于"如何在此库中使用不同大小的键?"答案是"你不能,抱歉"。对于"我可以使用哪个库?"答案是#34;抱歉,这超出了StackOverflow"的范围。