首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何验证Curve448公钥?

如何验证Curve448公钥?
EN

Cryptography用户
提问于 2021-06-23 14:16:49
回答 1查看 322关注 0票数 2

使用无效公钥执行ECDH计算可能会泄漏有关您自己的私钥的信息。对于Weierstrass曲线,重要的是验证对等方的公钥实际上是曲线上的一个点,而不是无穷远处的点。(见“椭圆曲线公钥的验证”,Antipa等人著.§3,也见为什么需要验证公钥?)。

使用Curve25519,所有32字节字符串都是ECDH的有效公钥.但是,在希望确保缴费行为的协议中,必须拒绝一些值。愿第四个与你同在:一个微架构侧通道攻击的几个现实世界的Curve25519应用“,由Genkin等人.还建议拒绝这些点,以避免在大多数(但不是完全)固定时间实现中出现定时侧通道。

那Curve448呢?Curve448公钥需要验证还是任何56字节的字符串都是有效的?原纸RFC 7748没有提到任何这样的需求,但也许在这个主题上有新的智慧。

EN

回答 1

Cryptography用户

发布于 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的公钥相当短,只要结果的共享秘密不是零,就不需要验证。

麦克·汉堡在发表之前就知道了这篇文章,因为在承认之前

此外,我们也感谢麦克汉堡的建设性意见。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/91710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档