比特币的地址,密钥,钱包之间的关系

2018-11-28 11:07 栏目:经验之谈 来源: 查看()
简介

目前,市场上的大多数区块链技术都是肤浅的,混合了许多商业元素。难以同时触及技术的核心技术。两天前,有些朋友在小组中询问并决定翻译Andreas M. Antonopoulos的经典作品。英文名称:《 Mastering Bitcoin-Unlocking Digital Cryptocurrencies》,中文名称《精通比特币》,只有翻译完第一部分后,才在互联网上找到翻译版本。

在接下来的时间里,我们将与大家一起探索比特币技术。我们将尝试介绍一系列文章,以探讨比特币和区块链的技术性质。今天的主要内容包括:比特币地址,比特币密钥使用,比特硬币钱包和三者之间的关系。


关键

私钥

比特币上下文中的私钥是一个允许比特币使用的密码。每个比特币钱包都包含一个或多个私钥,这些私钥保存在钱包文件中。私钥在数学上与为钱包生成的所有比特币地址相关。 -wiki

私钥是随机选择的数字。比特币地址中所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币以证明资金所有权所必需的签名。私钥必须始终保密,因为一旦泄露给第三方,私钥保护下的比特币也会被移交。还必须备份私钥以防止意外丢失,因为私钥一旦丢失就很难恢复,并且它保护的比特币将永远丢失。

比特币私钥只是一个数字。您可以使用硬币,铅笔和纸张随机生成您的私钥:硬币的256倍,用纸和笔记录正面和背面并转换为0和1,随机获得的256位二进制数可以用作比特币钱包的私钥。 。私钥可以进一步生成公钥。

生成密钥的第一步也是最重要的一步是找到足够安全的熵源,即随机源。生成比特币私钥与“选择1到2256之间的数字”基本相同。只要选择的结果是不可预测的或不可重复的,选择数字的具体方法就不重要了。比特币软件使用操作系统的基础随机数生成器生成256位熵(随机性)。通常,操作系统随机数生成器由手动随机源初始化,或者可能需要通过摇动鼠标几秒钟来初始化。对于真正的偏执狂,你可以使用掷骰子的方法并用铅笔和纸记录。

·比特币私钥空间的大小为22562256,这是一个非常大的数字。在十进制表示法中,它大约是10771077,可见宇宙估计只包含1080个原子。
·以Base58校验和编码格式显示私钥。此私钥格式称为钱包导入格式(WIF,钱包导入格式)。

公钥

非对称密钥通常由一对密码组成,一个是私钥,另一个是公钥,公钥类似于银行帐户,私钥类似于控制帐户的PIN或签名。校验。比特币用户很少直接看到数字密钥。通常,它们存储在钱包文件中,并由比特币钱包软件管理。

公钥由私钥生成,并且生成方法根据所选算法(RSA,DSA,EIGamal等)而不同。比特币使用椭圆曲线算法。可以通过椭圆曲线算法从私钥计算公钥,这是不可逆过程:K=k * G.其中k是私钥,G是称为生成点的常量点,K是生成的公钥。它的逆操作,称为“离散对数分解”——很难知道公钥K找到私钥k——,就像测试所有可能的k值,即暴力破解一样。为了更好地理解私钥和公钥之间的对应关系
椭圆曲线密码术是基于离散对数问题的非对称(或公钥)密码术,可以通过在椭圆曲线上添加或乘以点来表示。

下面我们举一个例子,以下是我们高中最常见的椭圆曲线

比特币的地址,密钥,钱包之间的关系

比特币的地址,密钥,钱包之间的关系

假设我们设置p=17,即在x=17,y=17的范围内找到与上述公式匹配的所有值。当然,这些值将落在曲线上。

比特币的地址,密钥,钱包之间的关系

这些点实际上构成了一个组GROUP,这个组的某个特征,所以我不会在这里讨论它,但是提到组中有某些操作,并且还有加法乘法等,但是我们通常的认知加减。乘法和除法是不同的。

这部分是知识。如果你有浓厚的兴趣,你可以私下信任我。因为它过于学术化,所以指出来。

我们来看一个乘法的例子。乘以下面的整数点。我们的目标是找到生成的点G的多个kG。即将G加到k次。在椭圆曲线中,点的相加等效于找到从点切线与曲线相交的另一个点,然后映射到x轴。

比特币的地址,密钥,钱包之间的关系

如果我们已经知道了G和k,我们可以很容易地计算kG,但是如果我们知道KG,那么很难计算k和G.实际上,k是私钥,kG是公钥,私钥可以是用于计算公钥。密钥,但公钥计算理论上不能导出私钥。

注意:很多人会想,根据上面的理论,我们计算公钥是一个点,但我们通常看到的公钥是一串数字,实际上,公钥是X后跟Y.

例如,以下(实际上,安全性值非常大,前缀04表示未压缩格式的公钥)
x=F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y=07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
然后公钥是:K=x + y

地址

在比特币交易的支付链接中,收件人的公钥由其数字指纹表示,称为比特币地址,就像支票上的支付对象的名称(即“收款人”)。通常,比特币地址由公钥生成并对应于该公钥。地址和公钥之间的关系,如下图所示:

比特币的地址,密钥,钱包之间的关系

javascript代码实现如下:在上图中,我提到了Base58Check算法,但在算法实现中我使用了base58encode。两者有什么区别?答案将在下面透露。

比特币的地址,密钥,钱包之间的关系

编码从Base64到Base58

为了更简洁和方便地表示长串数字,许多计算机系统使用大于十进制的表示,其由数字和字母组成。例如,传统的十进制计数系统使用0-9十位数字,而十六进制系统使用额外的A-F六位字母。对于相同的数字,其十六进制表示将短于十进制表示。此外,Base64使用26个小写字母,26个大写字母,10个数字和两个符号(例如“+”和“/”),用于在基于文本的介质(如电子邮件)中传输二进制数据。 Base64通常用于编码消息中的附件。 Base58是比特币和其他加密货币中使用的基于文本的二进制编码格式。这种编码格式不仅可以实现数据压缩,保持易读性,而且还具有错误诊断功能。 Base58是Base64编码格式的子集,它也使用大写和小写字母和10位数字,但丢弃了一些易于误读和混淆特定字体的字符。具体来说,Base 58在Base64中不包含0(数字0),O(上部字母o),l(下部字母L),I(大写字母i)以及“+”和“/”字符。简而言之,Base58由大写和小写字母组成,数字不包括(0,O,l,I)。

比特币Base58 Alphabet

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

代码从Base58到Base58Check

Base58Check是比特币中常用的Base58编码格式。它添加了一个错误检查代码来检查数据转录中的错误。校验码长4个字节,并在要编码的数据之后添加。校验码是从要编码的数据的哈希值获得的,因此它可以用于检测和避免在转录和输入中产生的错误。使用Base58check编码格式时,编码软件会计算原始数据的校验和,并将其与结果数据附带的校验和进行比较。如果两者不匹配,则表示存在错误,则Base58Check格式的数据无效。例如,钱包不会将错误的比特币地址视为有效地址,否则此类错误将导致资金损失。

为了使用Base58Check编码格式对数据(数字)进行编码,我们首先向数据添加一个称为“版本字节”的前缀,用于指定需要编码的数据类型。例如,比特币地址前缀为0(十六进制为0x00),私钥编码为前缀128(十六进制为0x80)。通用版本的前缀。

比特币的地址,密钥,钱包之间的关系

钱包

比特币所有权是通过数字密钥,比特币地址和数字签名建立的。数字密钥实际上不存储在网络中,而是由用户生成并存储在称为钱包的文件或简单数据库中。存储在用户钱包中的数字密钥完全独立于比特币协议,并且可以由用户的钱包软件生成和管理,而无需区块链或网络连接。

钱包是私钥的容器,通常在有序文件或简单数据库中实现。制作私钥的另一种方法是确定性密钥生成。在这里,您可以使用原始私钥通过单向散列函数生成每个新私钥,并按顺序连接新生成的密钥。只要您可以重新创建此序列,您只需要第一个私钥(称为种子,主私钥)来生成它们。

比特币钱包只包含私钥而不是比特币。每个用户都有一个带有多个私钥的钱包。钱包包含一对私钥和公钥。用户使用这些私钥对事务进行签名,证明他们具有事务的输出(即其中的比特币)。比特币以交易输出的形式存储在区块链中(通常表示为vout或txout)。

非确定性钱包

钱包只是随机生成的私钥的集合。这种类型的钱包被称为零类型的非确定性钱包。例如,比特币核心客户端预先生成100个随机私钥,从一开始就生成足够的私钥,并且每个密钥只使用一次。这种类型的钱包有一个绰号“Just a Bunch Of Keys”,简称为JBOK。这些钱包现在正被确定性钱包取代,因为它们难以管理,备份和导入。随机密钥的缺点是,如果生成很多,则必须保存所有副本。这意味着必须经常备份钱包。必须备份每个密钥,否则一旦钱包无法访问,钱包控制的钱将丢失。这种情况直接与避免地址重用的原则相冲突。——每个比特币地址只能使用一次。地址通过将多个交易与另一方的地址相关联来减少隐私。类型0非确定性钱包不是钱包的好选择,特别是如果您不想重复使用地址并创建太多私钥并保存它们。虽然比特币核心客户包括0型钱包,但比特币的核心开发者不希望鼓励每个人使用它。下图显示了一个非确定性钱包,其中包含一组松散结构的随机键。

比特币的地址,密钥,钱包之间的关系

确定性钱包

这是一个确定性钱包的例子:助记词汇钱包
助记词汇表是用作确定钱包的种子的随机数量的英语单词序列表示(代码)。单词序列足以重新创建种子并从种子重新创建钱包和所有私钥。首次创建钱包时,具有运行确定性钱包钱包的助记符代码的应用程序将向用户显示12到24个单词的序列。单词的顺序是钱包的备份。它还可用于恢复和重新创建应用程序的相同或兼容钱包的密钥。助记符代码允许用户更容易地复制钱包,因为与随机数字顺序相比,它们可以很容易地被读出和正确复制。

总结

本文介绍了比特币地址,比特币密钥的原理,比特币钱包以及这三种关系是如何存在的。

声明

本文的70%是翻译组合,30%是原创的,文中提到了很多参考文献。《掌握比特币 - 解锁数字隐秘密码》
d3d3LmVoY29vLmNvbSwg5L2c6ICFOmVoY29v(BASE64编码)

资料来源:Ehcoo

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发