1. 主页
  2. 文档
  3. Monero-Doc 门罗币教程...
  4. 第三章 加密学
  5. 2 非对称加密技术
  6. 2.4 Edwards 25519 椭圆曲线

2.4 Edwards 25519 椭圆曲线

注:作者离成为一名密码学家还差得远,请读者对准确性持怀疑态度。 本文只讨论下层曲线(underlying curve),公钥派生和签名算法将分别处理。

Monero中使用Edwards25519椭圆曲线作为密钥对生成的基础。曲线来自Ed25519签名方案,虽然在门罗币中保持曲线不变,但它并不完全遵循Ed25519的其余部分。 Edwards25519曲线与 Curve25519是双有理等效的。

定义

这是标准的Edwards25519曲线定义,除了命名约定以外没有门罗币特有的内容。这一惯例来自于CryptoNote白皮书,在门罗币文献中被广泛使用。

曲线等式定义

−x^2 + y^2 = 1 − (121665/121666) * x^2 * y^2

注释:

  • 曲线是二维的 (毫无疑问,正如高中所学的曲线)
  • 由于公式的y^2部分, 曲线是在y轴下方的镜像 (非多项式)

基点: G

基点是曲线上的一个特定点,它被用作进一步计算的基础。这是曲线作者的任意选择,只是为了标准化方案。 注意,它足以指定y值和x值的符号。这是因为具体的x可以从曲线方程中计算出来。

G = (x, 4/5)  # 从正数x中获得该点
5866666666666666666666666666666666666666666666666666666666666666# 基点的16进制表示为

基点的素数阶: l

在布局术语中,假设绘制曲线的“画布”具有有限的“分辨率”,因此点坐标必须在某个点“环绕”。这是通过将l值(小写L)模化来实现的。换句话说,l定义了我们可以使用的最大标量。

l = 2^252 + 27742317777372353535851937790883648493
# => 7237005577332262213973186563042994240857116359379907606001950938285454250989

l是曲线作者所指定的质数。 实际上,这是私钥的强度(strength)。

曲线上点的个数

曲线上的总点数也是质数:

q = 2^255 - 19

实际上,并非所有的点都是“有用的”,因此私钥的强度仅限于上面的l描述。

实现

Monero使用了Daniel J.Bernstein的Ref10实现(显然经过了修改)。

参考

我们要如何帮助您?