主页 > imtokenapp专业版下载 > 比特币钱包技术原理

比特币钱包技术原理

imtokenapp专业版下载 2023-01-17 08:26:46

比特币钱包技术原理

在上一篇文章中,我们了解了比特币地址生成的过程,通过种子生成私钥,然后通过私钥生成公钥,再通过公钥生成地址。 每个私钥对应一个公钥,但是我们看到比特币钱包可以生成多个地址,这是什么原理呢? 创建一个比特币钱包通常会生成 12 个单词。 有了这12个字,钱包就可以恢复了。 原理是什么?

比特币钱包里没有比特币。 事实上,比特币是存储在区块链中的。 钱包只负责管理公私钥和发起转账。 有两种类型的钱包。 第一个是非确定性钱包。 每个私钥对应一个公钥。 每对公钥和私钥之间没有任何关系。 生成N对公私钥,由钱包负责收集。 把这个钱包统称为钥匙扣钱包(keychain)。 第二种是确定性钱包。 所有私钥均由主私钥生成。 主私钥可以生成N个子私钥下载比特币钱包,子私钥也可以生成孙子。 私钥,可以重新生成所有的子私钥。 生成子私钥的方法通常采用树形结构,称为层次确定性钱包(hierarchical deterministic),简称HD钱包。 目前HD钱包已经成为行业主流,下图是HD钱包私钥之间的关系。

下载比特币钱包_用手机可以下载比特币钱包吗_雷达币钱包里的比特币咋提现

HD钱包种子是一串十六进制数据,人类难以读取和转录,因此HD钱包使用一套标准化的英文单词生成随机数种子,易于读取和转录下载比特币钱包,方便不同钱包之间的转账。 词称为助记词,所有词都在BIP39词表中,共2048个。生成种子的过程如下图所示。 一开始需要一个随机数,计算随机数的sha256值,取前4位作为校验码,附加到随机数的末尾。 需要注意的是,校验码需要转成二进制,然后取4位,然后下一步,把132位的数据转成二进制,分成12段,每段11位,然后去到 BIP39 单词列表中按顺序查找单词。 得到助记词后可以选择加不加密码,最后使用PBKF2 HMACSHA512生成种子。

雷达币钱包里的比特币咋提现_下载比特币钱包_用手机可以下载比特币钱包吗

比如我们定义随机数为aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbb,计算sha256为BB4AE3FAA8FB038F2C99D6DB20A2E861D9F35F2FDA5DB1A3245FE0E7FE9EF858。 开头的BB作为校验码,转换成二进制如下:

下载比特币钱包_用手机可以下载比特币钱包吗_雷达币钱包里的比特币咋提现

得到二进制后,分成12段,每段11位,比如第一段10101010101转十进制就是1365,找到BIP39字表中的第1365位为主(从零开始计算)

10101010101   1365  primary
01010101010   682   fetch
10101010101   1365  primary
01010101010   682   fetch
10101010101   1365  primary
01010101010   682   fetch
11101110111   1911  upon
01110111011   955   jazz
10111011101   1501  roof
11011101110   1774  tape
11101110111   1911  upon
01110111011   955   jazz

最终我们得到的助记词如下:

primary fetch primary fetch primary fetch upon jazz roof tape upon jazz

下面我们使用bx命令完成从随机数->助记词->种子->主私钥->子私钥->子公钥->地址的整个过程,首先得到种子

bx mnemonic-new aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb
primary fetch primary fetch primary fetch upon jazz roof tape upon jazz
bx mnemonic-to-seed primary fetch primary fetch primary fetch upon jazz roof tape upon jazz
5970964aae65149edb7cbb271f186d0fbfac5fac0ee25d1cf4365c4991877c1caddaad648139e986f94de0d4f3d93fbbb01d7f01e4c5199dc7eb5045e76e9c78

然后通过seed得到主私钥,主私钥以xprv开头,再通过主私钥得到主公钥,主公钥以xpub开头。

bx hd-new 5970964aae65149edb7cbb271f186d0fbfac5fac0ee25d1cf4365c4991877c1caddaad648139e986f94de0d4f3d93fbbb01d7f01e4c5199dc7eb5045e76e9c78
xprv9s21ZrQH143K2bvsGAG6rPjFR9NThnPer3w3dxVDNA8zbZGgqtj7wWzuJcWunpYGHKVwfzfLNmdh33EtLnuN4ATPLuUYAqXAUGQLey734GS
bx hd-public xprv9s21ZrQH143K2bvsGAG6rPjFR9NThnPer3w3dxVDNA8zbZGgqtj7wWzuJcWunpYGHKVwfzfLNmdh33EtLnuN4ATPLuUYAqXAUGQLey734GS 
xpub69cHcGsMa9oBdEbgPBYUfMmfCHdmTSNAoHGunq25CagYPWqXkj6UfgmxtcGKhGh11GWV5Dsw9URPGpeANeuN7TyK1dsRYuWFx5WcT137Vqj

然后用主公钥生成子公钥,再用子公钥生成地址。 得到的地址为1NVjHS8W1prtTnm5MnW1p8HLKM6h5tKpNJ。

bx hd-to-ec xpub69cHcGsMa9oBdEbgPBYUfMmfCHdmTSNAoHGunq25CagYPWqXkj6UfgmxtcGKhGh11GWV5Dsw9URPGpeANeuN7TyK1dsRYuWFx5WcT137Vqj
02825c61d123a2b08e5ca84dd8f116bb15f0477918853b8fb8f0b462d01e18aead
bx ec-to-address 02825c61d123a2b08e5ca84dd8f116bb15f0477918853b8fb8f0b462d01e18aead
1NVjHS8W1prtTnm5MnW1p8HLKM6h5tKpNJ

下面我们演示生成多个子私钥、子公钥和地址,通过种子生成一个主私钥,并将主私钥保存到privateMaster文件中。

bx hd-new 5970964aae65149edb7cbb271f186d0fbfac5fac0ee25d1cf4365c4991877c1caddaad648139e986f94de0d4f3d93fbbb01d7f01e4c5199dc7eb5045e76e9c78 > privateMaster
cat privateMaster 
xprv9s21ZrQH143K2bvsGAG6rPjFR9NThnPer3w3dxVDNA8zbZGgqtj7wWzuJcWunpYGHKVwfzfLNmdh33EtLnuN4ATPLuUYAqXAUGQLey734GS

通过主私钥生成子私钥,保存文件到账户。 通过这个子私钥可以生成多个私钥序列。 例如,我们生成两个孙子私钥。

bx hd-private --hard < privateMaster >  account 
cat account 
xprv9vcwCmLc5Smrd89t18tjiHqwv2KUZCrLuEJJ5XSsR9QVXCxq4DvQiycMAKH5J6GhJv2r9i6M96awbZn9D5AyJi4jg3eKwTdikBRDAHGDpPM
bx hd-private --index 0  < account
xprv9x6oF8edQYhJ8Xh4JE6Q7bzQAjnfo5WuMA5poUDwM96f99vZVSJ463aU9xtgYEsmFQFDWpqU3gkNPt98TKiMD1xAm6FEJrgcCtNz7NEVo42
bx hd-private --index 1 < account
xprv9x6oF8edQYhJB3YcB6t1D6yWjg7jfkGjK17mUbihWdnhvDVG2iJejvXVsBMy3mhQtQkBRrQgNUmB1Uq2NwJcSKDQGXsKWMmDyjnEv7XaMbN

可以通过指定的孙子私钥生成孙子公钥。 比如我们将刚才的两个孙子私钥生成对应的两个孙子私钥。

bx hd-public --index 0 < account 
xpub6B69eeBXEvFbM1mXQFdQUjw8imdACYEkiP1RbrdYuUde1xFi2ycJdqtx1EuVzCSGNFX8QXVpEFyJrEjE38HyF4qJFGCy3TCZdX8XH39D8UW
bx hd-public --index 1 < account
xpub6B69eeBXEvFbPXd5H8R1aEvFHhxE5CzagE3NGz8K4yKgo1pQaFcuHiqyiTHygqkSN75xXirwKWBMidmN39dVMdaCqceUZbBMQxES6Ls8BYZ

然后将两个孙子的私钥长成比特币地址,最后两个地址分别是1MkgG5wMUiVcLMRTQDg9ty3kvkB9XzxhHu和1PCRCQ8JGiUg4qbq8EyCkVywfvM7fYyaFJ。

bx hd-to-ec xpub6B69eeBXEvFbM1mXQFdQUjw8imdACYEkiP1RbrdYuUde1xFi2ycJdqtx1EuVzCSGNFX8QXVpEFyJrEjE38HyF4qJFGCy3TCZdX8XH39D8UW
03735b60ced116f2c4010eb013e2b937dccfb150ea69e5adf9f4da2162d86f3645
bx ec-to-address 03735b60ced116f2c4010eb013e2b937dccfb150ea69e5adf9f4da2162d86f3645
1MkgG5wMUiVcLMRTQDg9ty3kvkB9XzxhHu
bx hd-to-ec xpub6B69eeBXEvFbPXd5H8R1aEvFHhxE5CzagE3NGz8K4yKgo1pQaFcuHiqyiTHygqkSN75xXirwKWBMidmN39dVMdaCqceUZbBMQxES6Ls8BYZ
03456019db733bb6edde2f4b4f1abdf709a69b3ba302cc44c676e60c34ed6ada6e
bx ec-to-address 03456019db733bb6edde2f4b4f1abdf709a69b3ba302cc44c676e60c34ed6ada6e
1PCRCQ8JGiUg4qbq8EyCkVywfvM7fYyaFJ

转载请注明:exchen的博客 » 比特币钱包技术原理