Je code suivant:Questions sur l'accord secret de l'implémentation ECDiffieHellmanCng dans .net framework 4.7?
var curve = ECCurve.NamedCurves.nistP256;
var ecdhSender = ECDiffieHellman.Create(curve);
var ecdhReceiver = ECDiffieHellman.Create(curve);
Ma compréhension est que je devrais pouvoir calculer accord secret, soit d'utiliser l'objet ecdhSender à l'aide ecdhReceiver.PublicKey ou en utilisant l'objet ecdhReceiver avec ecdhSender.PublicKey et que les deux valeurs de l'accord secrète ne être le même. Si c'est une mauvaise hypothèse, s'il vous plaît faites le moi savoir.
Depuis le ECDiffieHellman.Create retourne le type ECDiffieHellman, j'écrit le code ci-dessous pour obtenir l'accord secret:
string receiverHexString = null;
using (SafeNCryptSecretHandle secretAgreement = (ecdhReceiver as ECDiffieHellmanCng).DeriveSecretAgreementHandle(ecdhSender.PublicKey))
{
byte[] secretAgreementBytes = new byte[32];
IntPtr pointer = secretAgreement.DangerousGetHandle();
Marshal.Copy(pointer, secretAgreementBytes, 0, secretAgreementBytes.Length);
receiverHexString = BitConverter.ToString(secretAgreementBytes).Replace("-", string.Empty).ToLower();
Console.WriteLine($"receiver secretAgreement: 0x{receiverHexString}");
}
string senderHexString = null;
using (SafeNCryptSecretHandle secretAgreement = (ecdhSender as ECDiffieHellmanCng).DeriveSecretAgreementHandle(ecdhReceiver.PublicKey))
{
byte[] secretAgreementBytes = new byte[32];
IntPtr pointer = secretAgreement.DangerousGetHandle();
Marshal.Copy(pointer, secretAgreementBytes, 0, secretAgreementBytes.Length);
senderHexString = BitConverter.ToString(secretAgreementBytes).Replace("-", string.Empty).ToLower();
Console.WriteLine($"sender secretAgreement: 0x{senderHexString}");
}
Assert.AreEqual(receiverHexString, senderHexString);
Mon affirmation est défaillante. Évidemment, je fais quelque chose de mal (si les accords secrets sont censés être les mêmes).
Est-ce que c'est comme ça que j'extrais les octets de la poignée? Ou autre chose?
Qu'essayez-vous d'accomplir? La structure NCRYPT_SECRET_HANDLE est opaque, vous ne devriez pas lire sa mémoire. – bartonjs
Essayer de valider les résultats d'un partenaire avec des étapes détaillées. Pouvez-vous s'il vous plaît commenter si mon hypothèse est correcte ou fausse dans la première partie de ma question? – Raghu