密码学 - 椭圆曲线 ECC ED25519
椭圆曲线是一系列满足如下方程的点:
y^2 = x^3 + ax + b
并且
4a^3 + 27b^2 != 0
特性
- 封闭性:因为椭圆曲线上的点相加,还是椭圆曲线上的点。
- 结合律:P+(Q+R) = (P+Q)+R = 0
- 单位元: 单位元是0, 即 P+0 = P
- 逆元: 一个椭圆曲线上的点P的逆元,是相对x坐标的对称点
- 交换律:P+Q = Q+P
标量乘法
nP = P + P + P + ... +P
- 计算标量乘法,最简单的方法是一个个P点相加
- 有个快速的计算方法:double后相加. "Double"主要是依次获得某个位对应的变量的结果。如果该位是1,就加到最后的结果中:
生成一个公钥
通常使用椭圆曲线算法,先选择曲线,计算椭圆曲线的阶,然后在这条曲线上找到最大的子群。找子群,就是寻找子群对应的生成元(G
)。
从一个密钥(形式上是一个随机生成的数字k)开始,我们将它与曲线上预定义的点相乘,可以得到曲线上的另一个点,这就是相应的公钥K,而这个预定义的点叫作生成点G。生成点是作为secp256k1标准的一部分定义的,对于比特币而言,其所有密钥均使用相同G点。
K=kG
k是密钥,G是生成点,K是生成的公钥,也