2015-10-12 8 views
1

Я пытаюсь сделать обмен ключами ECDH с помощью C# BouncyCastle. Мне удалось создать необходимые объекты AsymmetricCipherKeyPair, и я также могу сгенерировать общий ключ другого открытого ключа partys.AsymmetricKeyParameter as byte []

Однако, чтобы обменять открытый ключ, мне нужно это как байт [] или, по крайней мере, все, что я могу превратить в необработанные данные, поскольку протокол, который я использую для переноса ключей между сторонами, не принимает никакого BouncyCastle объект.

X9ECParameters ecPars = NistNamedCurves.GetByName("P-521"); 
    ECDomainParameters ecDomPars = new ECDomainParameters(ecPars.Curve, ecPars.G, ecPars.N, ecPars.H, ecPars.GetSeed()); 
    IAsymmetricCipherKeyPairGenerator gen = GeneratorUtilities.GetKeyPairGenerator("ECDH"); 
    gen.Init(new ECKeyGenerationParameters(ecDomPars, new SecureRandom())); 

    AsymmetricCipherKeyPair keyPair = gen.GenerateKeyPair(); 
    IBasicAgreement keyAgreement = AgreementUtilities.GetBasicAgreement("ECDH"); 
    keyAgreement.Init(keyPair.Private); 

Так что я нуждаясь здесь является ключевым значением keyPair.Public как байт [].

Надеюсь, вы поймете, куда я направляюсь и могу помочь.

ответ

0

Если у вас есть только ECPublicKeyParameter 'паб' (т.е. от keyPair.Public), вы можете получить кодировку общественной точки:

byte[] data = pub.Q.GetEncoded(); 

На приемном конце:

ECCurve curve = ecDomPars.Curve; 
ECPoint q = curve.DecodePoint(data); 
ECPublicKeyParameter peerPub = new ECPublicKeyParameter(q, ecDomPars); 

Это больше типичный для обмена сертификатами, иначе у вас не будет гарантии того, с кем вы «соглашаетесь».

Я немного обеспокоен тем, что вы можете «перевернуть свой собственный протокол криптографии»; если это для реального приложения, рассмотрите возможность использования существующего протокола, возможно, только TLS.

+0

Благодарим вас за ответ. Не волнуйтесь, что часть сертификата находится в процессе, это был всего лишь первый шаг, чтобы попробовать некоторые обмены ключами. Аутентификация - это незавершенная работа, благодарю вас за намек. –