已知国密素域椭圆曲线SM2的素数p = 2^256 - 2^224 - 2^96 + 2^64 - 1
设x是任意64位二进制整数,0 < x < 2^64
令32位二进制整数b = x >> 32
令32位二进制整数a = x & 0xffffffff
则有x = (b * 2^32) + a
同理(x * 2^256) = (b * 2^288) + (a * 2^256)
现在问题可以提出来了,想要计算(x * 2^256) mod p,该如何进行呢?
通用的大整数对素数p的求模算法诞生于上世纪70年代的计算数学领域,
对于特定的素数p,存在快速约减算法,能够大大提高求模运算的速度。
在电脑内存里,整数(x * 2^256)可表达如下:
|-----------|-----------|-----------|-----------|-----------|
| 2^256 | 2^192 | 2^128 | 2^064 | 2^000 |
|-----------|-----------|-----------|-----------|-----------|
| x | 0 | 0 | 0 | 0