深入理解比特币系列(16): 密码学基础第二部分(高级密钥及地址)

前文我们介绍了比特币涉及的密码学知识中的公钥加密、私钥、公钥及比特币地址。本文我们继续了解一下比特币中高级形式的密钥及地址,如加密私钥(encrypted private keys)、脚本(script)和多重签名地址(multisignature addresses)和纸钱包(paper wallet)。

加密私钥(BIP0038)

BIP0038提出了一个通用标准,使用一个口令加密私钥并使用Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持密钥在任何可能被暴露情况下的安全性。

BIP0038加密方案是:输入一个比特币私钥,通常使用WIF编码过,base58chek字符串的前缀“5”。此外BIP0038加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。BIP0038加密方案的结果是一个由base58check编码过的加密私钥,前缀为6P。

最通常使用BIP0038加密的密钥用例是纸钱包——一张纸张上备份私钥。只要用户选择了强口令,使用BIP0038加密的私钥的纸钱包就无比的安全,这也是一种很棒的比特币离线存储方式(也被称作“冷存储”)。

P2SH和多重签名地址

不同于比特币地址以1开头,P2SH地址以数字3开头。他们指定交易受益人为哈希脚本,而不是公钥的所有者。不同于以1开头的比特币地址交易,以3开头的脚本交易时,需要的不仅仅是一个公钥的哈希值,同时也需要一个私钥签名作为所有者证明。

script hash = RIPEMD160(SHA256(script))

脚本哈希与比特币地址的计算方法类似,都是通过上述Hash160运算获得。其P2SH地址是以3为开头的Base58Check编码地址,如:

3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM

目前,P2SH函数最常见的实现是用于多重签名地址脚本。顾名思义,脚本需要多个签名来证明所有权,此后才能消费资金。如,M-N多签名(M等于或小于N)需要从总共N个密钥中获得M个签名。

纸钱包

纸钱包是打印在纸张上的比特币私钥。有时纸钱包为了方便起见也包括对应的比特币地址。

纸钱包是一个非常有效的建立备份或者线下存储比特币(即冷钱包)的方式。作为备份机制,纸钱包可以提供安全性,以防在电脑硬盘损坏、失窃或意外删除的情况下造成密钥的丢失。同时,纸钱包在应对黑客攻击,键盘记录器,或在线电脑欺骗方面更具有安全性。

通过在线纸钱包工具生成的纸钱包示例如下:

mbc2 0408

还可以生成加密私钥(BIP0038):

mbc2 0409

这里还有一些其他的纸钱包示例:

mbc2 0410

mbc2 0412