私钥的概念
一个私钥(Private Key)就是一串随机提取的数字,拥有和控制私钥是用户控制与比特币地址相关联的资金的根本。用户交易时想证明使用的资金是他自己的,必须使用其私钥对交易进行签名。在任何时候均必须保证私钥的私密性,将私钥透露给第三方,等同于把由它保护的比特币的控制权交给了第三方。私钥同样要进行备份、保护,防止意外丢失。如果私钥丢失,将是不可恢复的,受它保护的资金也就彻底丢失了。
比特币私钥只是一串数字。你可以利用抛硬币并用铅笔和纸张记录的方式来随机获取:抛256次硬币,你就获得了一个256位的二进制数字,这个数字可用作比特币钱包的私钥。生成私钥后,相应的公钥可以利用私钥计算得出。
从一个随机数生成私钥
要生成私钥,第一步也是最关键的一步是找到一个安全的熵源或者随机源。创建比特币密钥本质上就是“取得一个1到2256之间的数字”。如果能保证随机数获取的方式是不可预测、不可重复的,则实际采用哪种方法无关紧要。比特币软件利用操作系统底层的随机数生成器来生成256比特的熵(随机数),通常操作系统的随机数是利用某种人工随机源进行初始化的,这也是为什么生成私钥的过程中会要求你随机晃动鼠标几秒钟。对于真正的偏执狂,投256次骰子,并且用铅笔和纸张记录下来更靠谱。
更准确地说,私钥是从1到n-1之间的任意数字,其中n是一个常量(n=1.158×1077,这个数比2256略小),在比特币中这个常量是作为椭圆曲线的幂来定义的(参见本章中的“椭圆曲线加密算法解释”)。为了生成这样一个密钥,我们随机取一个256位长度的数字,并验证其是否小于n-1。以程序的术语,这通常是从一个密码学安全的随机源中抽取一长段字符串,并通过SHA256哈希算法进行计算,这样就可以很方便地生成一个256比特长度的数字。如果上述步骤结果小于n-1,我们就得到了一个合适的私钥。否则,我们需要重复以上步骤,直到最终得到一个合适的私钥。