本文主要参考:
1. ECDSA算法简介
ECDSA 是 Elliptic Curve Digital Signature Algorithm 的简称,主要用于对数据(比如一个文件)创建数字签名,以便于你在不破坏它的安全性的前提下对它的真实性进行验证。
你不应该将 ECDSA 与用来对数据进行加密的 AES(高级加密标准)相混淆。ECDSA 不会对数据进行加密、或阻止别人看到或访问你的数据,它可以防止的是确保数据没有被篡改。
ECDSA 原理非常简单,有一个数学方程,在图上画了一条曲线,然后你在这条曲线上面随机选取了一个点作为你的 原点 G。接着你产生了一个 随机数 k,作为你的 私钥,最后你用上面的 随机数 k 和 原点 G 通过一些复杂的魔法数学方程得到该条曲线上面的第二个点,这是你的 公钥 P。
当你想要对一个文件进行签名的时候,签名本身由两部分组成,称为 r 和 s 。通过 私钥k(随机数) 和文件的 哈希 组成一个魔法数学方程,这将给出你的签名的 s 部分。取 公钥 P 的 x 轴即为签名的 r 部分。为了验证签名的正确性,你需要 公钥 P 和签名 s、r组成一个魔法数学方程,该方程计算会得到一个坐标点,如果该坐标点的 x 轴刚好为签名中的 r,那么即可认为改签名是有效的。
2.椭圆曲线密钥生成
像 y 2 = x 3 + a x + b y^2 = x^3 +ax+b y2=x3+ax+b 这样的式子通常画出来是个椭圆曲线,如下图所示:



椭圆曲线还有一个特性就是,我们以 G 为起点经过 k 次寻找后,得到 kG 点这一顺序计算过程是比较简单的,但如果我们已知 G 点要得到 kG 点是经过多少次寻找得到的是比较困难的,我们只能对 k 一个一个尝试,当 k 比较大时,k 的寻找过程是及其困难的,因此,这一过程是ECDSA算法背后安全性的基础,而这一原则也被称为 单向陷门函数。
比特币的椭圆曲线一般是采用以下函数:
y 2 = x 3 + 7 , a = 0 , b = 7 y^2 = x^3+7,a=0,b=7 y2=x3+7,a=0,b=7
开始的节点 Generator(G) 坐标为:
G x = 0 x 79 B E 667 E F 9 D C B B A C 55 A 06295 C E 870 B 07029 B F C D B 2 D C E 28 D 959 F 2815 B 16 F 81798 Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 Gx=0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
G y = 0 x 483 A D A 7726 A 3 C 4655 D A 4 F B F C 0 E 1108 A 8 F D 17 B 448 A 68554199 C 47 D 08 F F B 10 D 4 B 8 Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 Gy=0x483A