gpt4 book ai didi

c# - ECDiffieHellmanCng实现与机制

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:23 25 4
gpt4 key购买 nike

我一直在阅读不同的密码算法,并且遇到了“Diffie Hellman Cryptography Next Generation”一书。我对这个算法进行了大量搜索,发现它是一种非对称密码系统,在某些方面可以与 RSA 相媲美。我查看了 .Net 的 System.Security.Cryptography,发现它也提供 Diffie-Hellman 密码术。所以我没有去 MSDN在那里我找到了一个关于如何在 C# 中使用它的很好的例子,但是这个例子让我想到了一些问题。让我先复制部分代码:(我没有发布完整代码,因为我的问题主要是关于这部分)

public static byte[] alicePublicKey;

public static void Main(string[] args)
{
using (ECDiffieHellmanCng alice = new ECDiffieHellmanCng())
{

alice.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
alice.HashAlgorithm = CngAlgorithm.Sha256;
alicePublicKey = alice.PublicKey.ToByteArray();
Bob bob = new Bob();
CngKey k = CngKey.Import(bob.bobPublicKey, CngKeyBlobFormat.EccPublicBlob);
byte[] aliceKey = alice.DeriveKeyMaterial(CngKey.Import(bob.bobPublicKey, CngKeyBlobFormat.EccPublicBlob));
byte[] encryptedMessage = null;
byte[] iv = null;
Send(aliceKey, "Secret message", out encryptedMessage, out iv);
bob.Receive(encryptedMessage, iv);
}

}

private static void Send(byte[] key, string secretMessage, out byte[] encryptedMessage, out byte[] iv)
{
using (Aes aes = new AesCryptoServiceProvider())
{
aes.Key = key;
iv = aes.IV;

// Encrypt the message
using (MemoryStream ciphertext = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
byte[] plaintextMessage = Encoding.UTF8.GetBytes(secretMessage);
cs.Write(plaintextMessage, 0, plaintextMessage.Length);
cs.Close();
encryptedMessage = ciphertext.ToArray();
}
}
}

}

当我看这个时,我发现是 AES 在做所有事情,ECDiffieHellman 只负责为 AES 算法提供 key 。同时它本身也是基于SHA256哈希系统。

所以我的问题是,这个“ECDiffieHellmanCng”在这种情况下到底在做什么?我看到的是一个混合密码系统,一个用于 key 交换,另一个用于加密,这与我在互联网上读到的关于这个 Diffie Hellman 算法的内容有冲突,大多数来源将它列在非对称加密系统下,但这个例子是不显示相同的东西。我这样说是因为当我查看 AliceKey 时,我看到它是基于可能使用 SHA256 生成的公钥生成的,它本身不加密/解密任何内容。

最佳答案

你偶然发现的实际上是微软开发的名为“Cryptography Next Generation”的“密码开发平台”。从密码学的角度来看,那里没有任何革命性或“下一代”,只是一个实现或包装已知密码算法的新库。

Diffie-Hellman是最古老和最受尊敬的人之一asymmetric cryptographic我们可用的算法。它允许双方以这样一种方式交换私钥,即他们通信的被动窃听者无法推断出交换的 key 。因此,Diffie-Hellman 是许多密码协议(protocol)的重要组成部分。虽然它不是加密算法。在双方推导出私钥后,他们仍然必须使用对称算法来加密他们接下来的通信。

但这并不是 Diffie-Hellman 独有的,每个非对称算法都与许多对称算法一起使用,以构建一个有效且安全的协议(protocol)。例如,RSA 只允许您使用 2048 位 key 一次加密 256 个字节。出于安全目的,您永远不应使用原始 RSA 来加密数据。我在 this answer 中描述了一种使用 RSA 安全加密任意数据的组合。 .

Elliptic Curve Diffie-Hellman 是经典 Diffie-Hellman 的变体,它使用其他数学结构 - elliptic curve - 作为基础以及 Diffie-Hellman 背后的相同基本思想。它最近获得了一些关注,因为它在达到相同安全级别的同时比经典变体快得多。

关于c# - ECDiffieHellmanCng实现与机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com