如何生成自己的比特币私钥?

在加密货币中,私钥允许用户访问其钱包。持有私钥的人完全控制该钱包中的硬币。出于这个原因,你应该保守秘密。如果您真的想自己生成密钥,那么以安全的方式生成密钥是有意义的。

在这里,我将介绍私钥,并向您展示如何使用各种加密函数生成自己的密钥。我将在Python中提供算法和代码的描述。

需要生成私钥吗?

大多数时候不用。例如,如果您使用Coinbase或Blockchain.info等网络钱包,他们会为您创建和管理私钥。交易所也是如此。

移动和桌面钱包通常也会为您生成私钥,但他们可以选择使用您自己的私钥创建钱包。

那么为什么要生成呢?以下是我的原因:

你想确保没有人知道密钥 您只想了解有关加密和随机数生成(RNG)的更多信息

什么是私钥?

形式上,比特币(以及许多其他加密货币)的私钥是一系列32字节。现在,有很多方法可以记录这些字节。它可以是256个零和0(32 * 8 = 256)或100个骰子的字符串。它可以是二进制字符串,Base64字符串,WIF密钥,助记符短语,或最后是十六进制字符串。出于我们的目的,我们将使用64个字符长的十六进制字符串。

为什么正好是32字节?好问题!您可以看到,要从私有密钥创建公钥,比特币使用ECDSA或椭圆曲线数字签名算法。更具体地说,它使用一个称为secp256k1的特定曲线。

现在,该曲线具有256位的量级,以256位作为输入,并输出256位整数。256位正好是32个字节。因此,换句话说,我们需要32字节的数据来提供给这种曲线算法。

私钥还有一个额外的要求。因为我们使用ECDSA,所以关键应该是正数,并且应该小于曲线的顺序。secp256k1的顺序FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141非常大:几乎任何32字节的数字都会比它小。

那么,我们如何生成一个32字节的整数?首先想到的是只使用您选择的语言的RNG库。Python甚至提供了一种生成足够位的方式:

import random
bits = random.getrandbits(256)
# 30848827712021293731208415302456569301499384654877289245795786476741155372082
bits_hex = hex(bits)
# 0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32
private_key = bits_hex[2:]
# 4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32

看起来很好,但实际上,它不是。您看,普通的RNG库不适用于加密,因为它们不是很安全。它们根据种子生成数字,默认情况下,种子是当前时间。这样,如果你大致知道我上面生成的那些位,你需要做的就是暴力破解一些变种。

生成私钥时,您希望非常安全。请记住,如果有人学习私钥,他们可以轻松地从相应的钱包中窃取所有硬币,而你没有机会将其取回。

所以让我们尝试更安全地做到这一点。

密码学上强大的RNG

除了标准的RNG方法,编程语言通常还提供专门用于加密操作的RNG。这种方法通常更加安全,因为它直接从操作系统中提取熵。这种RNG的结果很难再现。你不能通过知道生成时间或种子来做到这一点,因为没有种子。好吧,至少用户不输入种子 – 相反,它是由程序创建的。

在Python中,secrets模块中实现了加密强RNG 。让我们修改上面的代码,使私钥生成安全!

import secrets
bits = secrets.randbits(256)
# 46518555179467323509970270980993648640987722172281263586388328188640792550961
bits_hex = hex(bits)
# 0x66d891b5ed7f51e5044be6a7ebe4e2eae32b960f5aa0883f7cc0ce4fd6921e31
private_key = bits_hex[2:]
# 66d891b5ed7f51e5044be6a7ebe4e2eae32b960f5aa0883f7cc0ce4fd6921e31

这是惊人的。我敢打赌,即使访问我的电脑,你也无法重现这一点。但我们可以更深入了吗?

专业网站

有些网站会为您生成随机数。我们在这里只考虑两个。一个是random.org,一个众所周知的通用随机数发生器。另一个是bitaddress.org,专门用于比特币私钥生成。

random.org可以帮助我们生成密钥吗?当然,因为他们有生成随机字节的服务。但是这里出现了两个问题。Random.org声称是一个真正的随机发生器,但你能相信吗?你能确定它确实是随机的吗?你能确定所有者不记录所有代的结果,特别是那些看起来像私钥的结果吗?答案取决于你。哦,你不能在本地运行它,这是一个额外的问题。此方法不是100%安全。

现在,bitaddress.org是一个完全不同的故事。它是开源的,所以你可以看到它的内幕。它是客户端,因此即使没有Internet连接,您也可以下载并在本地运行它。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!