2017-10-13 158 views
-1

最近,我试着用ECDSA的代码的东西。我想改变它的关键长度,但徒劳无功。我查了一下互联网,发现了一些ECDSA的源代码,但不知何故,它只允许32个字节。如何更改ECDSA的密钥长度?

例如,我发现这一点:

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

请阅读[在什么情况下,我可以添加“紧急”或其他类似的短语到我的问题,以获得更快的答案?](/ meta.stackoverflow.com/q/326569) - 总结是,这不是解决志愿者问题的理想方式,而且可能对获得答案起反作用。请不要将这添加到您的问题。 – halfer

回答

1

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

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

因此,对于“我该如何在此库中使用不同大小的密钥?”答案是“你不能,对不起”。而“为什么我可以使用图书馆,那么?”答案是“对不起,这超出了StackOverflow的范围”。

+0

这是否意味着我需要使用单独的代码并为每个密钥长度的数字找到单独的库? – YMbrothers

+0

通常,不。大多数库处理多条曲线。你只是碰巧找到一个只支持一个。 – bartonjs