精通比特币(16):私钥

  • A+

私钥是什么?

私钥就是一个随机选出的数字而已。

比特币软件使用操作系统底层的随机数生成器来产生256位的熵(随机性)。通常情况下,操作系统随机数生成器由人工的随机源进行初始化,这就是为什么也可能需要不停晃动鼠标几秒钟。

私钥能做什么?

在比特币交易中,私钥用于生成支付比特币所必需的签名以证明对资金的所有权。

私钥必须始终保持机密,因为一旦被泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。

私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远丢失。

怎么生成私钥?

从编程的角度来看,一般是通过在一个密码学安全的随机源中取出一长串随机字节,对其使用SHA256哈希算法进行运算,这样就可以方便地产生一个256位的数字。

注意:不要自己写代码或使用你的编程语言提供的简易随机数生成器来获得一个随机数。使用密码学安全的伪随机数生成器(CSPRNG),并且需要有一个来自具有足够熵值的源的种子。使用随机数发生器的程序库时,需仔细研读其文档,以确保它是加密安全的。正确实施CSPRNG是密钥安全性的关键所在。

A.要使用比特币核心客户端生成一个新的密钥,可使用 getnewaddress 命令。
出于安全考虑,命令运行后只显示生成的公钥,而不显示私钥。如果要bitcoind显示私钥,可以使用 dumpprivkey 命令。 dumpprivkey 命令会把私钥以 Base58校验和编码格式显示,这种私钥格式被称为钱包导入格式(WIF,Wallet Import Format)

公钥

$bitcoin-cli getnewaddress

让钱包密码失效(单位秒),用于查看私钥

$bitcoin-cli walletpassphrase "此处填钱包密码" 60

$bitcoin-cli dumpprivkey XXXX(公钥)

B.还可以使用Bitcoin Explorer命令行工具。使用命令seed,ec-new和ec-to-wif生成和显示私钥:
$ bx seed | bx ec-new | bx ec-to-wif

私钥的格式

私钥的三种常见格式。不同的格式用在不同的场景下。

十六进制和原始的二进制格式用在软件的内部,很少展示给用户看。

WIF格式用在钱包之间密钥的输入和输出,也用于代表私钥的二维码(条形码)。WIF前缀是5;WIF压缩格式前缀是K或L.

不同的格式彼此之 间可以很容易地相互转换。

发表评论

您必须才能发表评论!