如何生成地址?什么是非对称加密?
生成地址的步骤#
- 随机生成一个 256 位的私钥(32 字节)
- 通过椭圆曲线加密获取公钥
- 公钥经过两次 hash 函数 生成 20 字节的地址
椭圆曲线#
其中私钥 K, 公钥 P。
在曲线上随机取一点 A (x,y),计算 Kx+Ky 等于 P。即 KA=P,其实 P 就是曲线上的一个坐标点。Bitcoin 中有一个公认的点 G 扮演点 A 的角色,也就是说随机点是公开的,G 相当于一个常数。
消息加密#
NP 问题:给定 P 和 G 很难求出 K,但是根据 K 和 G 可以很快验证 P 是正确的
有两个人 Alice,Bob 他们分别有自己的公钥私钥
- Alice:Pa Ka
- Bob: Pb Kb
Pa = Ka * G
Pb = Kb * G
其中公钥是公开的。也就说两人还能知道另一个信息
- Alice: Ka * Pb = Ka * Kb * G
- Bob : Kb * Pa = Kb * Ka * G
这两个信息是相等的,相当于这两个人的相同的 key,这个 key 就可以相当于是只属于这两个人的对称密钥。
当 Alice 想给 Bob 写信,用 Pb 加密信息,Bob 用 Kb 解密,即做一个可逆运算。
数字签名#
m:message
Alice 用 Ka 对 m 签名,m * Ka = N ,类似用私钥生成公钥(m 为 G)
对方想要验证这句话是 Alice 说的
m * Pa = m * G * Ka , 即 = G * N,由于 G 是公开的,所以很快就能验证 m 是否是 Alice 说的