3

据我了解,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

4

0 回答 0