一个区块链钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。私钥(k)是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆 曲线乘法这个单向加密函数产生一个公钥(K)。有了公钥(K),我们就可以使用一个单向加密哈希函数生成区块链地址(A)。

k -> K -> A

私钥

区块链私钥只是一个随机选出的数字而已。你可以用硬币、铅笔和纸来随机生成你的私钥:掷硬币256次,用纸和笔记录正反面并转换为0和1,随机得到的256位二进制数字可作为区块链钱包的私钥。生成私钥就是“在1到2^256之间随机选一个数字”。 更准确地说,私钥可以是1和n-1之间的任何数字,其中n是一个常数(n=1.158*1077,略小于2^256)。 从编程的角度来看,一般是通过在一个密码学安全的随机源中取出一长串随 机字节,对其使用SHA256哈希算法进行运算,这样就可以方便地产生一个256位的数字。如果运算结果小于n-1,我们就有了一个合适的私钥。否则,我 们就用另一个随机数再重复一次。

公钥

通过椭圆曲线乘法可以从私钥计算得到公钥,这是不可逆转的过程:K = k * G 。其中k是私钥,G是被称为生成点的常数点,而K是所得公钥。
以公钥 K 为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160 哈希值,得到一个长度为160比特(20字节)的数字: A = RIPEMD160(SHA256(K))

地址

区块链地址,是一个由数字和字母组成的字符串,可以与任何想给你区块链的人分享。由公钥生成的区块链地址以数字“1”开头。

32是HD的核心;
39是SEED的生成算法;
43是32增加了域的扩展;
44是在43和32的基础上增加多币种,例如你一个HD的钱包可以同时管理主网和测试网的比特币;