4. 密钥,地址,钱包,比特币 - 精通比特币笔记?

比特币的所有权由密钥、比特币地址和数字签名共同确定。密钥不会存储在比特币网络中,而是由用户自己存储,或使用管理私钥的软件钱夹来生成和管理。

比特币交易必须有效签名才能存储在块中,所以如果你有密钥,你就有相应账户中的BTC。密钥成双出现,由公钥和私钥组成。公钥相当于银行账户,私钥相当于银行卡密码。通常密钥由钱包软件管理,客户不直接使用密钥。

比特币地址一般由公钥或BTC脚本计算。

BTC私钥一般为数字,BTC系统随机随机( 由于算法的可靠性与随机性成正比,随机性必须真正随机,而不是伪随机性,因此BTC系统可以作为随机源使用 )生成,然后以私钥为输入,使用单向加密函数椭圆曲线算法生成相应的公钥,然后以公钥为输入,使用单向加密哈希函数生成地址。例如,通过公钥K获取地址A的计算方法如下:

其中,SHA256和PIPEMD160被称为双哈希或HASH160,Base58Check是具有验证功能的Base58编码,验证方法是先计算原始数据(编码前)的验证码,再比较编码后数据的验证码,同一地址有效,否则无效。在使用Base58Check编码之前,必须对数据进行处理。

处理方法为: 版本前缀 双哈希后的数据 校验码

其中,版本前缀是自定义的。例如,BTC私钥的前缀是0x80。验证码是将版本前缀与双哈希后的数据拼接起来,进行两次SHA256计算,取前4字节。获取处理后的数据,然后编码Base58,以获得最终结果。

下图为Base58Check版本前缀和Base58编码后的结果

密钥可以选择不同的编码格式。虽然编码结果不同,但密钥本身没有变化。使用哪种编码格式取决于情况。最终目的是方便人们准确使用和识别密钥。

下图是同一私钥采用不同编码方法的结果:

公钥有很多格式,但最重要的是公钥分为压缩格式和非压缩格式。带04前缀的公钥为非压缩格式的公钥,03、02开头标有压缩格式的公钥。

正如我之前所说,公钥是椭圆曲线上的一个点,由一对坐标组成(x, y)表示,加上前缀,公钥可以表示为:前缀 x y。

例如,公钥的坐标为:

以非压缩格式为例,公钥为(略长):

压缩格式的公钥可以节省一定的存储,这对每天成千上万的比特币交易记录有很大的效果。

因为椭圆曲线实际上是一个方程(y2) mod p = (x3 7)mod P, y2是y的平方,x3是x的立方),公钥是椭圆曲线上的一个点,所以公钥是方程的一个解。如果公钥只保留x,可以通过解方程获得y,压缩公钥格式有两个前缀,因为y2开放,会得到正负两个解。用二进制算术在素数p阶的有限域计算椭圆曲线时,y坐标或奇或偶,所以用02表示y为单数,03表示y为双数。

因此,压缩格式的公钥可以表示为:前缀x

以上述公钥坐标为准,y为单数,公钥K为:

我不知道你是否发现这种压缩方法有一个问题,即一个私钥可以得到两个公钥,压缩和非压缩公钥,两个公钥对应同一个私钥,合法,但比特币地址不同,这涉及到钱包软件的实现,是使用压缩公钥还是非压缩公钥,还是两者,这个问题稍后解释。

比特币钱包的主要功能是为客户保管BTC私钥。比特币钱包有很多种,比如不确定性(随机)钱包和确定性(种子)钱包。所谓不确定性,就是钱夹运行时会产生足够的私钥(比如100个私钥),每个私钥只使用一次,所以私钥管理非常麻烦。确定性钱夹有一个公共种子。单向离散方程使用种子生成私钥,种子充分回收所有私钥。因此,当钱夹建立时,可以在简单的备份下转移到钱夹之间的输入。

这里特别介绍一下助记码词汇。助记码词汇是英文单词序列,在BIP0039中指出。这些序列对应于钱夹中的种子。种子可以生成随机数,随机数生成私钥,私钥生成公钥,所以你有你想要的一切。因此,词汇的顺序是钱包的备份,钱夹可以通过助记码词重建,这比写下一串随机数要好得多。

BIP0039定义助记码和种子的创建过程如下:

另一个重要的钱包叫做HD钱夹。HD钱夹提供随机(不确定性) 钥匙有两个主要优点。

首先,树结构可以用来表达额外的组织意义。例如,当一个特定分支机构的子密钥用于接收交易收入时,另一个分支机构的子密钥用于支付费用。不同分支机构的密钥可以用于公司环境,可以控制不同的分支机构、分支机构、具体功能和会计类别。

其次,它允许用户在不浏览相应私钥的情况下建立公共密钥序列。这允许HD钱夹在不安全的服务器中或在每笔交易中发布不同的公共钥匙。公共钥匙不需要提前载入或衍生,但在服务器中没有可支付的私钥。

BIP0038提出了一个通用标准,使用密码加密私钥,并使用Base58check编码加密私钥,以便加密私钥可以安全地存储在备份介质中,并在钱夹之间安全地传输,以保持密钥在任何可能暴露的情况下的安全。该加密标准采用AES,由NIST建立,广泛应用于商业和军事数据加密。

BIP0038加密方案如下: 输入比特币私钥,通常使用WIF编码,base58chek字符串的前缀“5”。此外,BIP0038加密方案需要一个长密码作为密码,通常由多个单词或一个复杂的数字字母字符串组成。BIP0038加密方案的结果是一个由base58check编码的加密私钥,前缀为6P。如果你在6P开头看到一个密钥,这意味着密钥已经加密,并且需要一个密码来转换(解码) 任何钱夹WIF格式的私钥(前缀为5)都可以使用该密钥返回。现在很多钱夹APP都能识别BIP0038加密的私钥,会要求客户提供密码解码并导入密钥。

BIP0038最常用的密钥用例是纸钱包上的备份私钥。只要用户选择强密码,使用BIP0038加密私钥的纸钱包就非常安全,这也是一种伟大的BTC离线存储方式(也称为“冷存储”)。

P2SH函数最常见的实现用于多个签名地址脚本。顾名思义,底层脚本在消费资金之前需要多个签名来证明所有权。这类似于在银行开立联合账户。

你可以通过计算生成一个特殊的比特币地址。例如,我需要一个Hello开头的地址,你可以通过脚本生成这样的地址。但是,每个字符的计算量都会增加58倍,超过7个字符,需要特殊的硬件或采矿机器来生成。如果是8~10字符,计算量将难以想象。

相关推荐