2017-10-13 9 views
-1

최근 ECDSA 코드로 무언가를하려했습니다. 나는 그것의 핵심 길이를 헛되이 바꾸고 싶다. 인터넷을 확인한 후 ECDSA 소스 코드를 발견했지만 어떻게 든 32 바이트 만 허용합니다. this 웹 사이트에서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"); 
    }); 
}); 

:

예를 들어,이를 발견했다. privateKey를 32 바이트에서 16 바이트 및 다른 값으로 변경하려고했습니다. 그것은 나에게 오류를주는 것을 끝내었다.

최근 다른 키 길이를 사용하려면 다른 커브가 필요하다는 것을 발견했습니다. 아무도 위의 코드에서 커브를 변경하는 방법을 알고 있습니까? 그렇지 않은 경우 누군가 ECDSA의 다른 키 길이를 사용할 수있는 소스 코드를 제공합니까?

(나는 ECC에 아주 익숙하다. 잘못된 용어를 사용하거나 완전히 그 개념을 오해한다면 용서해주십시오.)

+1

[더 빠른 답변을 얻기 위해 어떤 상황에서 "긴급한"또는 다른 유사한 문구를 추가 할 수 있습니까?] (// meta.stackoverflow.com/q/326569) - 요약하면 자원 봉사자를 대처하는 이상적인 방법이 아니며, 아마도 답을 얻는 데 비생산적입니다. 이 질문을 귀하의 질문에 추가하지 마십시오. – halfer

답변

1

https://github.com/bitchan/eccrypto#implementation-details (코드에 맞는 라이브러리처럼 보임)에 따르면 라이브러리는 secp256k1 곡선 만 지원합니다.

대부분의 다른 라이브러리는 256 비트 커브 공간 인 커브 이외의 컨텍스트가없는 경우 secp256r1 (k 대신 r)으로 가정합니다. 즉, 선택한 라이브러리가 많은 라이브러리와 상호 작용하지 않습니다 . 예를 들어, Windows 7, 8 및 8.1은 OS 제공 암호화 라이브러리를 사용하여 secp256k1을 수행 할 수 없습니다.

"이 라이브러리에서 다른 크기의 키를 사용하려면 어떻게합니까?" 대답은 "너 미안해. 미안해.". 그리고 "어떤 라이브러리를 사용할 수 있습니까?" 대답은 "죄송합니다, StackOverflow의 범위 밖에 있습니다."

+0

별도의 코드를 사용하고 각 키 길이에 대해 별도의 라이브러리를 찾아야한다는 의미입니까? – YMbrothers

+0

원칙적으로 아니요. 대부분의 라이브러리는 여러 곡선을 처리합니다. 당신은 방금 하나를 지원하는 것을 찾았습니다. – bartonjs