加密私钥(BIP0038)
- 私钥必须保密。私钥的机密性需求事实情况是,在实践中相当难以实现,因为该需求与同样重要的安全对象可用性相互矛盾。
- 这些矛盾的安全目标推进了便携、方便、可以被众多不同钱包和比特币客户端理解的加密私钥标准BIP0038的出台。
- BIP0038提出了一个通用标准,使用一个口令加密私钥并使用Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持密钥在任何可能被暴露情况下的安全性。这个加密标准使用了AES。
- BIP0038加密方案是:输入一个比特币私钥,通常使用WIF编码过,base58chek字符串的前缀“5”。
- 此外BIP0038加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。BIP0038加密方案的结果是一个由base58check编码过的加密私钥,前缀为6P。
- 如果你看到一个6P开头的的密钥,这就意味着该密钥是被加密过,并需要一个口令来转换(解码)该密钥回到可被用在任何钱包WIF格式的私钥(前缀为5)。
- 许多钱包APP现在能够识别BIP0038加密过的私钥,会要求用户提供口令解码并导入密钥。第三方APP,诸如非常好用基于浏览器的Bit Address,可以被用来解码BIP00038的密钥。
- 最通常使用BIP0038加密的密钥用例是纸钱包——一张纸张上备份私钥。只要用户选择了强口令,使用BIP0038加密的私钥的纸钱包就无比的安全,这也是一种很棒的比特币离线存储方式(也被称作“冷存储”)。
BIP0038加密私钥例子:
<colgroup><col style="width: 167px;"><col style="width: 381px;"></colgroup>
|
私钥(WIF)
|
5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn
|
|
密码
|
MyTestPassphrase
|
|
加密私钥(BIP0038)
|
6PRTHL6mWa48xSopbU1cKrVjpKbBZxcLRRCdctLJ3z5yxE87MobKoXdTsJ
|
P2SH (Pay-to-Script Hash)和多重签名地址
- 传统的比特币地址从数字1开头,来源于公钥,而公钥来源于私钥。虽然任何人都可以将比特币发送到一个1开头的地址,但比特币只能在通过相应的私钥签名和公钥哈希值后才能消费。
- 以数字3开头的比特币地址是P2SH地址,有时被错误的称谓多重签名或多重签名地址。
- 他们指定比特币交易中受益人作为哈希的脚本,而不是公钥的所有者。
- 这个特性在2012年1月由BIP0016引进,目前因为BIP0016提供了增加功能到地址本身的机会而被广泛的采纳。
- 不同于P2PKH交易发送资金到传统1开头的比特币地址,资金被发送到3开头的地址时,需要的不仅仅是一个公钥的哈希值,同时也需要一个私钥签名作为所有者证明。
- 在创建地址的时候,这些要求会被定义在脚本中,所有对地址的输入都会被这些要求阻隔。
- 一个P2SH地址从事务脚本中创建,它定义谁能消耗这个事务输出。
- 编码一个P2SH地址涉及使用一个在创建比特币地址用到过的双重哈希函数,并且只能应用在脚本而不是公钥:
- script hash = RIPEMD160(SHA256(script))
- 脚本哈希的结果是由Base58Check编码前缀为5的版本、编码后得到开头为3的编码地址。
- 一个P2SH地址例子:32M8ednmuyZ2zVbes4puqe44NZumgG92sM。
- 比特币几种交易标准详解 P2PKH、P2PK、MS、P2SH加密方式: https://blog.csdn.net/jerry81333/article/details/56824166