据我了解,Curve25519 上使用的 x25519 DH 函数仅使用我在维基百科定义X
中看到的坐标:
The protocol uses compressed elliptic point (only X coordinates), so it allows efficient use of the Montgomery ladder for ECDH, using only XZ coordinates.[5]
XZ 坐标 [数据库条目] 将 xy 表示为 XZ,满足以下等式:
x=X/Z
根据本文档。
我在这个堆栈交换答案中找到了这些方程:
我查看了X25519_public_from_private
函数并发现:
/*
* We only need the u-coordinate of the curve25519 point.
* The map is u=(y+1)/(1-y). Since y=Y/Z, this gives
* u=(Z+Y)/(Z-Y).
*/
我想知道的是如何从 u,v 或 x,y(或 X,Y)坐标创建公钥。尤其是如果它甚至可能的话?
例如,使用经典的 ecdsa,可以通过 x,y 坐标和曲线创建公共数字,从而从它们创建公钥。使用密码学 python 库
的示例:
public_numbers = ec.EllipticCurvePublicNumbers(x, y, curve)
public_key = public_numbers.public_key(backend)
我想用 Curve25519 实现同样的目标。
参考资料:
https://medium.com/@chain_66731/a-deep-dive-into-x25519-7a926e8a91c7
https://hackernoon.com/what-is-the-math-behind-elliptic-curve-cryptography-f61b25253da3
https ://crypto.stackexchange.com/questions/74598/key-specifications-for-x25519-need-two-clarifications-please