原文链接:https://andrea.corbellini.name/2015/06/08/elliptic-curve-cryptography-breaking-security-and-a-comparison-with-rsa/
这篇文章是ECC系列的第四篇,也是最后一篇。
在上一篇文章中,我们已经看到了两种算法,ECDH和ECDSA,我们也看到了椭圆曲线的离散对数问题是如何对其安全性起重要作用的。但是,如果你还记得,我们说过对于离散对数问题的复杂性我们没有数学证明:我们认为它是“困难的”,但我们不能确定。在这篇文章的第一部分,我们将试着了解在实践中使用今天的技术有多“困难”。
然后,在第二部分,我们将尝试回答这个问题:如果RSA(和其他基于模算术的密码系统)可以很好地工作,我们为什么需要ECC(椭圆曲线密码学)?
破解离散对数问题(Breaking the discrete logarithm problem)
现在我们将看到计算椭圆曲线离散对数的两种最有效的算法:the baby-step, giant-step algorithm和Pollard's rho method。
在开始之前,提醒一下,下面是离散对数问题的内容:给定两点P和Q,找出满足方程Q = xP的整数x。这些点属于椭圆曲线的一个子群,它有一个基点G,阶数为n。
Baby-step, giant-step
在输入算法细节之前,先快速考虑一下:我们总是可以将任意整数


考虑到这一点,我们可以将离散对数问题的方程重写如下:

baby-step giant-step算法是一种“中间相遇”的算法。与暴力破解(逐个计算每一个
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/79271a73b75b1b2971964504afad8a27.png)
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/79271a73b75b1b2971964504afad8a27.png)
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/361ff9ee7b8b0179ccaa0a36c849bca2.png)
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/d42fa18a2f591d449740b1818e9ef061.png)
- 计算
- 对
中的每一个b,计算
并将结果存储在一个哈希表中
- 对
中的每一个a,:
(1)计算

(2)计算

(3)检查哈希表,看看是否存在一个点bP使得

(4)如果这样的点存在,那么我们就找到了

正如你所看到的,我们计算
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/361ff9ee7b8b0179ccaa0a36c849bca2.png)
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/111cf5c2cf1cc54e0b93080ff933d2e8.png)
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/9fd7a2c3eeb5a5dcee3dfc125e08fd5c.png)

baby-step, giant-step算法:最初我们通过小步骤计算几个点,并将它们存储在一个哈希表中。然后我们执行大步骤,并将新点与哈希表中的点进行比较。一旦找到匹配,计算离散对数就是重新排列项的问题。
为了理解这个算法的原理,先暂时忘记这些被缓存的点
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/361ff9ee7b8b0179ccaa0a36c849bca2.png)
