第4章:如何存储和使用比特币(1)

本章是关于我们如何在实践中存储和使用比特币。

4.1本地简单存储

我们从最简单的存储比特币的方式开始,就是将它们放在本地设备上。概括来说,要花费比特币你需要知道一些公共信息和一些秘密信息。公共信息是区块链上发生的事情——硬币的身份,价值等等。秘密信息是比特币所有者的秘钥,想必,这是你的。你不必过于担心如何存储公共信息,因为当你需要的时候你总是可以得到它。但是秘密签名密钥是你最好要记录下来的。因此,在实践中,存储你的比特币是关于存储和管理密钥。

在找出如何存储和管理密钥时,需要牢记三个目标。第一个是可用性:当你想要实际花费你的硬币可以使用。第二个是安全性:确保没有人可以花你的硬币。如果有人有权力花费你的硬币,他们可以把你的硬币发给自己,然后就再也没有硬币了。第三个目标是方便,即密钥管理应该比较容易做到。你可以想象,同时实现三者可能是一个挑战。

最简单的密钥管理方法是将它们存储在你自己本地设备上的文件上:你的计算机,你的手机或你携带,拥有或控制的其他类型的小工具。这对于方便来说是很好的:有一个智能手机应用程序,可以在几个按钮的推动下消费硬币,很难被击败。但是这对于可用性和安全性来说并不好-如果你丢失设备,如果设备崩溃,并且你必须去擦拭光盘,或者你的文件被损坏,你的钥匙将丢失,你的硬币也将丢失。同样对于安全性:如果有人窃取或中断你的设备,或者它被恶意软件感染,他们可以复制你的密钥,然后他们可以将所有的硬币发送给自己。

换句话说,将私人密钥存储在本地设备,特别是移动设备上,很像是在你的钱包或腰包中携带钱。有一些零用钱是有用的,但你不想随身携带你的生活储蓄,因为你可能会失去它,或者有人可能会偷走它。那么你通常所做的就是在你的钱包里存储一些信息/一点点钱,并把大部分钱留在别的地方。

钱包。如果您在本地存储您的比特币,您通常会使用钱包软件,这是一种可以跟踪所有硬币的软件,管理钥匙的所有细节,并通过良好的用户界面使事情变得方便。如果您想要将4.25美元的比特币发送到你们当地的咖啡店,那么钱包软件会给你提供一些简单的方法。钱包软件特别有用,因为你通常希望使用一大堆不同的地址,并带有不同的密钥。你可能会记得,创建一个新的公钥/私钥对是很容易的,你可以利用它来改善你的匿名性或隐私性。钱包软件为你提供一个简单的界面,告诉你钱包中有多少钱。当你想使用比特币时,它会处理使用哪一个密钥的细节以及如何生成新的地址等等。

编码钥匙:基座58和QR码(二维码)。要花费或接受比特币,你还需要一种与另一方交换地址的方法——即要发送比特币的地址。地址编码有两种主要方式,可以将它们从接收者传送到花费者:作为文本字符串或二维码。

要将地址编码为文本字符串,我们将该键的位进行转换,并将其从二进制数转换为基座58。然后我们使用一组58个字符将每个数字编码为一个字符;这被称为base58符号。为什么是58?因为这是我们将大写字母,小写字母以及数字作为字符包含在内的数字,但是忽略了可能令人困惑或看起来像另一个字符的数字。例如,大写字母“O”和零都被取出,因为它们看起来太像了。这样就可以在必要的情况下,我们现在讨论的QR码等方法可以避免通信地址的手动方法。通过电话读取编码的地址,或者从打印纸读取并输入密码。理想情况下,通过我们现在讨论的QR码等方法可以避免通信地址的手动方法。

图4 .1:代表实际比特币地址的QR码。 随便送我们一些比特币。

用于编码比特币地址的第二种方法是作为QR码,一种简单的二维条形码。QR码的优点是您可以使用智能手机扫描它,钱包软件可以自动将条形码转换为代表相应比特币地址的一系列位。这在商店中很有用,例如:退房系统可能会显示QR码,你可以通过用手机扫描代码并将硬币发送到该地址来支付费用。它也可用于手机到手机的传输。

虚荣地址。一些个人或商家喜欢有一个从一些有意义的文字开始的地址。例如,赌博网站Satoshi Bones用户将钱发送到位置2-6中包含字符串“骨头”的地址,例如1bonesEeTcABPjLzAb1VkFgySY6Zqu3sX(所有常规地址以字符1开头,表示支付到pubkey-hash)。

我们说地址是哈希函数的输出,它产生随机数据,所以字符串“骨头”是如何进入的?如果Satoshi骨头简单地构成这些地址,则缺乏反转哈希函数的能力,他们将不会知道相对应的私钥,因此实际上不会控制这些地址。相反,他们反复生成私钥,直到他们幸运,找到一个哈希到这种模式的密钥。这样的地址称为虚荣地址,并且有工具来生成它们。

侧边栏:加快虚荣地址的生成。在比特币中,如果我们调用私钥x,则公钥是g的x次方。取幂表示椭圆曲线组中所谓的标量乘法。地址则是,公钥的哈希值。我们不会再这里了解细节,但是乘幂是地址生成中缓慢的步骤。

产生虚荣地址的天真的方式是选择一个伪随机数x,计算,如果该地址不起作用则重复。一个快速的方法是如果第一个x失败,则尝试x+1,并继续增加,而不是每次挑选一个新的x。这是因为=x,我们已经计算g了,所以我们只需要对每个地址进行乘法运算,而不是求幂,这要快得多。事实上,它将虚荣地址的生成加密了两个数量级以上。

这需要多少工作? 由于每个角色有58种可能性,如果您想要找到以特定k-字符串开头的地址,则平均需要生成58的k次方个地址,直到你幸运。所以找到一个以“骨头”开头的地址将需要产生超过6亿个地址! 这可以在现在的普通笔记本电脑上完成。但是每个额外的角色都会变得越来越难。找到一个15个字符的前缀将需要不可行的计算量,并且(不需要在底层哈希函数中找到中断)是不可能的。

4.2冷热库

正如我们刚刚看到的那样,将Bitcoin存储在电脑上就像在你的钱包或腰包里携带钱。这被称为“热存储”。 这很方便,但也有一些风险。 另一方面,“冷库”是脱机的。它被锁在某处。它没有连接到互联网,它是档案。所以它确保了安全性,更安全,当然不是那么地方便。这类似于你你身上携带一些零钱,但把你的生活储蓄放在更安全的地方。

想要有独立的冷热存储,显然你需要为每个密钥分开单独的密钥——否则,如果热存储被破坏,冷藏库中的硬币将是易受攻击的。你会想要在热端和冷端之间来回移动硬币,所以每边都需要知道对方的地址或公钥。

冷库不在线,因此热存储和冷藏将无法通过任何网络彼此连接。但好消息是,冷库不必在线接收硬币——由于热存储器知道冷藏地址,所以可以随时将硬币发送到冷库。在任何时候,如果你的热钱包中钱的金额变得很多时,你可以将其中的一大块转移到冷库中,而不会通过连接到网络将你的冷藏置于风险之中。下一次冷藏连接时,它将能够从区块链接收到关于这些转移的信息,然后冷库将能够用这些硬币来做所需要的。

但是在管理冷藏地址时有一点问题。一方面,如前所述,为了隐私和其他原因,我们希望能够在具有不同密钥的单独地址上接收每个硬币。所以每当我们将硬币从热端转移到冷的一面时,我们想为此而使用一个新鲜的冷地址。但是由于冷端不在线,我们必须有一些方法在热的一端来找出这些地址。

生硬的解决方案是为冷方一次生成一大堆地址,并将它们发送给热端,以便逐一使用它们。缺点是我们必须定期重新连接冷端,以便传输更多的地址。

分层钱包。一个更有效的解决方案是使用分层钱包。它允许冷端使用基本上无限数量的地址,热端可以了解这些地址,但双方只进行简短的一次性通信。但这需要一点点加密的诡计。

回顾以前,以前在第1章讨论了关键代码和数字签名时,我们研究了一个名为generateKeys的函数,它生成一个公钥(作为一个地址)和一个秘钥。在分层钱包中,关键代码的工作方式不同。我们不是生成单个地址,而是生成所谓的地址生成信息,我们不是生成私钥,而是生成所谓的私钥生成信息。给定的地址生成的信息,我们可以生成一个序列的地址:我们应用一个地址生成函数将输入的地址生成信息和任何整数i作为输入生成序列中的第i个地址,同样的,我们可以使用私钥生成信息生成一系列的私钥。

加密的魔法使这有用的是,对于每个i,第i地址和与第i密钥“匹配”——也就是说,第i密钥控制的,并可用于消费,比特币来自这里另一个重要的加密属性是安全性:地址生成信息不会泄露任何有关私钥的信息。第i地址就好像这一对是由老式的方式生成一样。所以就好像我们有一系列常规的密钥对。

这里另一个重要的加密属性是安全性:地址生成信息不会泄露任何有关私钥的信息。这意味着向任何人发送地址生成信息是安全的,所以任何人都可以启用生成第i个密钥。

现在,并非所有存在的数字签名方案都可以被修改,以支持层次密钥生成。有的可以有的不行,但好消息是,通过使用比特币,ECDSA数字签名,支持分层密钥的生成,允许这个技巧。也就是说,冷端产生任意多个密钥,热端产生相应的地址。

图4.2:分层钱包的模式。冷端创建并保存私钥生成信息和地址生成信息。它将后者一次性转移到热门。每当它想要向冷端发送硬币时,热端依次产生一个新的地址。当冷端重新连接时,它会顺序生成地址,并检查区块链以传送到这些地址,直到达到没有接收到任何硬币的地址。如果要将某些硬币发回热边或以其他方式使用,也可以依次生成私钥。

这是它的工作原理。回想一下,ECDSA私钥通常是随机数x,相应的公钥是。对于分层密钥生成,我们需要另外两个随机值k和y

这具有我们想要的所有属性:每一方都可以生成其密钥序列,并且与相应的密钥匹配,因为(因为对应于私有密钥x的公钥是)它还有一个我们没有谈到的财产:当你发出公钥时,这些钥匙将不能相互链接,也就是说,不可能推断他们来自同一个钱包。具有冷端的稻草人解决方案产生大批地址确实具有这种性质,但是当考虑到钥匙实际上不是独立生成时,我们必须对它保留注意。这个属性对隐私和匿名很重要,这将是第6章的主题。

在这里我们有两个层次的安全性,热端处于较低的级别。如果热端受到威胁,我们刚刚讨论的无连结性属性将会丢失,但私钥(和比特币)仍然是安全的。一般来说,这个方案支持任意多的安全级别——因此“分级”——尽管我们还没有看到细节。例如,当公司内部有多个级别的授权时,这一点是有用的。

现在我们来讨论一下冷信息的不同方式——是否可以存储一个或多个密钥或密钥生成信息。第一种方法是把它放在某种设备里,然后把它放在保险箱里。它可能是一台笔记本电脑,一部移动电话或平板电脑,或一个拇指驱动器。重要的是把设备关上并锁上,这样如果有人想偷它,他们就得破门而入。

脑钱包。我们可以使用的另一种方法是所谓的脑钱包。这是一种只需使用一个秘密口令来控制访问比特币的方式。这避免了硬盘驱动器、纸张或其他任何长期存储机制的需要。在你的身体安全性差的情况下,或许当你在国际旅行时,这个属性可能特别有用。

大脑钱包背后的关键在于有一个可预测的算法将密码转化为一个公钥和私钥。例如,你可以使用合适的哈希函数对密码进行哈希以导出私钥,并给出了私钥,公钥可以以一个标准的方式导出。此外,与之前我们看到的分层钱包技术相结合,我们可以从密码短语中生成一整套序列的地址和私钥,从而实现完整的钱包。

然而,如果攻击者可以猜到密码短语,他也可以获取脑钱包中的所有私钥。与计算机安全一样,我们必须假设对手知道您用于生成密钥的过程,且只有你的密码提供安全性。所以对手可以尝试各种口令,并使用它们生成地址;如果他在任何这些地址发现区块链上的任何未使用的交易,他可以立即将其转移给自己。对手可能永远不知道(或关心)那些硬币属于谁,攻击不需要闯入任何机器。猜脑钱包密码短语并非针对特定的用户,而且不留痕迹。

侧边栏:产生令人难忘的密码短语。提供大约80位熵的一个密码短语生成程序是从10000个最常用的英语单词中选择6个单词的随机序列(大约为80).许多人发现这些比随机字符串更容易记住。这是一对密码短语生成的方式。

此外,与猜测您的电子邮件密码(可以通过电子邮件服务器限定)的任务不同,攻击者可以使用大脑钱包下载具有未兑换硬币的地址列表,尝试尽可能多的潜在密码,因为他们有计算能力检查。请注意,攻击者不需要知道哪些地址对应于大脑钱包。这被称为离线猜测或密码破解。提出易于记忆的密码短语,而且不会容易以这种方式猜测是更具挑战性的。生成密码短语的一种安全方法是具有一个自动的过程,用于挑选随机的80位数字,并将该数字转换成密码短语,使得不同的数字导致不同的密码。

在实践中,使用故意缓慢的功能从密码短语中导出私钥也是明智的,以确保攻击者尝试所有可能性需要尽可能长的时间。这被称为关键拉伸。为了创建一个故意缓慢的密码推导函数,我们可以采用像SHA-256这样的快速加密散列函数,并计算它的次迭代,将攻击者的工作负载乘以。当然,如果我们把它弄得太慢的话,它会开始让用户感到讨厌,因为他们的设备只要想从大脑钱包里拿出硬币,就必须重新计算这个功能。

如果一个大脑钱包密码无法访问——说已经被遗忘了,没有被写下来,不能被猜到——那么硬币就永远丢失了。

纸钱包。第三个选项是所谓的纸钱包。我们可以将关键材料打印成纸,然后将该纸放入安全或可靠的位置。显然,这种方法的安全性与我们正在使用的纸的物理安全性一样好或坏。典型的纸质钱包通过两种方式对公钥和私钥进行编码:作为二维条形码,并以基础58符号表示。 就像一个大脑的钱包一样,存储少量的关键材料足以重新创建一个钱包。

图4.3:一个带有公钥的比特币纸钱包编码为二维条码和基本58标记。请注意,私人密钥在一个防篡改密封之后。

防篡改装置。我们可以存储离线信息的第四种方法是将其放在某种防篡改设备中。要么我们把钥匙放进设备,要么设备生成钥匙;无论如何,设备的设计使其无法输出或泄露密钥。这个设备代替了用密码来表示符号语句,当我们按下按钮或给它某种密码时,它就这样做了。一个优点是,如果设备丢失或被盗,我们将知道,密码唯一可能被盗的是如果设备被盗。这不同于在笔记本电脑上存储你的钥匙。

一般来说,人们可能会使用这四种方法的组合来保护他们的钥匙。对于热存储,特别是用于储存大量比特币的热存储,人们愿意努力工作,提出新的安全方案以保护它们,我们在下一节将谈谈一些更先进的方案。

4.3拆分和共享密钥

到目前为止,我们已经研究了存储和管理控制比特币密钥的不同方法,但我们总是把密钥放在一个地方——无论是锁定在安全中,还是在软件中,或者在纸上。这让我们失去了一个点。如果单个存储空间出现问题,那么我们就会遇到麻烦。我们可以创建和存储关键材料的备份,但这会降低密钥丢失或损坏(可用性)的风险,从而增加了盗用(安全性)的风险。这种权衡似乎是根本的。我们是否可以获取一个数据,并存储在可用性和安全性同时增加的方式吗?值得注意的是,答案是肯定的,这又是一个使用加密技术的技巧,称为秘密共享。

这里的想法:我们要将我们的密钥划分成N个片段。我们想要这样做,如果我们被给予任何K的这些片段,那么我们将能够重建原始的秘密,但是如果我们被给予少于K个片段,那么我们将无法了解原始秘密的任何内容。

鉴于这个严格的要求,简单地将秘密“切割”成碎片不会起作用,因为即使是单片还提供了一些关于秘密的信息。我们需要一些更聪明的东西。而且,由于我们没有削减秘密,所以我们会将各个组件称为“份额”而不是片段。

假设我们有N = 2和K = 2。这意味着我们根据秘密生成2个份额,我们需要这两个份额才能重建这个秘密。我们叫我们的秘密S,这只是一个大(128位)的数字。我们可以生成一个128位随机数R,使两个共享为R和S⊕R。(⊕代表按位XOR)。本质上,我们用一次性“加密”S,并将密钥(R)和密文(S⊕R)存储在不同的地方。密钥和密文本身都不会告诉我们关于秘密的任何内容。但是鉴于这两个份额,我们只是将它们组合在一起来重建这个秘密。

只要n和k是相同的,这个技巧就可以工作了——我们只需要为第一批N-1股份生成N-1个不同的随机数,最后的份额将是所有其他n-1个份额共享的秘密XOR。但是如果N大于K,那么这不再起作用了,我们需要一些代数。

图4.4:2-out-of-N秘密共享的几何图示。S表示秘密,编码为(大的)整数。绿线具有随机选择的斜率。橙色点(具体来说,它们的Y坐标S + R,S + 2R,...)对应于份额。任何两个橙色点都足以重建红色点,因此也就是秘密。所有算术都以大质数模数完成。

看看图4.4。 我们在这里做的是首先在Y轴上生成点(0,S),然后在该点上绘制一条随机斜率的线。接下来,我们在这条线上生成一堆点,想要多少生成多少。事实证明,这是S的秘密共享,N是我们生成的点数,K =2。

为什么这样工作?首先,如果你给出了两个生成点,你可以通过它们画一条线,看看它在哪里与Y轴相遇。那会给你S.另一方面,如果你只给了一个点,它不会告诉你S,因为线的斜率是随机的。每条通过你的点的线都是同样可能的,他们都将与Y轴在不同的点相交。

还有一个微妙之处:为了使数学运算出来,我们必须用一个大素数P来完成所有算术运算。它不需要是秘密或任何东西,只要是真的很大。秘密S必须在0和P-1之间,包括0和P-1。所以当我们说我们在线上生成点时,我们的意思是我们生成一个随机值R,也在0和P-1之间,我们生成的点是

x = 1,y =(S + R)mod P

x = 2,y =(S + 2R)mod P

x = 3,y =(S + 3R)mod P

等等。秘密对应于x = 0,y =(S + 0 * R)mod P,即x = 0,y = S。

我们看到的是一种使用K = 2和任何值N进行秘密共享的方式。这已经相当不错了——如果N = 4,你可以将你的密钥分成4个分组,并将它们放在4个不同的设备上,以便如果有人窃取了这些设备中的任何一个,那么他们也不会知道你密钥的任何信息。另一方面,即使这两个设备在火灾中被破坏,你也可以使用其他两个设备来重建密钥。所以作为承诺,我们增加了可用性和安全性。

但是我们可以做得更好:只要K不超过N,我们就可以与任何N和K进行秘密共享。为了看如何构建的,我们回去看图。我们使用一条线而不是其他形状的原因是,代数上说,一条线是1的多项式。这意味着要重建一条线,我们需要两点,不要少于两个。 如果我们想要K = 3,我们将使用一个抛物线,它是一个二次多项式,或者是二阶多项式。需要三点来构造一个二次函数。我们可以使用下表了解发生了什么。

表4.1:秘密分享背后的数学。通过K-1级随机多项式曲线上的一系列点来表示秘密,只有至少K个点(“份额”)可用时才能重建秘密。

有一个叫做拉格朗日插值的公式,它允许你从曲线上的任何K点重构一个K-1度的多项式。这是一个用直尺通过两个点绘制直线的几何直观的代数版本(概括)。作为所有这一切的结果,我们有一种方法来存储任何秘密作为N股,使我们是安全的,即使对手了解到他们的K-1,同时我们可以承受高达n-k的损失它们。

没有一个是特定为比特币设计的,顺便说一句。你现在可以秘密分享您的密码,并将其分享给你的朋友或将其放在不同的设备上。但是没有人真的用密码这样的秘密去做到这一点。方便是一个原因;另一个原因是有其他安全机制可用于重要的在线帐户,例如使用SMS双重因素安全性的验证。但是使用Bitcoin,如果你在本地存储你的密钥,那么你没有其他安全选项。没有办法根据收到的短信来控制比特币地址。 在线钱包的情况是不同的,下一节我们来看看。但是没有太不同——它只是将问题转移到不同的地方。毕竟,在线钱包提供商将需要一些方法来避免在存储密钥时出现单点故障。

阈值加密。但是,秘密共享还是有一个问题:如果我们有一个钥匙,我们以这种方式分裂,然后我们想回去使用钥匙来签署一些东西,我们仍然需要把这些份额放在一起,并重新计算初始秘密,以便能够签署密钥。我们将所有份额合并在一起的点仍然是一个单一的脆弱点,对手可能会窃取钥匙。

密码学也可以解决这个问题:如果共享存储在不同的设备中,有一种以分散方式生成比特币签名的方法,而不用在任何单个设备上重建私有密钥。这被称为“阈值签名”。最佳用例是具有双重因素安全性的钱包,对应于N = 2和K = 2的情况。假设你已经配置了你的钱包,以在桌面和手机之间分割其密钥资料。然后,你可以在桌面上启动付款,这将创建一个部分签名并将其发送到你的手机。然后你的手机将通过付款明细(收件人,金额等)提醒您,并要求你确认。如果详细信息检查后,你将确认,你的手机将使用其私钥的共享完成签名,并将交易广播到区块链。如果桌面上有恶意软件窃取你的比特币,那么可能会发起一笔将资金发送给黑客的地址的交易,但是你会在手机上收到你未授权交易的警报,然后你就知道有什么事发生了。阈值签名背后的数学细节非常复杂,我们不会在这里讨论。

多签名。 有一个完全不同的选择,以避免单点故障:多签名,我们之前在第3章中看到过。Bitcoin脚本直接允许你规定对地址的控制在不同的密钥之间进行分割,而不是使用单个密钥并将其拆分。这些密钥可以存储在不同的位置,并且签名单独生成。当然,完成的签名交易将在某些设备上构建,但是即使对手控制这个设备,他所能做的一切就是防止它被广播到网络。他不能在没有其他设备参与的情况下产生一些其他交易的有效多签名。

例如,假设这本书的作者安德鲁,Arvind,埃德,约瑟夫和史蒂文都是一家公司的联合创始人——也许我们从销售这本免费书中收到丰富的特许权使用费——并且公司会有很多比特币。我们可能会使用多重保护来保护我们大量的比特币。我们中的每一个都会产生一个密钥对,我们将使用3/5的多重信号来保护我们的冷库,这意味着我们中的三个必须签署才能创建有效的交易。

因此,我们知道,如果我们五个人分别保管钥匙,并保证钥匙安全,我们就相对安全了。对手将不得不妥协五个密钥中的三个。如果我们中有一个甚至两个人流氓,那么他们不能窃取公司的硬币,因为至少需要三个钥匙去做。同时,如果我们中的一个人丢了钥匙或者被公共汽车辗过,我们的大脑钱包丢失了,其他人仍然可以把硬币拿回来,然后把它们转移到一个新的地址,重新保管钥匙。换句话说,多重SIG可以帮助你以相对安全的方式管理大量的冷储硬币,并且在发生任何剧烈的事情之前需要多人操作。

侧边栏:阈值签名时采用单个密钥的密码技术,将其分开共享,分别存储,并且在不重建密钥的情况下签署交易。多签名是比特币脚本的一个特性,通过它你可以指定地址的控制在多个独立钥匙之间分割。虽然它们之间有一些差异,但它们通过避免单点故障来增加安全性。

在我们上面的陈述中,我们通过解释如何帮助实现双因素(或多因素)安全性,以及通过解释如何帮助一组个人共同控制共同持有的资金来促进阈值签名。但任何一种技术都适用于任何一种情况。

4.4在线钱包和交易所

到目前为止,我们已经讨论了如何存储和管理你的比特币本身。现在我们将讨论如何使用其他人的服务来帮助你。你可以做的第一件事是使用在线钱包。

在线钱包。一个在线钱包就像你可能自己管理的本地钱包,除了信息存储在云中,你可以使用计算机上的Web界面或使用智能手机上的应用程序来访问它。一些在2015年初受欢迎的在线钱包服务是Coinbase和blockchain.info。

从安全性的角度来看,关键的是站点提供了在浏览器或应用程序上运行的代码,并且还存储你的密钥。至少它将具有访问你的密钥的能力。理想情况下,这个网站将按照你所知道的密码对这些密钥进行加密,但是你当然必须相信他们这样做。你必须相信他们的代码不泄漏你的密钥或密码。

一个在线钱包有一定的权衡来做自己的事情。一个很大的优点是它很方便。你无需在计算机上安装任何东西,就能够在浏览器中使用在线钱包。在你的手机上,你可能只需安装一次应用程序,不需要下载程序链。它可以在多个设备上工作——你可以在桌面和手机上安装一个单一的钱包,只需真正的钱包就能在云端工作。

另一方面,存在安全隐患。如果网站或经营该网站的人员变得恶意,或者以某种方式受到影响,你的比特币就会遇到麻烦。该网站提供的代码,其肮脏的手指在你的比特币上,如果在服务提供商有妥协或恶意的事情可能会更糟糕。

理想情况下,网站或服务由安全专业人员管理,他们在维护安全方面受过较好的培训,或者比你更勤奋。所以你可能希望他们做得更好,你的硬币实际上比你自己储存的钱更安全。但是最后,你必须相信他们,你必须依靠他们不被妥协。

比特币交易。要了解比特币交易所,首先谈谈银行和银行业务如何在传统经济中运作。你给银行一些钱——一个存款——银行承诺稍后还钱。当然,最重要的是,银行实际上并不是拿你的钱,把它放在后面的房间里。所有的银行都承诺,如果你出钱,他们会给回来。银行通常会把钱放在别的地方,也就是投资。银行可能会在储备金中保留一些钱,以确保他们能够在典型的一天或甚至是不寻常的一天支付他们将面临的提款需求。许多银行通常使用一种称为“储备”的东西,在这些储备中保留所有活期存款的一小部分,以防万一。

现在,比特币交换业务至少从用户界面的角度来看,以类似于银行的方式运作。他们接受了比特币的存款,就像一家银行一样,承诺稍后再按要求给他们。你还可以通过从你的银行帐户转账,将法定货币——传统货币(如美元和欧元)转入交易所。交易所承诺将按要求偿还任一种或两种货币。交易所可以让你做各种类似银行业的事情。你可以赚取和收到比特币付款。也就是说,你可以指示交易所向某一方支付一些比特币,或者你可以要求其他人代你将资金存入特定交易所——放入你的账户中。他们还让你交换比特币为法定货币,反之亦然。通常,他们通过寻找一些想用美元购买比特币的客户和一些想把比特币作为美元出售的客户来实现这一点。换句话说,他们试图找到愿意在交易中采取相反立场的顾客。如果双方都能接受的价格,他们将完成交易。

假设我在一些交易所的账户持有5000美元和三个比特币,我使用交易所,我下令购买2个比特币,每个580美元,交易所找到一个愿意接受交易的人, 交易发生。现在我的帐户中有五个比特币,而不是三个,有3840美元,而不是5000。

这里要注意的一个重要事情是,当这笔交易发生在涉及我和另一个客户的同一交易中时,比特币区块链中没有实际发生任何交易。交易所不需要去区块链,以便将比特币或美元从一个账户转移到另一个账户。在这笔交易中发生的一切是,交易所现在对我的承诺不同于以前的承诺。他们以前说,“我们会给你5000美元和3 BTC”,现在他们说“我们会给你3840美元和5 BTC”。这只是他们承诺的变化——没有通过美元经济或通过块链发生实际的货币流动。当然,他们对另一个人的承诺也是以相反的方式改变的。

使用交流有利有弊。最大的优点之一是交易所有助于将比特币经济和比特币与货币经济联系起来,以便轻松地传递价值。 如果我的帐户中有美元和比特币,我可以很容易地在他们之间来回交易,这真的很有帮助。

坏处就是风险。你面临着和银行一样的风险,风险分为三类。

三种风险。第一个风险是银行的风险。当一群人一次出现并想要他们的钱时,会发生什么事情。由于银行只有部分储备,可能无法应对同时提款。 危险是一种恐慌的行为,一旦谣言开始绕开,一个银行或交易所可能会遇到麻烦,他们可能会越来越接近不履行提款,然后人们踩踏,试图在人群之前提取钱,你会经历一场雪崩。

第二个风险是,银行的所有者可能会运行一个庞氏骗局。这是一个方案,有人让人们给他们钱,以换取未来的利润,但实际上是把钱用于支付给以前购买的人的利润。 这样的计划注定要最终失败,失去了很多人的很多钱。 在最近的记忆中,伯尼·麦道夫(Bernie Madoff)最为著名。

第三个风险是黑客的风险,甚至是交易所的一个雇员,也会设法渗透交易所的安全。由于交易所存储了控制大量比特币的关键信息,所以他们需要对软件安全及其程序非常谨慎——如何管理他们的冷、热存储以及所有这些。如果出现问题,你的钱可能会从交易所被盗。

所有这些事情都发生过。我们看到了由于银行挤兑而倒闭的交易所。我们看到交易所的失败是因为交易所的运营商是骗子,我们也看到了由于破产而倒闭的交易所。事实上,统计数据并不鼓舞人心。2013的一项研究发现,40家比特币交易所中有18家因某些交易失败或部分无力支付交易所承诺支付的资金而关闭。

最著名的例子是Mt. Gox。Gox一度是最大的比特币交易所,它最终发现自己无力偿债,无力偿还所欠的款项。Gox是一家日本公司,最终宣告破产,留下许多人怀疑他们的钱去了哪里。现在,在日本和美国法院,Gox的破产是混乱的,要过一段时间我们才能确切知道钱到哪里去了。我们知道的一件事是,有很多它,而Gox不再拥有它了。所以,这是一个关于使用交易所的警示故事。

回过来考虑到银行,我们看不到大多数发达国家银行的失败率为45%,部分是由于监管。各国政府以各种方式管制着传统银行。

银行监管。政府首先要做的是经常强加最低储备金要求。在美国,银行需要以流动形式存在的活期存款的比例通常为3-10%,如果发生这种情况,他们可以处理大量的提款。二是政府往往规范银行可以使用的投资类型和资金管理方式。目标是确保银行的资产投资于相对较低风险的地方,因为这些资产是存款人在某种意义上的资产。

现在,为了换取这些形式的监管,政府通常会做一些事情来帮助银行或帮助他们的存款人。一是政府出台存款保险。也就是说,政府承诺存款人,如果遵守这些规定的银行,政府将至少确保部分存款的安全。政府有时也会作为“最后贷款人”。如果一家银行陷入困境,但基本上是有偿还能力的,政府可能会介入并向银行贷款以渡过危机,直到它能够在必要时转移资金以摆脱困境。

传统银行是这样管制的,但比特币交易所没有。Bitcoin交易所或其他Bitcoin业务是否应该受到监管的问题是我们将在第七章中回顾的一个主题。

准备金证明。比特币交换所或持有比特币的其他人可以使用一种称为“储备证明”的加密伎俩,让客户对他们存入的钱感到放心。目标是让交易所或商业持有比特币的来证明它有部分储备——他们可以控制大概25%甚至是100%的存款。

我们可以将准备金证明问题分解成两部分。第一个是证明你持有多少储备——这是比较容易的部分。该公司只需简单地发布有效的付款自交易的索赔准备金数额。也就是说,如果他们声称拥有10万个比特币,那么他们创建一个交易,在这个交易中,他们向自己支付100,000个比特币,并显示该交易有效。然后,他们签署一个挑战字符串——由一些公正方生成的随机字符串——与用于签署自付交易的私钥相同。这证明知道私钥的人参与了储备证明。

我们应该注意两点警告。严格地说,这并不是说声称拥有储备金的一方拥有一个证据,而只是说拥有这10万个比特币的人愿意在这个过程中进行合作。尽管如此,这看起来像是一个证明,有人控制或知道谁控制了一定数量的钱。此外,请注意,您可以随时索赔:该组织可能拥有15万个比特币,但选择仅支付10万美元的自付款。 所以这种储备证明并不能证明这是你的全部,但它证明你至少有这么多。

负债证明。第二件是证明你持有多少活期存款,这是很难的。如果你可以证明你的储备金和你的定期存款,那么任何人都可以简单地将这两个数字分开,这就是你的部分储备金。我们会提出一个计划,允许你过度申报,但不能低报你的定期存款。因此,如果你能证明你的准备金至少是一个一定数额,你的负债在一定程度上是一个一定数量,合到一起,你就证明了你的部分准备金的下限。

如果你不关心用户的隐私,你可以简单地发布你的记录——具体来说,拥有定期存款的每个客户的用户名和金额。现在任何人都可以计算你的总负债,如果你省略了任何客户或谎称其存款的价值,你就会冒着该客户暴露你的风险。你可以补充假冒用户,但你只能通过这种方式提高索赔总负债的价值。所以只要没有客户投诉,这就可以让你证明你存款的下限。当然,这个伎俩是在尊重用户隐私的同时做到这一点。

要做到这一点,我们将使用Merkle树,我们在第1章中看到过。回想一下,merkle树是用哈希指针构建的二进制树,以便每个指针不仅说明我们可以获得一条信息,而且该信息的加密哈希也是如此。交易所通过构建Merkle树来执行证明,其中每个叶子对应于用户,并发布其根哈希。类似于上述的天真协议,每个用户都有责任确保它们被包含在树中。此外,还有一种方式可以让用户集体检查索赔的存款总额。 我们现在深入细节。

图4.5:负债证明。交易所发布包含叶子中所有用户的Merkle树的根,包括存款金额。任何用户都可以请求一个包含在树中的证明,并验证存款金额是否正确传播到树的根目录。

现在,我们要将这些哈希指针的每一个添加到另一个字段或属性中。该属性是一个数字,表示树中该哈希指针下的子树中所有存款比特币的总金额。为了这样做,每个哈希指针对应的值应该是它下面的两个散列指针的值的总和。

交易所构造这个树,加密地将根指针与根属性值一起签名,并发布它。根值当然是总负债,我们感兴趣的数量。交易所声称所有用户都在树的树叶中表示,其存款值正确表示,并且值正确地传播到树上,以使根值是所有用户的存款金额的总和。

现在,每个客户可以去组织,要求提供正确包含的证明。然后,交易所必须向客户显示该用户的叶子到根的部分树,如图4.6所示。客户然后会验证:

1.根哈希指针和根植与交易所签名和发布的相同。

2.哈希指针一直一直下降,也就是说,每个哈希值确实是它指向的节点的加密哈希。

3.叶包含正确的用户帐户信息(例如,用户名/用户ID和存款金额)。

4.每个值是它下面两个值的总和。

5.这两个值都不是负数。

图4.6:包含在Merkle树中的证明。叶节点的披露,以及从根到叶的路径上的节点的兄弟姐妹。

好消息是,如果每个客户都这样做,那么这个树的每一个分支都将被探索,有人将验证每个哈希指针的相关值等于其两个孩子的值之和。至关重要的是,交易所不能在不同客户的树的任何部分呈现不同的值。这是因为这样做要么意味着找到哈希冲突的能力,要么向不同的客户呈现不同的根值,我们认为这是不可能的。

让我们回顾一下。首先,交易所他们通过进行X量的自我交易证明至少拥有X数量的储备货币。然后他们证明他们的客户最多有Y数量的存款。这表明它们的储量分数至少为X / Y。这意味着,如果比特币交易所想证明他们在所有存款(或100%)上持有25%的储备,他们可以以任何人可以独立核查的方式执行,而不需要中央监管机构。

你可能会注意到,这里提供的两个证明(通过签署挑战字符串的储备证明和通过Merkle树的负债证明)显示了大量私人信息。具体来说,它们揭示了交易所使用的所有地址,储备金和负债的总价值,甚至有关个人客户余额的一些信息。实际上交易所对此的发布犹豫不决,结果储备的加密证明很少见。

最近提出的一项叫做“规定”的议定书提供了相同的偿付能力证明,但并没有透露总负债或储备金或使用的地址。该协议使用更高级的加密,我们不会在此处覆盖,但另一个示例显示如何使用加密技术来确保隐私。

偿付能力是比特币交易所自愿证明监管的一个方面,但是第7章我们将看到,监管的其他方面更难保证。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容