私钥→公钥
-
椭圆曲线
- 满足椭圆曲线公式的,二维平面的点的集合
-
按x轴上下对称
- 加法操作
R = P + Q
作P和Q两点的连线,与椭圆曲线的第三个交点为-R,再按x轴取对称点,即为R 当P和Q为同一个点的时候,则作该点与椭圆曲线的切线,与椭圆曲线的第二个交点为-R,再按x轴取对称点,即为R 椭圆曲线是有限域(Field):相加后的点仍在集合中,即交点-R一定存在
- 生成点,乘法操作:
通过提前算好$2^nG$来加速计算过程
已知$K$和$G$的情况下,无法算出$k$
- 是私钥,是公钥。正着好算,反着几乎算不出来
生成私钥
使用SHA-256生成的32字节(256位)的随机数
获取公钥
私钥经过椭圆曲线乘法运算,可以得到公钥
Bip39
那么所谓的实际生产过程中是怎么做的呢?根据什么来生成私钥的呢?
接下来我们就上点干货来说一下BIP39规范下的助记词生成私钥的过程
- 首先在这里我们来看一下BIP39是什么
BiP39的规范介绍来自:github.com/bitcoin/bip…
This BIP describes the implementation of a mnemonic code or mnemonic sentence -- a group of easy to remember words -- for the generation of deterministic wallets.
It consists of two parts: generating the mnemonic and converting it into a binary seed. This seed can be later used to generate deterministic wallets using BIP-0032 or similar methods.
翻译过来就是这个意思: 这个BIP描述了助记码或助记句的实现——一组易于记忆的单词——用于生成确定性钱包。 它由两部分组成:生成助记符和将其转换为二进制种子。该种子稍后可用于使用BIP-0032或类似方法生成确定性钱包。
由此可见 核心是分为一下三步:
- 生成助记词句
- 根据助记词生成种子
- 根据BIP--0032的方法生成确定性钱包
生成助记词:
三个核心概念:
ENT长度:初始熵 允许的ENT大小为128-256位
CS:校验和长度 校验和的长度为ENT/32,取熵hash后的前ENT/32位作为校验和
MS:助记词句长度 助记词必须将熵编码为32的倍数
这几个概念是有关联关系的,后面我们会说到;
生成助记词的步骤:
-
随机生成ENT位的初始熵
-
生成校验和,校验和的长度为
ENT/32,取熵做hash之后的前ENT/32位作为校验和 -
将这个校验和拼到到初始熵的末尾,并转换为2进制
-
BIP39的词库是2048个,即2的11次方,所以我, 需要将上述组成的串按每11位进行切割,编码为0-2047的数字
-
得到的每11位的数字,作为索引从词库中的对应单词
-
得到的单词连接起来即得到最终的助记词串
后续我们将通过Java代码的形式,一步一步的实现上面的步骤 ,敬请期待