使用
montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p可以将Edwards曲线点(Ed25519公钥)传输到蒙哥马利曲线。如果Ed25519公钥无效,例如在一个小的子群或无效曲线攻击的情况下,它会有什么副作用吗?
如果是的话,什么是正确处理这一问题的最佳解决方案?
发布于 2022-02-07 21:39:08
定义在字段K上的Montgomery曲线定义为:M_{A,B}: Bv^2 = u^3 + Au^2 + u,用于特定的A,B \in K,并带有B(A^2-4) \neq 0。
Curve25519使用素数q = 2^{255} − 19形成有限域\mathbb{F}_q,并首先为ECDH定义,后命名为X25519。蒙哥马利方程是v^2 = u^3+486662 u^2+u,486664是\mathbb{Z}_p中的平方,即是二次剩余(QR)。u = 9选择了一个基点。Weierstrass表单(SageMath的一个需要)
这条曲线“Curve25519”是出生等值 is \mathbb{Z}_p到Edwards曲线Ed25519 x^2 + y^2 = 1 + (121665/121666)x^2y^2;
相反的是操作是;
爱德华形式有一条同构曲线。
-x^2 + y^2 = 1 - (121665/121666)x^2y^2,因为-1在\mathbb Z_p中是QR
montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p可以将edwards曲线点(ed25519公共密钥)传输到蒙哥马利曲线。
是的,如上所述,从蒙哥马利到爱德华兹u = \frac{(y + 1)}{(1 - y)}
如果ed25519公钥无效,例如在一个小的子群或无效曲线攻击的情况下,它会有什么副作用吗?
Edward25519密钥可以转换为Curve25519,如果已经使用合法用户的责任构造了密钥
在集合定义中,我们希望X25519的密钥作为
\{n: n \in 2^{254} +8\{0,1,2,\dots,2^{251}-1 \}\},,换句话说,在[0,2^{251}-1]与8相乘之间选择一个统一的随机数,而不是添加2^{254}。
基点的阶数为(小-端);
edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010清算0,1,2确保
下面是最大值(小endian),我们可以看到有两个私钥可以拥有相同的公钥,但是,这是一个可以忽略但可以找到的事件。
0x8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7
这样就没有必要了,因为如果合法的用户已经使用了这些规则,那么生育等价就会产生不小的顺序点。
在Curve25519和edwards25519的出生等价条件下,每个X25519公钥对应于两个可能的Ed25519公钥)。X25519只使用x坐标(名称出现的地方),Ed25519使用点的坐标。当我们只有一个点的x坐标时,除了y=0,还有两个可能的点(x,y)和(x,-y)。
如果是的话,什么是正确处理这一问题的最佳解决方案?
没有发生验证点的危险。
使用相同键的
我不能直接说这是不安全的,但是,我们的一般规则是不为不同的目的使用相同的密钥。直到有人证明没有危险,让自己不使用相同的钥匙,用于不同的目的。
对于X25519和Ed25519,最好有一个统一的随机256位密钥,并使用HKDF-展开导出两个密钥。
请记住,公钥是固定的,当您执行DHKE时,这意味着您具有静态DHKE。这不需要保密。更好的是信号协议的功能;双轮毂和您可以用Ed25519签署新的公钥。
https://crypto.stackexchange.com/questions/98561
复制相似问题