我一直在阅读不同的密码算法,并且遇到了“下一代Diffie Hellman密码学”。我对该算法进行了很多搜索,发现它是一个非对称加密系统,在某些方面可与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算法提供密钥。同时,它本身基于SHA256哈希系统。

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

最佳答案

您偶然发现的实际上是Microsoft开发的名为“ Cryptography Next Generation”的“密码开发平台”。从加密的角度来看,这里没有革命性的东西或“下一代”,只有一个实现或包装已知加密算法的新库。

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

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

椭圆曲线Diffie-Hellman是经典Diffie-Hellman的变体,它使用其他数学结构-elliptic curve-作为基础,并且具有Diffie-Hellman背后的基本原理。它最近获得了一些关注,因为它在实现相同安全级别的同时,比经典版本快得多。

09-28 08:26