2017-10-13 217 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