从随机数生成私钥

生成密钥的第一步也是最重要的一步是找到一个安全的熵源或随机源。创建以太坊私钥基本上与“选择1到2256之间的数字”相同。只要不可预测和不可重复,用于选择该数字的确切方法并不重要。以太坊软件使用底层操作系统的随机数生成器生成256位熵(随机性)。通常,操作系统随机数生成器是由一个人为的随机源进行初始化的,这就是为什么可能会要求你将鼠标左右摇摆几秒钟,或者按下键盘上的随机键。

更确切地说,可能的私钥范围略小于2256。在以太坊中,私钥可以是+1+和+n-1+之间的任何数字,其中n是定义为使用的椭圆曲线的阶数的常数(n = 1.158*1077,略小于2256)(参见椭圆曲线密码学解释)。为了创建这样的密钥,我们随机选择一个256位数字并检查它是否小于+n-1+。在编程方面,这通常是通过将从密码学安全的随机源收集的更大的随机比特串提供给256位哈希算法(如Keccak-256或SHA256)(参见 [cryptographic_hash_algorithm]),产生一个256位数字。如果结果小于+n-1+,我们有一个合适的私钥。否则,我们只需再次尝试使用另一个随机数。

Warning

不要编写自己的代码来创建随机数或使用你的编程语言提供的“简单”随机数发生器。使用密码学安全的伪随机数字发生器(CSPRNG)和来自足够熵源的种子。研究你选择的随机数生成器库的文档,以确保其是密码学安全的。正确实施CSPRNG对于密钥的安全至关重要。

以下是以十六进制格式显示的随机生成的私钥(k)(256位,显示为64个十六进制数字,每个4位):

  1. f8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315
Tip

以太坊的私人密钥空间的大小(2256)是一个难以置信的大数目。十进制大约是1077。可见宇宙估计含有1080原子。