荨麻曲线25519密钥交换
nettle curve25519 key exchange
我正在尝试了解如何使用 nettle 的 curve25519 函数实现密钥交换。
我正在编写一个软件,它使用基于 public 密钥的身份验证建立加密的 TCP 连接。客户端和服务器程序共享相同的代码库。
这是一个学习网络和加密编程的爱好项目。 :-)
我有一个使用 nettle 的 rsa_encrypt 函数的玩具应用程序,但据我所知,没有与 curve25519 等效的应用程序。如何使用 nettle 的 curve25519 函数进行密钥交换?
明确地说,我知道我可以而且可能应该简单地使用任何生产质量的 TLS 库,如 openssl,但我想学习如何从头开始进行加密 TCP 连接。使用 TLS 库会破坏这个目的。
我比较了许多加密库,发现 nettle 最容易上手,因为它是低级的。
椭圆曲线一般用于键'agreement'而不是键'exchange'。
不知道大家对这方面了解多少,简单说明一下:
RSA - 我们生成一个随机对称密钥,使用接收者的 public 密钥对其进行加密,然后接收者自己解密并使用它。
ECC(椭圆曲线加密)——我们使用称为椭圆曲线 Diffie-Hellman 的过程,由于曲线点相乘的可交换性,我们可以通过以下方式在曲线上建立相同的点乘以 theirPublicKeyPoint * ourPrivateKeyPoint * G
,其中 G
是曲线基点。
所以,总结一下:
- 我强烈建议您使用 ECDH 而不是 RSA。
- 你需要找到一个函数在
curve25519
上执行ECDH,也称为x25519
,nettle的函数是this。
- 经过 ECDH 处理后,我们在曲线上得到了另一个点。 :) - 我们对
x
的坐标进行哈希处理以生成对称密钥。尽管这通常由 lib 完成。
我正在尝试了解如何使用 nettle 的 curve25519 函数实现密钥交换。 我正在编写一个软件,它使用基于 public 密钥的身份验证建立加密的 TCP 连接。客户端和服务器程序共享相同的代码库。
这是一个学习网络和加密编程的爱好项目。 :-)
我有一个使用 nettle 的 rsa_encrypt 函数的玩具应用程序,但据我所知,没有与 curve25519 等效的应用程序。如何使用 nettle 的 curve25519 函数进行密钥交换?
明确地说,我知道我可以而且可能应该简单地使用任何生产质量的 TLS 库,如 openssl,但我想学习如何从头开始进行加密 TCP 连接。使用 TLS 库会破坏这个目的。 我比较了许多加密库,发现 nettle 最容易上手,因为它是低级的。
椭圆曲线一般用于键'agreement'而不是键'exchange'。
不知道大家对这方面了解多少,简单说明一下:
RSA - 我们生成一个随机对称密钥,使用接收者的 public 密钥对其进行加密,然后接收者自己解密并使用它。
ECC(椭圆曲线加密)——我们使用称为椭圆曲线 Diffie-Hellman 的过程,由于曲线点相乘的可交换性,我们可以通过以下方式在曲线上建立相同的点乘以
theirPublicKeyPoint * ourPrivateKeyPoint * G
,其中G
是曲线基点。
所以,总结一下:
- 我强烈建议您使用 ECDH 而不是 RSA。
- 你需要找到一个函数在
curve25519
上执行ECDH,也称为x25519
,nettle的函数是this。 - 经过 ECDH 处理后,我们在曲线上得到了另一个点。 :) - 我们对
x
的坐标进行哈希处理以生成对称密钥。尽管这通常由 lib 完成。