素域椭圆曲线secp192k1与secp256k1的快速约减求模算法完整推导

编程入门 行业动态 更新时间:2024-10-06 01:45:45

素域<a href=https://www.elefans.com/category/jswz/34/1755459.html style=椭圆曲线secp192k1与secp256k1的快速约减求模算法完整推导"/>

素域椭圆曲线secp192k1与secp256k1的快速约减求模算法完整推导

2019独角兽企业重金招聘Python工程师标准>>>

素域椭圆曲线secp192k1的素数P生成公式为:

p192 = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1

素域椭圆曲线secp256k1的素数P生成公式为:

p256 = 2^256 − 2^32 − 2^9  − 2^8 − 2^7 − 2^6 − 2^4 − 1

这个两个素数都是被精心设计计算出来的,使之具有相同的快速约减机制。将此类素数再进行简化,以:

P = 2^W - M

形式表达,对于secp192k1,则有:

W = 192
M = 0x1000011c9

对于secp256k1,则有

W = 256
M = 0x1000003d1

设大整数N数值范围为: 0 < N < 2^(W + 64)
现以 W + 64 二进制位长存储此大整数,每个存储单元位长为64位,
设其最高单元为H,可以很容易推导出:H * P < N < (H + 2) * P
进而推导可知:
若要计算:N mod P
要么是:N - (P * H)
要么是:N - (P * (H + 1))
绝无另外的可能!

由素数P的生成公式 P = 2^W - M 可知:

P * H = 2^W * H - H * M

计算N - P * H就非常简单了:

N - P * H = N - (2^W * H) + H * M

注意上面式中的N - (2^W * H)部分,这等效于把最高单元H清零!
所以计算 N - P * H 就简化为大整数N去掉最高单元H后剩下的W位二进制整数,再加上 H * M 就可以了。

这里可能有人会问,H * M 的有效位可能高达97位,会不会导致加法运算完成之后,原本是已经清零的最高单元H又变得不是零了呢?当然可能,若 N - P * H 的运算的最终结果使得最高单元H大于零,意味着我们所求的N mod P的数值应该是 N - (P * (H + 1)),只需要在计算 N - P * H 结果的基础上再减去一个素数P就可以了,等效运算则是直接忽略最高单元H,加上一个M就完成了。

在具有高速乘法器的处理器上,类似此种素域椭圆曲线的快速约减求模运算速度将超越使用矩阵加法形式快速约减的NIST类型素域椭圆曲线。此前有传言称比特币选用secp256k1而不是NIST的256素域椭圆曲线是担心NIST素域椭圆曲线参数有后门云云,在我看完全不是这么回事,别忘了所有这些曲线参数全都是Certicom搞的,从硬件实现上来讲,2^W - M形式的素数P能把x64、GPU、DSP的高速乘法器用到极致,而NIST类型快速约减算法在FPGA/ASIC上无出其右,因此个人认为比特币是为了更适应云计算环境而选用了secp256k1而不是NIST256v1,顺便提一句,NIST256v1在sec的文档中叫secp256r1,和secp256k1一起是唯二的256位素域椭圆曲线推荐。

转载于:

更多推荐

素域椭圆曲线secp192k1与secp256k1的快速约减求模算法完整推导

本文发布于:2024-02-27 16:05:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707276.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:椭圆   算法   曲线   完整   快速

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!