椭圆曲线点加倍计算疑问:λ取值与结果矛盾问题
椭圆曲线点加倍计算疑问:λ取值与结果矛盾问题
你好,我来帮你梳理下这个问题的核心所在——你首先在计算λ的时候就出现了逆元的错误,导致λ取了正确值的相反数,进而引发后续的结果矛盾。咱们一步步拆解:
首先,先重新核对你的计算步骤:
给定椭圆曲线 $y^2 = x^3 + 3x + 6 \pmod{31}$,点 $P(1,17)$,先确认P确实在曲线上:$13+3*1+6=10$,$172=289≡289-9*31=10 \pmod{31}$,没问题。
接下来计算λ:
公式是 $λ=(3x_p2+a)(2y_p){-1} \pmod{31}$
- 计算分子:$3x_p2+a=3*12+3=6$
- 计算分母:$2y_p=2*17=34≡3 \pmod{31}$
- 求3在模31下的逆元:找整数k使得 $3k≡1 \pmod{31}$,不难算出$321=63≡63-231=1$,所以逆元是21,不是你可能误算的10(10是-21 mod31)。
所以正确的λ应该是 $621=126≡126-431=2 \pmod{31}$,而不是你得到的29(29≡-2 mod31)。
现在用正确的λ计算2P:
- $x_r=λ2-2x_p=22-2*1=4-2=2$,这部分你算对了
- $y_r=λ(x_p - x_r)-y_p=2*(1-2)-17= -2-17=-19≡-19+31=12 \pmod{31}$,这就和在线计算器的结果$(2,12)$一致了。
那你之前的问题出在哪?
- 你误算了$(2y_p)$的逆元,得到了λ=-2(即29 mod31),这时候用错误的λ直接计算$y_r$会得到16,但这个点$(2,16)$根本不在曲线上(验证下:$23+3*2+6=20$,$162=256≡8 \pmod{31}$,8≠20),是无效的点。
- 当你用-λ代替λ计算$y_r$时,相当于纠正了λ的符号错误,得到了正确的$y_r=12$,但这只是巧合的修正,本质上你的λ计算一开始就错了。
- 至于你说“再加倍到4P时用λ又能行”,大概率是你后续计算时又混淆了点的y坐标符号——因为椭圆曲线上每个x对应两个互为相反数的y值(mod p下),如果后续你用的是正确的点$(2,12)$,那它的加倍计算自然要用正确的λ公式,这时候就不会再出现矛盾了。
总结一下:核心错误是模逆元计算错误,导致λ取了正确值的相反数,后续的符号调整只是临时修正,但没有解决根源问题。只要把逆元算对,整个流程就会和在线计算器一致啦。
备注:内容来源于stack exchange,提问作者Rumpel Stilzchen
相关产品推荐
相关产品推荐

