2016-12-23 10 views
2

私はECDiffieHellmanがどのように.Netの下で働いているのか理解しようとします。暗号化の次世代(CNG)の有無にかかわらずECDiffieHellmanを使用

私は、なぜ非常に似ているように見えるECDiffieHellmanの2つの実装があるのだろうかと思います。
Cngは、暗号化の次世代(CNG)を表しています。

なぜこの二元論ですか?どちらを使うの?

System.Security.Cryptography.ECDiffieHellman.Create()

var alice = ECDiffieHellman.Create(); 
var bob = ECDiffieHellman.Create(); 

Assert.That(alice.PublicKey.ToXmlString(), 
    Is.Not.EqualTo(bob.PublicKey.ToXmlString())); 

var aliceSharedSecret = alice.DeriveKeyMaterial(bob.PublicKey); 
var bobSharedSecret = bob.DeriveKeyMaterial(alice.PublicKey); 

Assert.That(aliceSharedSecret, Is.EqualTo(bobSharedSecret)); 

新しいSystem.Security.Cryptography.ECDiffieHellmanCng()

var alice = new ECDiffieHellmanCng(); 
var bob = new ECDiffieHellmanCng(); 

Assert.That(alice.PublicKey.ToXmlString(), 
    Is.Not.EqualTo(bob.PublicKey.ToXmlString())); 

var aliceSharedSecret = alice.DeriveKeyMaterial(bob.PublicKey); 
var bobSharedSecret = bob.DeriveKeyMaterial(alice.PublicKey); 

Assert.That(aliceSharedSecret, Is.EqualTo(bobSharedSecret)); 

答えて

2

ECDiffieHellmanECDiffieHellmanCngがいっぱいである、抽象基底クラスであります実装タイプ、Windows CNGに基づいています。

ECDiffieHellman.Create()は、デフォルトでECDiffieHellmanCngインスタンスを返します。

DeriveKeyMaterialメソッドは残念ながら、ECDiffieHellmanCngのプロパティとして公開される余分なパラメータを取ります。これは、.NET Framework 4.6.2で解決され、ECDiffieHellmanクラスのいくつかのDeriveKey *メソッドを作成し、パラメータのみを使用しました(プロパティは使用しません)。

関連する問題