2017-09-11 19 views
0

현재 내 프로젝트는 BouncyCastle의 fips 리소스를 암호화/복호화 서명에만 사용하고 있습니다. 키는 여전히 일반적인 C# 탄력성으로 생성됩니다. 이제 낭비이기 때문에 코드를 변경하고 싶지만이 작업을 수행하는 방법에 대한 문서를 찾을 수 없습니다.Bouncy 성을 사용하여 EC 키 쌍을 생성하는 방법

내가 지금까지 가지고 :

ECDomainParameters s = new ECDomainParameters(...?) 
     FipsEC.KeyPairGenerator ecGen = CryptoServicesRegistrar.CreateGenerator(new FipsEC.KeyGenerationParameters(s)); 

하지만 어떻게 내가 곡선, G 및 N의 유형을 지정합니까?

어떻게 든 도와 주시면 감사하겠습니다.

+0

'FipsEC.DomainParams.B571'을 찾았지만이 코드에서 idk를 사용하는 방법 –

답변

0

BouncyCastle 단위 테스트에서 몇 가지 예를 발견했습니다. https://www.bouncycastle.org/csharp/download/bccrypto-csharp-1.8.1-src.zip를하거나 웹 페이지의 해당 소스 찾기 : 테스트를 자신의 코드를 다운로드하십시오 https://www.bouncycastle.org/csharp/index.html

그런 다음 단위 테스트와 클래스를 찾습니다 : 예를 들어 ECTest

들이 같은 코드를 가지고 :

/** 
* key generation test 
*/ 
[Test] 
public void TestECDsaKeyGenTest() 
{ 
    SecureRandom random = new SecureRandom(); 

    BigInteger n = new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307"); 

    FpCurve curve = new FpCurve(
     new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), // q 
     new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), // a 
     new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16), // b 
     n, BigInteger.One); 

    ECDomainParameters parameters = new ECDomainParameters(
     curve, 
     curve.DecodePoint(Hex.Decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G 
     n); 

    ECKeyPairGenerator pGen = new ECKeyPairGenerator(); 
    ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(
     parameters, 
     random); 

    pGen.Init(genParam); 

    AsymmetricCipherKeyPair pair = pGen.GenerateKeyPair(); 

    ParametersWithRandom param = new ParametersWithRandom(pair.Private, random); 

    ECDsaSigner ecdsa = new ECDsaSigner(); 

    ecdsa.Init(true, param); 

    byte[] message = new BigInteger("968236873715988614170569073515315707566766479517").ToByteArray(); 
    BigInteger[] sig = ecdsa.GenerateSignature(message); 

    ecdsa.Init(false, pair.Public); 

    if (!ecdsa.VerifySignature(message, sig[0], sig[1])) 
    { 
     Fail("signature fails"); 
    } 
}