使用无效公钥执行ECDH计算可能会泄漏有关您自己的私钥的信息。对于Weierstrass曲线,重要的是验证对等方的公钥实际上是曲线上的一个点,而不是无穷远处的点。(见“椭圆曲线公钥的验证”,Antipa等人著.§3,也见为什么需要验证公钥?)。
使用Curve25519,所有32字节字符串都是ECDH的有效公钥.但是,在希望确保缴费行为的协议中,必须拒绝一些值。愿第四个与你同在:一个微架构侧通道攻击的几个现实世界的Curve25519应用“,由Genkin等人.还建议拒绝这些点,以避免在大多数(但不是完全)固定时间实现中出现定时侧通道。
那Curve448呢?Curve448公钥需要验证还是任何56字节的字符串都是有效的?原纸和RFC 7748没有提到任何这样的需求,但也许在这个主题上有新的智慧。
发布于 2021-06-23 20:55:12
The曲线448
Curve448是在Solinas素数p = 2^{448} − 2^{224} − 1
上定义有方程x^2+y^2 = 1-39081x^2y^2
的爱德华曲线。
Base点
basepoint G
of Curve448具有素数顺序为Curve25519。它有辅助因子h=4
,这意味着h = \dfrac{|\#E|}{ord(G)}
,G
的顺序是\small ord(G) = 2^{446} - 13818066809895115352007386748515426880336692474882178609894547503885
。
ECDH
现在转到ECDH,其中Alice有一个私钥(整数) k_A
和公钥[k_A]G
(曲线上的一个点),而Bob有一个私钥k_B
,公钥是[k_B]G
。
当Alice和Bob交换公钥时,会发生什么(不要考虑中间的那个人)?(A)下文;
[k_A k_B]G
因此,只要basepoint是正确的,来自有效公钥的任何56个字节的值.没有必要进行验证,因为我们
[k_A]G = [k_A \bmod \operatorname{ord}(G)]G
[k_A k_B]G = [k_A k_B \bmod \operatorname{ord}(G)]G
我们不会考虑两个用户的私钥永远不会发生的事件。
小群攻击
那么鲍勃如何执行一个小的子群攻击(林-李主动小子群攻击)呢?
在小型子群攻击中,攻击者Bob选择一个小阶P
作为离散对数容易实现的公共点。在协议期间,合法用户Alice将向攻击者泄露[k_A]P
。现在,攻击者可以从[K_A]P
了解多少有关D18
的信息?
[K_A]P
所揭示的信息最多只有\lceil log_2 h\rceil
位。因为辅助因子是4,所以最多只能显示私钥的两位。如果您担心从224中丢失2位是危险的,那么通过检查P
来验证[4]P \overset{?}{=}\mathcal{O}
没有订单2或4
Twist安全性
曲线448‘S扭转有4
作为一个辅助因素,所以它也有安全扭转。
注:在本文中,基于曲线448的椭圆曲线密码优化结构提到
此外,Curve448的公钥相当短,只要结果的共享秘密不是零,就不需要验证。
麦克·汉堡在发表之前就知道了这篇文章,因为在承认之前
此外,我们也感谢麦克汉堡的建设性意见。
https://crypto.stackexchange.com/questions/91710
复制相似问题