荨麻曲线25519密钥交换



我试图了解如何使用荨麻的curve25519函数实现密钥交换。我正在写一个软件,建立加密的TCP连接与基于公钥的身份验证。客户端和服务器程序共享相同的代码库。

这是一个学习网络和加密编程的爱好项目。: -)

我有工作的玩具应用程序使用荨麻的rsa_encrypt函数,但没有相当于curve25519从我所看到的。我如何使用nettle的curve25519函数进行密钥交换?

要清楚,我知道我可以而且可能应该简单地使用任何生产质量的TLS库,如openssl,但我想学习如何从头开始加密TCP连接。使用TLS库会破坏这个目的。我比较了许多加密库,发现nettle是最容易接近的,因为它是低级别的。

椭圆曲线一般用于密钥"一致"而不是密钥"交换"。

我不知道你对这个了解多少,所以我简单解释一下:

  • RSA—我们生成一个随机对称密钥,用接收方的公钥加密,接收方自己稍后解密并使用它。

  • ECC (Elliptic curve crypto)——我们使用一种称为椭圆曲线Diffie-Hellman的过程,由于曲线点乘法的交换性,我们可以通过乘以theirPublicKeyPoint * ourPrivateKeyPoint * G在曲线上建立相同的点,其中G为曲线的基点。

所以,总结一下:

  • 我强烈建议您使用ECDH而不是RSA。
  • 您需要找到一个函数对curve25519(也称为x25519)执行ECDH, nettle的函数是这样的。
  • 经过ECDH过程后,我们得到曲线上的另一个点。:) -我们对x坐标进行哈希以生成对称密钥。虽然这通常由lib.
  • 完成。

最新更新