4.2 热储存与冷储存
如我们所看到的,把比特币放在你的个人电脑里就像把钱放在钱包里带着,这叫“热储存”。这很方便但很不安全。而 另一方面,“冷储存”是离线的,把比特币锁在其他地方。冷储存不联入互联网,是封存起来的。所以相对安全和保险,但是很显然不方便。这就像你带着一些零钱 出去,但是把终生积蓄锁在保险箱里的道理一样。
要分开热储存和冷储存,你也必须要用不同的私钥,否则如果热储存被人破坏了,冷储存也会处于危险之中。你也需要把币在两边转来转去,这样两边都需要知道对方的地址或公钥。
因为冷储存是离线的,所以热储存与冷储存无法通过网络相连,但其实冷储存不需要上线就可以接收比特币——热 储存端知道冷储存的地址,所以它随时可以给冷储存转账。当你觉得你的钱包里的钱太多的时候,你可以把一部分的币转到冷储存,但不需要让冷储存上线而暴露自 己。当然,只要冷储存上线,就可以接收到区块链的转账信息,然后可以随意处理这些比特币。
但管理冷储存有一个小问题:一方面,为了私密性和其他考虑,我们希望使用不同的地址(这些地址有不同的密钥)收款。所以我们把比特币从热储存转到冷储存的时候,要用一个新的冷储存地址。但是由于冷储存不上线,所以热存储端必须要能找到这样的地址。
一个直接的解决方案是让冷储存一次性生成一批地址,然后把地址列表发送给热储存,热储存可以依次使用这些地址,当然,这个方法的缺陷是为了传送地址,我们不得不经常让冷储存端上线。
分层确定性钱包
一个比较有效的解决办法是使用一个分层确定性钱包(hierarchical deterministic wallet)。这个方法可以让冷储存端制造无限制的地址数量,然后通过一个短暂的、一次性的交换,让热储存端知晓所有地址。但这需要使用密码学的技巧。
回想一下,我们在第1章谈到密钥生成和电子签名时,我们使用了“generateKeys”来生成一个公钥 (也就是地址)和一个私钥。在分层确定性钱包里,生成密钥的方式不太一样。不同于生成一个单一地址,我们生成一个被称为“地址生成信息”的东西;我们也不 只生成私钥,而是生成“私钥生成信息”。有了地址生成信息,我们就可以生成一系列地址。我们把地址生成信息和一个整数i作为地址生成函数的输入参数,就生 成了序列里的第i个地址。同样,我们用私钥生成信息来生成一系列私钥。
密码学的神奇之处在于:对于每个i而言,第i个地址和第i个私钥相匹配——换言之,第i个私钥控制第i个地址的比特币,就好像这是用经典办法产生的。这样一来,我们就有一长串配对的公钥和密钥。
密码学的另一个技术优点是安全性——地址生成信息并不会泄露关于私钥本身的任何信息。这意味着你可以放心地把地址生成信息给任何人,他就可以用它来生成第i个密钥。
并不是所有的电子签名算法目前都可用于生成分层确定性密钥。比特币使用的电子签名算法ECDSA支持分层密钥,让我们可以使用这个技巧。即冷储存端生成任意多个密钥,热储存端生成相应的地址,见图4.2。
图4.2 分层确定性钱包示意
注:冷储存端生成和保存私钥生成信息和地址生成信息,然后将地址生成信息一次性转给热储存端。当热储存端 要给冷储存端转账时,就按次序生成新的地址。冷储存端上线后,也会按顺序生成地址,然后查收相应地址收到的款项,直到某一地址没有收款位置。如果冷储存端 需要向热储存端转账,它就会按顺序生成私钥序列。
ECDSA的工作机制如下:通常一个ECDSA私钥是一个随机数x,其对应的公钥是gx。为了生成分层确定性密钥,我们需要另外两个随机数k和y。
私钥生成信息:k,x,y
第i个私钥:x=y+H(k‖i)
地址生成信息:k,gy
第i个公钥:gxi=gH(k‖i)·gy
第i个地址:H(gxi)
分层确定性钱包有我们需要的所有特性:两方都可以生成公钥/私钥序列,而且这些公钥/私钥相互配对(因为与私钥x对应的公钥就是gx)。 而且,这种方法还具有另外一种我们尚未提及的特性:当你向外提供这些公钥时,这些公钥之间没有联系,也就是说,别人无法断定这些公钥来自同一个钱包。稻草 人方案(冷储存端生成大量的地址)也具有这种特性,但我们需要小心地保护这些地址,因为这些地址事实上并不是独立生成的。这种特性对于保护隐私和实现匿名 是至关重要的,我们将在第6章展开讨论。
分层确定性钱包有两种不同的安全性,热储存端的安全性较低。如果热储存受到损害,那么上文提到的非相关性就 不复存在,但这种情况下,私钥(以及比特币)仍然是安全的。通常,分层确定性钱包支持任意多个安全等级——这也是“分层”的由来——虽然,我们还没有讨论 细节。这种安排非常有用,例如,当一家公司内部存在多种授权级别时,就需要这种特性。
现在,我们讨论一下冷储存如何保存信息(私钥或私钥生成信息)。第一种方式是将信息保存在某个设备(例如笔 记本电脑、手机或平板电脑,或U盘)中,然后将这个设备好好保管,最好是让这些设备断开网络,并将其锁起来,这样,如果有人想盗取信息,那么他首先需要进 入这些设备的保存处。
大脑钱包
第二种方法我们称之为大脑钱包(brain walle)。这种方式下,你通过一个密码就可以支取比特币。大脑钱包无须使用硬件、纸张或者其他长期储存介质。大脑钱包在物理安全性较差的情况下(例如跨国出差、旅行时)非常有用。
大脑钱包的主要原理是用一个可预测的算法把一个口令变成一对公钥/私钥。例如,你可以选择一个哈希算法将口 令转译成一个私钥。在给定私钥的情况下,可以用同样的方法得到私钥。进一步地,结合前文所提到的分层确定性钱包技术,你可以根据口令生成一整套地址和私 钥,从而实现钱包的完整功能。
但是,如果一个黑客猜到你的口令的话,他还是可以偷走你大脑钱包里的所有私钥。在电脑安全领域里,我们通常 假定黑客知道你生成密钥的步骤,黑客不知道的只是你的口令。所以黑客可以尝试使用不同的口令,生成地址,并在区块链中查看这些地址上是否还存在未被使用的 比特币,一旦发现比特币,黑客就可以迅速把这些比特币转给自己。黑客可能永远都不知道(或者根本不关心)这些比特币属于谁,这类攻击也不需要入侵任何设 备,猜口令不针对任何人,所以也不会留下任何痕迹。
这种方法与尝试破解电子邮箱密码的方法不同,邮件服务器通常对密码试错有一定的次数或频率限制(被称为在线 猜测),但是对于大脑钱包而言,黑客可以下载一堆未被使用的比特币的地址,然后用电脑程序去慢慢地试错,黑客都不需要知道大脑钱包的地址,这被称为离线猜 测或者密码破解。相应地,设置口令的难度大大增加了,又要容易记,又要不容易被猜中。一种安全的方法是使用自动程序生成一个80位的数字,然后将其转换成 口令。
生成一个可记忆的口令
有一种简便的方法可以生成口令:从最常用的10 000英语词汇中,随机选择6个词,从而生成大致80位长度的字节[6×log2(10 000)大致等于80]。很多人发现这个方法比随机取字母容易记忆,因为这种方法生成的口令通常是下面这样子的:
worn till alloy focusing okay reducing
earth dutch fake tired dot occasions
在实际操作中,我们可以让程序生成密钥的速度变慢(为程序加入一个延迟),这样,黑客通过试错法来破解私钥 就需要花费很长的时间,这就是所谓的密钥延展(key stretching)。比如,为了使密钥生成变慢,我们可以让程序把本来很容易计算的哈希函数SHA-256算上220次,这样一来就把黑客的工作量增加了220倍。当然,如果太慢的话,用户在使用比特币的时候,也会计算得很慢,这也很麻烦。
如果你彻底忘记了大脑钱包的口令,钱包里的比特币就永远取不出来了。
纸钱包
第三个选择是纸钱包(见图4.3):把密钥印在纸上,然后把纸锁在保险箱里。显然,这种方式的安全程度取决于我们所使用的纸的安全程度。纸钱包通常用两种方法为公私钥匙编码:二维码和base58码。就像大脑钱包一样,只需要存储少量关键信息,就可以重新建立一个纸钱包。
图4.3 带公钥的比特币纸钱包
注:同时使用了二维码和base58码加密。
防损硬件
第四种方法是使用防损硬件(tamper-resistant device),用它来保存密钥或用它来生成密钥,总之,此类设备本身不会泄露密钥或输出密钥,而只是在我们按下设备的某个按钮或输入设备密码后显示密钥 的保管状态。防损硬件的好处在于一旦设备丢失或者被盗,我们马上就能知道。而且,想要盗走密钥,必须先盗走这个设备。这和将密钥保存在电脑上是不一样的。
总而言之,用户可使用上述一个或是多个方法来保存密钥。对于热储存,尤其是存有大量比特币的热储存而言,人们愿意投入大量成本或先进的安全机制保护它们。我们将在下一章讨论这些更先进的机制。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=408
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })(); '); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
4.2 热储存与冷储存相关推荐
- MYSQL储存过程和储存函数和变量
储存过程和储存函数和变量 变量的应用: 变量分类为: 系统变量和自定义变量 系统变量和全局变量还可以细分: 系统变量分类: 全局变量和会话变量 自定义变量分类: 用户变量和局部变量 下面是变量的一些具 ...
- MySQL数据备份方式,及热备与冷备的优缺点
一.按照数据库的运行状态分类: (1) 热备:在数据库运行时,直接进行备份,对运行的数据库没有影响 (2) 冷备:在数据库停止运行的时候进行备份,这种备份方式最为简单,只需要拷贝数据库物理文件即可. ...
- 一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字...
一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字 CREATE PROCEDURE SelectPagedSQL ( @SQL nvarchar(512), ...
- 冷热分离和直接使用大数据库_基于 MySQL 的热数据与冷数据分离设计与实现
作为一家提供商业气象数据服务的创业公司,我们一直都有一项「欠交的作业」没有完成,那就是合理的数据规划和数据治理规范.对于早期的初创公司而言,可能很难从一开始就能构想到需要对数据存储进行合理的规划并制定 ...
- Python3 爬虫学习笔记 C09【数据储存系列 — 文件储存】
Python3 爬虫学习笔记第九章 -- [数据储存系列 - 文件储存] 文章目录 [9.1]TXT 文本存储 [9.1.1]基本示例 [9.1.2]打开方式 [9.2]JSON 文件存储 [9.2. ...
- mysql冷区域热区域_mysql的数据备份方式,及热备与冷备的优缺点对比
一.按照数据库的运行状态分类: (1)热备:在数据库运行时,直接进行备份,对运行的数据库没有影响 (2)冷备:在数据库停止运行的时候进行备份,这种备份方式最为简单,只需要拷贝数据库物理文件即可. (3 ...
- 诙谐术语讲解:热备,冷备,云备,以及IT行业各种备份术语
今天给大家分享一个热备,冷备,云备,以及IT行业各种备份术语 假设你是个妹子,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以甩了现任男友,另外一位马上就能补上.这是 ...
- 台式计算机怕冻吗,笔记本怕热更怕冷,电脑冬季保养攻略
原标题:笔记本怕热更怕冷,电脑冬季保养攻略 可能所有的小伙伴都知道,笔记本太热会出大问题,炎热的夏天基本都会给自己的爱机配备一些诸如散热器之类的降温工具.可是,却极少有人知道电脑其实更怕冷!若不注意保 ...
- 财路网每日原创推送:区块链技术热下的“冷思考”
** 区块链技术热下的"冷思考" ** 近年来,区块链技术已成为时下关注的热点话题.作为一个"去中心化"分布式账本数据库,其分布式去中心化.无须信任系统.数据不 ...
最新文章
- Alpha冲刺——day1
- Nature微生物多样性驱动了细菌以CRISPR系统抵御噬菌体
- FEMS综述: 如何从微生物网络中的“毛线球”理出头绪(3万字长文带你系统学习网络)...
- LeetCode 973. K Closest Points to Origin--TopK 问题--最小堆--C++,Python解法
- 双击打开Inventor文件
- 远程连接服务器出现身份验证错误 要求的函数不受支持
- python中__init__.py的作用、module和package
- 限制车间备料方式更改
- [转]对企业管理和团队的理解
- 突然发现,工作已满四年了
- 百度编辑器UEditor的使用方法
- 计算机原理视频教程星火,计算机组成原理及汇编语言(中央广播电视大学)
- python画二元一次函数图像_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
- 对抗神经网络对抗攻击_您将如何检测针对神经网络的网络攻击?
- 新手如何从零开始学习Unity3D,这边文章就够了!
- 高中英语语法(002)-否定
- 【Micro USB选择指南】手工焊接Micro USB接口器件型号选择
- C++重学之路 1 计算机和C++简介
- Linux C/C++开发的难度到底在哪?大厂岗位要求
- 永中word页码怎么从第二页开始_word转pdf软件有哪些?word转pdf软件怎么操作?