2013-08-15 8 views
7

ECDSA (Elliptic Curve Digital Signature Algorithm)을 구현하려고하지만 Bouncy Castle을 사용하는 Java에서 예제를 찾을 수 없습니다. 키를 만들었지 만 서명을 만들고 확인하는 데 어떤 종류의 함수를 사용해야하는지 실제로 알지 못합니다.BouncyCastle에서 디지털 서명 알고리즘 (ECDSA) 구현의 타원 곡선

public static KeyPair GenerateKeys() 
    throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException 
{ 
    ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("B-571"); 
    KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC"); 
    g.initialize(ecSpec, new SecureRandom()); 
    return g.generateKeyPair(); 
} 
+0

도울 수는 없지만 crypto.stackexchange.com – Yagiz

+1

에서도 같은 질문을 만들었습니다. 몇 년 전에 올바른 암호화 라이브러리 사용에 대한 코드 샘플이 주제에 포함되었습니다. 그게 사실인지 지금 확실하지 않습니다. 정확하고 검증 된 보안 관련 코드가있는 곳을 찾는 것이 좋지만 – LamonteCristo

답변

11

owlstead가 정확합니다.

KeyPair pair = GenerateKeys(); 
Signature ecdsaSign = Signature.getInstance("SHA256withECDSA", "BC"); 
ecdsaSign.initSign(pair.getPrivate()); 
ecdsaSign.update(plaintext.getBytes("UTF-8")); 
byte[] signature = ecdsaSign.sign(); 

그리고 확인 : : 그리고 좀 더 정교하게, 당신은이 작업을 수행 할 수 있습니다

Signature ecdsaVerify = Signature.getInstance("SHA256withECDSA", "BC"); 
ecdsaVerify.initVerify(pair.getPublic()); 
ecdsaVerify.update(plaintext.getBytes("UTF-8")); 
boolean result = ecdsaVerify.verify(signature); 
+0

"Java Security API Provider 이름은 이제 BC가 아닌 SC입니다" https://rtyley.github.io/spongycastle/ – JDOaktown

1

주로 Bouncy Castle을 제공 업체로 사용하는 것 같습니다. 이 경우 간단히 Signature.getInstance("SHA256withECDSA", "BC")을 사용할 수 있습니다.

5

BouncyCastle 인 제공 : 응용 프로그램이되어 일부 암호화 기능을 제공하는 클래스 세트 Java가 제공하는 일반 API를 통해 사용합니다. 서명 생성 또는 확인 방법을 보려면 Java Cryptography Architecture, 특히 서명 섹션을 참조하십시오. 기본적으로 getInstance() 메서드가있는 java.security.Signature 인스턴스를 얻은 다음 비공개 키 (initSign(), 서명 생성) 또는 공개 키 (initVerify(), 서명 확인) 중 하나로 인스턴스를 초기화합니다. 그런 다음 하나 또는 여러 개의 update() 호출로 메시지 데이터를 입력하고 마지막으로 sign() 또는 verify()을 호출하여 서명을 생성하거나 확인합니다.