ECC常用操作
Secp256k1常见的数学操作包括 加法、倍乘、逆元计算
例如: Point1 (x1,y2), Point2(x2, y2) , 计算 Point1 + Point2 = R
计算过程:
在这个计算过程中, a, b 并未直接出现,但它们已经通过曲线方程约束了所有点的坐标。
Curve |
a + |
b + |
Mod: |
Point1 |
x |
y |
Point2 |
x |
y |
Point1 + Point2 |
x |
y |
P (x1,y2) , 计算 P * k = P + P + P ... P(k)
点倍乘 不能直接通过常规的数乘计算,而必须通过"两点相加"来完成
例如: P * 19
计算过程(乘数采用二进制计算可优化计算过程):
在这个计算过程中, a, b 并未直接出现,但它们已经通过曲线方程约束了所有点的坐标。
Curve |
a + |
b + |
Mod: |
Point1 |
x |
y |
Multiplier: |
Point1 * Multiplier |
x |
y |
有限域中椭圆曲线中的乘法会存在一个循环
例如:
点 P(3,6) 的循环次数为 5, 以及循环计算得到的点集 称 循环子群。 该点集的数量就叫做阶。 即 点P(3,6)的阶 为 5。
可以看出 如果使用阶的形式 上面的 7 * P = 2P, 这样算点倍乘更优
如何计算阶呢?
1. 计算椭圆曲线的阶 N (N 是有限域上椭圆曲线的有效点的数量)
2. 找出 N 的所有因子
3. 对每个因子计算 n * P
4. 找到最小的且满足 n * P=O 的 n, n 就是该点的阶
例如:
对于椭圆曲线
1. 共有 42 个点,因此 N = 42.
2. 42的因子有 1, 2, 3, 6, 7, 14, 21, 42
3. 依次与点 P(2, 3)相乘
4. 1P ≠ 0, 2P≠0, ...7P=0, 因此P的阶是7