区块链-高级密钥和地址

目录:https://blog.csdn.net/qq_40452317/article/details/89646633

摘自《精通比特币》

 1、加密私钥(BIP0038)

私钥必须保密。私钥的机密性需求情况是,在实践中相当难以实现,因为该需求与同样重要的安全对象可用性相互矛盾。当你需要为了避免私钥丢失而存储备份时,会发现维护私钥私密性是一件相当困难的事情。

通过密码加密存有私钥的钱包可能要安全一点,但那个钱包也需要备份。有时,例如用户因为要升级或重装钱包软件,而需要把密钥从一个钱包转移到另一个。私钥备份也可能需要存储在纸张上或者外部存储介质里,比如U盘。但如果一旦备份文件失窃或丢失呢?这些矛盾的安全目标推进了便携、方便、可以被众多不同钱包和比特币客户端理解的加密私钥标准BIP0038的出台。

BIP0038 提出了一个通用标准,使用一个口令加密私钥并使用 Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持密钥在任何可能被暴露情况下的安全性。这个加密标准使用了AES,这个标准由 NIST 建立,并广泛应用于商业和军事应用的数据加密。

IP0038 加密方案是:输入一个比特币私钥,通常使用WIF编码过,base58chek 字符串的前缀“5”。此外 BIP0038 加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。BIP0038 加密方案的结果是一个由 base58check 编码过的加密私钥,前缀为 6P。如果你看到一个 6P 开头的的密钥, 这就意味着该密钥是被加密过,并需要一个口令来转换(解码)该密钥回到可被用在任何钱包 WIF 格式的私钥(前缀为 5)。许多钱包 APP 现在能够识别 BIP0038

加密过的私钥,会要求用户提供口令解码并导入密钥。第三方APP, 诸如非常好用基于浏览器的 BitAddress , 可以被用来解码 BIP00038 的密钥。

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

2、P2SH (Pay-to-Script Hash)和多重签名地址

正如我们所知,传统的比特币地址从数字1开头,来源于公钥,而公钥来源于私钥。虽然任何人都可以将比特币发送到 一个 1 开头的地址,但比特币只能在通 过相应的私钥签名和公钥哈希值后才能消费。

以数字3开头的比特币地址是 P2SH 地址,有时被错误的称谓多重签名或多重签 名地址。他们指定比特币交易中受益人为哈希的脚本,而不是公钥的所有者。这 个特性在 2012 年 1 月由 BIP0016 引进,目前因为 BIP0016 提供了增加功能到地址 本身的机会而被广泛的采纳。不同于 P2PKH 交易发送资金到传统 1 开头的比特币 地址,资金被发送到 3 开头的地址时,需要的不仅仅是一个公钥的哈希值和一个 私钥签名作为所有者证明。在创建地址的时候,这些要求会被指定在脚本中,所 有对地址的输入都会被这些要求阻隔。

一个 P2SH 地址从交易脚本中创建,它定义谁能消耗这个交易输出(后面“P2SH (Pay-to-Script-Hash)”一节对此有 详细的介绍)。编码一个 P2SH 地址涉及使用 一个在创建比特币地址用到过的双重哈希函数,并且只能应用在脚本而不是公钥:

                                                 scripthash=RIPEMD160(SHA256(script))

产生的脚本哈希由 Base58Check 编码前缀为 5 的版本、编码后得到开头为 3 的编 码地址。一个 P2SH 地址例子是 3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM。可以使 用 BitcoinExplorer 命令脚本编码获得,比如 sha256,ripemd160,and base58check-encode。

3、多重签名地址和 P2SH

目前,P2SH 函数最常见的实现是多重签名地址脚本。顾名思义,底层脚本需要多 个签名来证明所有权,此后才能消费资金。设计比特币多重签名特性是需要从总 共 N 个密钥中需要 M 个签名(也被称为“阈值”),被称为 M-N 多签名,其 中 M 是等于或小于 N。这类似于传统的银行中的一个“联合账户”,其 中任何一方配偶可以单独签单消费。或就像 Bob 雇佣的网页设计师 Gopesh, 创立一个网站,可能为他的业务需要一个 2-3 的多签名地址,确保除非至少两个业务合作伙伴签署签名交易才可以进行支付消费。

4、比特币靓号地址

靓号地址包含了人类可读信息的有效比特币地址。例如, 1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33 就是包含了 Base-58 字母 love 的。靓号 地址需要生成并通过数十亿的候选私钥测试,直到一个私钥能生成具有所需图案的比特币地址。虽然有一些优化过的靓号生成算法,该方法必须涉及随机上选择 一个私钥,生成公钥,再生成比特币地址,并检查是否与所要的靓号图案相匹配, 重复数十亿次,直到找到一个匹配。

一旦找到一个匹配所要图案的靓号地址,来自这个靓号地址的私钥可以和其他地 址相同的方式被拥有者消费比特币。靓号地址不比其他地址具有更多或更少的安 全性。它们依靠和其他地址相同的 ECC 和 SHA。你无法比任何别的地址更容易的 获得一个靓号图案开头的地址的私钥。

Eugenia,一位在菲律宾工作的儿童慈善总监。我们假设 Eugenia 组织了一场比特币募捐活动,并希望使用靓号比特币地址来宣传这个募捐 活动。 Eugenia将会创造一个以1Kids开头的靓号地址来促进儿童慈善募捐的活动。 让我们看看这个靓号地址如何被创建,这个靓号地址对 Eugenia 慈善募捐的安全性又意味着什么。

1、生成靓号地址

认识到比特币地址不过是由 Base58 字母代表的一个数字是非常重 要的。搜索“1kids”开头的图案我们会发 现从 1Kids11111111111111111111111111111 到 1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz 的地 址。这些以“1kid”开头的地址范围中大约有 58 的 29 次方地址(1.4*10^51))。 

我们把“1Kids”这个前缀当作数字,我们可以看看比特币地址中这个前缀出现的频 率。如果是一台普通性能的桌面电脑, 没有任何特殊的硬件,可以每秒搜索大约 10 万个密钥。

正如你所见,Eugenia 将不会很快地创建出以“1KidsCharity”开头的 靓号地址,即使她有数千台的电脑同时进行运算。每增加一个字符就会增加 58 倍的计算难度。超过七个字符的图案通常需要专用的硬件才能被找出,譬如用户 定制的具有多个图形处理单元(GPU)的台式机。那些通常是无法继续在比特币 挖矿中盈利的钻机,被重新赋予了寻找靓号地址的任务。用 GPU 系统搜索靓号 的速度比用通用 CPU 要快很多个量级。

另一种寻找靓号地址的方法是将工作外包给一个矿池里的靓号矿工们,如靓号矿 池中的矿池。一个矿池是一种允许那些 GPU 硬件通过为他人寻找靓号地址来获 得比特币的服务。对小额的账单,Eugenia 可以将搜索 7 位字符图案的靓号地址的 工作外包,在几个小时内就可以得到结果,而不必用一个 CPU 搜索上几个月才得 到结果。

生成一个靓号地址是一项通过蛮力的过程:尝试一个随机密钥,检查生成的地址 是否和所需的图案相匹配,重复这个过程直到成功找到为止。

2、靓号地址安全性

靓号地址既可以增加、也可以削弱安全措施,它们着实是一把双刃剑。用于改善 安全性时,一个独特的地址使对手难以使用他们自己的地址替代你的地址,以欺 骗你的顾客支付他们的账单。不幸的是,靓号地址也可能使得任何人都能创建一 个类似于随机地址的地址,甚至另一个靓号地址,从而欺骗你的客户。

Eugenia 可以让捐款人捐款到她宣布的一个随机生成地址(例如: 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy)。 或者她可以生成一个以“1Kids”开头 的靓号地址以显得更独特。

在这两种情况下,使用单一固定地址(而不是每比捐款用一个独立的动态地址) 的风险之一是小偷有可能会黑进你的网站,用他自己的地址取代你的地址,从而 将捐赠转移给他自己。如果你在不同的地方公布了你的捐款地址,你的用户可以 在付款之前用自己眼睛检查以确保这个地址跟在你的网站、邮件和传单上看到的 地址是同一个。

在随机地址 1j7mdg5rbqyuhenydx39wvwk7fslpeoxzy 的情况下,普 通用户可能会只检查头几个字符“1j7mdg”,就认为地址匹配。使用靓号地址生成 器,那些想通过替换类似地址来盗窃的人可以快速生成与前几个字符相匹配的地址。

那靓号地址会不会增加安全性?如果 Eugenia 生成 1Kids33q44erFfpeXrmDSz7zEqG2FesZEN 的靓号地址,用户可能看到靓号图案的字 母和一些字符在上面,例如在地址部分中注明了 1Kids33。这样就会迫使攻击者生 成至少 6 个字母相匹 配的的靓号地址(比之前多 2 个字符),就要花费比 Eugenia 多 3364 倍的努力。

本质上,Eugenia 付出的努力(或者靓号池付出的)迫使攻击者不得不生成更长的靓号图案。如果 Eugenia 花钱请矿池生成 8 个字符的靓号地址,攻击者将会被逼迫到10字符的境地,那将是个人电脑,甚至昂贵自定义靓号挖掘机或靓号池也无法生成。对 Eugenia 来说可承担的起支出,对攻击者来说则变成了无法承担支出,特别是如果欺诈的潜在回报不足以支付生成靓号地址所 需的费用。

4、纸钱包

纸钱包是打印在纸张上的比特币私钥。有时纸钱包为了方便起见也包括对应的比 特币地址,但这并不是必要的,因为地址可以从私钥中导出。纸钱包是一个非常 有效的建立备份或者线下存储比特币(即冷存储)的方式。作为备份机制,一个 纸钱包可以提供安全性,以防在电脑硬盘损坏、失窃或意外删除的情况下造成密 钥的的丢失。作为一个冷存储的机制,如果纸钱包密钥在线下生成并永久不在电 脑系统中存储,他们在应对黑客攻击,键盘记录器,或其他在线电脑威胁更有安全性。

纸钱包有许多不同的形状,大小,和外观设计,但非常基本的原则是一个密钥和 一个地址打印在纸张上。表 4-14 展现了纸钱包最基本的形式。

通过使用工具,就可以很容易地生成纸钱包,譬如使用 bitaddress.org 网站上的客 户端 Javascript 生成器。这个页面包含所有生成密钥和纸钱包所必须代码,甚至在 完全失去网络连接的情况下,也可以生成密钥和纸钱包。若要使用它,先将 HTML
页面保存在本地磁盘或外部 U 盘。

从 Internet 网络断开,从浏览 器中打开文件。更方便的,使用一个原始操作系统启动电脑,比如一 个光盘启动 的 Linux 系统。任何在脱机情况下使用这个工具所生成的密钥,都可以通过 USB 线在本地打印机上打印出 来,从而制造了密钥只存在纸张上而从未存储在在线系 统上的纸钱包。将这些纸钱包放置在防火保险柜内,发送比特币到 对应的比特币 地址上,从而实现了一个简单但非常有效的冷存储解决方案。图展示了通过 bitaddress.org 生成的纸钱包。

这个简单的纸钱包系统的不足之处是那些被打印下来的密钥容易被盗窃。一个能 够接近这些纸的小偷只需偷走纸或者用把拍摄纸上的密钥,就能控制被这些密钥 锁定的比特币。一个更复杂的纸钱包存储系统使用 BIP0038 加密的私钥。打印在 纸钱包上的这些私钥被其所有者记住的一个口令保护起来。没有口令,这些被加 密过的密钥也是毫无用处的。但它们仍旧优于用口令保护,因为这些密钥从没有 在线过,并且必须从保险箱或者其他物理的安全存储中导出。图 展示了通过 bitaddress.org 生成的加密纸钱包。

警告虽然你可以多次存款到纸钱包中,但是你最好一次性提取里面所有的资金。因为如果你提取的金额少于其中的总金额的话,有些钱包可能会 生成一个找零地址。

并且,你所用的电脑可能被病毒感染,那么就有可能泄露私钥。一 次性提走所有余款可以减少私钥泄露的风险,如果你所需的金额比较少, 那么请把余额发送到相同交易的一个新的纸钱包里。

纸钱包有许多设计和大小,并有许多不同的特性。有些作为礼物送给他人,有季 节性的主题,像圣诞节和新年主题。另 外一些则是设计保存在银行金库或通过某 种方式隐藏私钥的保险箱内,或者用不透明的刮刮贴,或者折叠和防篡改的铝箔 胶粘密封。图展示了几个不同安全和备份功能的纸钱包的例子。
 

通过 bitcoinpaperwallet.com 生成的、私钥被密封住的纸钱包, 其他设计有密钥和地址的额外副本,类似于票根形式的可以拆卸存根,让你可以存储多个 副本以防火灾、洪水或其他自然灾害。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值