主页 > imtokenios下载 > 比特币背后的原理
比特币背后的原理
来自 3Blue1Brown “想知道比特币(和其他加密货币)是如何运作的吗?” 》视频:(点击底部阅读原文查看B站更多精彩内容)在此,感谢各位译者的付出:昨日孟殿阳、罗德、Solara570、圆桌字幕组等。有兴趣的译者,请移步B站取得联系!
【遇见数学】根据视频内容整理文字版,方便学生学习。 我们先看视频吧。
文本“拥有”比特币到底意味着什么?
很多人都听说过比特币,它是一种不需要特定政府发行,不依赖银行管理账户和验证交易,甚至没有人真正知道它的发明者的数字货币,
很多人并不知道上述问题的答案,或者至少不完全知道。 为了弄清楚它,并使比特币背后的技术细节直观,我们将逐步阐明您将如何发明比特币的过程。
首先,我们从你用来记录你与朋友交易的公共账本开始,但是你和你的朋友以及世界上其他人之间的相互信任开始逐渐减少。 但是你很聪明,引入了一些密码学的概念来解决信任危机,你创造了一个新的东西,叫做“加密货币”。
比特币只是广泛使用的加密货币的第一个例子,现在还有许多其他加密货币可以与传统货币进行交易。 现在从你想发明自己的加密货币开始,可以帮助我们了解当今几种主流加密货币的理论基础,了解它们背后在不同方面有不同的设计空间。
其实我选择这个话题,是因为过去一年受到了很多关注、资金投入,甚至是媒体炒作。 我不会评论当前和未来的汇率,但我想购买加密货币的任何人都应该了解加密货币是什么。
我不打算用挖矿做一个模糊的类比,我将直接描述计算机内部发生的事情,以及当我们发送、接收和创建加密货币时它是如何工作的。
我想再强调一点:虽然我们会花一些时间去更深入地了解它背后的原理,但是如果只是日常使用,我们不需要去了解详细的技术原理,就像你不需要一样了解你的信用卡背后发生了什么一切都是一样的。 与电子支付一样,加密货币也有许多方便易用的应用程序,可用于直接发送和接收货币,而无需了解如何实现它们。
不同的是,加密货币背后不是银行对交易进行验证,而是一套基于密码学的数学方法来验证去中心化、互不信任交易下交易的可靠性。
在我们开始之前,您先将加密货币放在一边,让我们从更基本的概念开始:分类账和电子签名。
如果你和你的朋友有频繁的金钱交易,比如AA支付晚餐账单等,总是使用现金总是很不方便。 所以可能会用到一个公共账本:它记录了未来所有的还款金额,比如Alice付给Bob 20元,Bob付给Charlie 40元,等等。
这个账本必须是公开的,每个人都可以查看。 就像一个网站,每个人都可以查看和添加新的交易记录。 每个月底,大家对交易记录没有异议,就一起算账。 入不敷出,就得重新付出。 如果您仍有余额,您可以取回多付的钱。
所以这个简单系统的设计大概会是这样:大家可以在账本上添加新的交易信息,然后在月底用真金白银进行结算。
但是这样的公共账本有个问题,就是因为每个人都可以添加交易记录,如何防止Bob偷偷记录:Alice在没有经过Alice同意的情况下给了Bob 100元。 支付了这笔捏造的交易)。
为什么我们相信账本上的记录是准确的,这里就需要密码学中的电子签名技术。 就像手写签名一样,Alice 需要能够在每笔交易信息旁边留下记录,以证明她理解并认可这笔交易的发生,并且这个签名无法被他人获取和伪造。
电子签名确保交易的真实性
乍看之下,电子签名似乎不可能实现,无论电子签名如何存储,计算机都可以读取和复制。 那么如何防止伪造呢? 要实现电子签名,每个人都需要生成一对秘钥:公钥和私钥。
每个密钥实际上是一串 0 或 1 位。 私钥有时被称为“秘密”密钥,因此它可以缩写为 sk,而公钥可以缩写为 pk。
顾名思义,私钥由你自己保管,在现实生活中,你签名的所有文件中的签名都是一样的。 电子签名更进一步,它会随着签名内容的变化而变化。 它看起来像一串 10 个代码,通常长度为 256 位。 待加密内容中任何一个字符的变化都会使该字符串生成的新签名完全不同。
形式上来说,生成这样的签名需要一个函数Sign,它既需要签名内容,也需要你的私钥,即Sign(signed content, secret key) → 生成新签名。
私钥保证了只有你自己才能生成这个电子签名,而且生成的签名还依赖于要签名的内容,也就是说别人不能简单的复制这个签名在其他捏造的内容上伪造另一个签名(因为捏造的内容肯定是与原始内容不同)。
同时还有一个函数Verify来验证签名的真实性比特币的生产原理是什么,这个函数需要三样东西:签名的内容、生成的签名、公钥。 它的作用是告诉我们签名是否由输入的公钥对应私钥生成。
这些功能是如何实现的,这里就不具体讨论了(【会数学】会在以后的《图解密码学》中介绍),但是它保证了如果不知道对方的私钥,几乎不可能找到一个正确的。 签名。 准确的说,只有通过穷举和反复验证,才能找到正确的签名,然后使用公开的公钥pk通过验证。
现在想想 256 位中有多少种可能的签名。 一共有2256" role="presentation">22562256种可能的签名,这是一个天文数字,说天文数字其实是高估了。在天文类里,我还补了一个视频来演示如何这个数字确实很大(“256 位加密的安全性如何?”将在几天内整理出来 [Meet Math])。
现在一旦你验证了一个签名是真实的,你就可以相当确信这个签名只能用他持有的私钥来加密。
编号保证交易的唯一性
现在保证了每个人都会在交易信息后面签名,但是还会有一个问题。 例如,如果爱丽丝签署了一条交易记录,其中爱丽丝支付给鲍勃 100 元,即使鲍勃无法在爱丽丝的新交易记录上伪造签名,他仍然可以根据需要多次复制这条记录,因为记录及其对应的签名是正确的。
为了解决这个问题,当你签署每一个新的交易信息时,交易信息也必须包含一个与之对应的唯一编号。 这样,如果 Alice 多次付给 Bob 100 元,账本上的每条记录都需要重新签名。
有了电子签名,解决了原有系统中的大部分信任危机,但要真正实现它比特币的生产原理是什么,还是需要依赖类似的信用机构,也就是说,你相信每个人都会在月底出现并以现金结算,因为万一查理欠了很多钱却不愿出来还钱怎么办,这是人们在月底再次以现金结算的唯一原因——担心有人(像查理)欠了很多钱。
聪明的你想到了一个不用再用现金结算的方法,只要能防止一部分人花的钱少于剩余的应付金额就可以了。 比如一开始每个人需要给账户付100元,账户中第一条记录几行:Alice得到100美元,Bob得到100美元,Charlie等。
现在你只需要拒绝在账本上记录一些人的交易即可。 例如,如果前两条交易记录是:查理付给爱丽丝50元,查理付给鲍勃50元。 如果 Charlie 到时候还给你 20 块钱,那笔交易就无效了,就跟他没签一样。 .
但这意味着要验证当前交易,您需要知道到目前为止的所有历史交易信息。 这在加密货币中也是一样的,还有优化的空间。
但有趣的是,这种设计确实去除了账本和真实美元之间的联系。 理论上,如果世界上每个人都使用这个账本,你就可以在这个账本上度过一生,赚取收入。 无需获取真实货币。
为了强调这一点,我们将账本上的货币单位称为“账本美元”,简称为LD。 当然,您也可以随时自由地将LD兑换成真实的美元。
比如现实中Alice给了Bob 100元,Bob在公共账本上记录了Bob付给Alice 100元。 但是这样的交换不在本系统的设计初衷之内,所以不会受到协议的保护。 这种交换类似于市场上美元和欧元或其他货币的交换,那是另一回事。
比特币核心
这是了解比特币和其他加密货币的最重要信息。 它实际上是一个账本,所有的历史交易都被视为货币实体。
当然,就比特币而言,人们只有在用现金购买和使用比特币时,才会记录在账本上。 但我稍后会详细说明新比特币是如何产生的。
但在此之前,我们的 LD 系统与实际的加密货币之间存在一个差异。 我刚刚提到这个公共分类账存在于公共场所。 比如一个网站,每个人都可以登录,添加记录,那我们就得信任这个中央权威。 到底是谁在运营这个网站,谁来控制添加记录的规则?
考虑到如果每个人都能得到这个账本,就没有必要去信任中心机构了。 当你需要有一笔交易的时候,比如Alice付给Bob 100元,你需要把这个信息广播给网络中的所有其他人,其他人收到这个信息的时候,把这个交易记在自己的账本上。
虽然这个想法很简单,但设计起来会很糟糕,因为如何确保每个人都有正确的账本? 当 Bob 收到一笔交易,比如 Alice 支付给 Bob 10 LD,他如何确保和信任其他人? 他也收到了这个信息,这样他以后就可以用这10个LD来支付查理的交易费用了?
试想你自己正在监听外界广播的交易信息,如何保证别人和你按照相同的顺序接收到交易信息,这是关键,也是一个有趣的问题。
你可以想出一个协议来决定接受或拒绝接收到的交易信息,并且你确定在这个方法下其他人都可以接受同一个订单中的交易信息,最后可以形成完全相同的账单,这也是在原始的比特币论文中。 详细部分。
简单来说,比特币给出的解决方案是:选择信任消耗计算资源最多(计算量最大)的账本。 我会花一些时间来详细解释它的含义,它涉及到“加密哈希函数”的概念。
基本思路是这样的:如果把计算资源的消耗作为信任的基础,那么伪造交易记录和不一致账本的计算成本就太高了,不可行。
这个想法真的很酷! 如果你这样做,你就理解了比特币和其他加密货币的核心。
那么首先,什么是散列(hash)函数? 这些函数的输入可以是任何信息或文件,它们会输出一个固定长度的位串,比如256位,这个输出值被称为这个信息的哈希值,或者叫它“摘要”,它被特意设计成be 输出看似很随机,但其实并不是随机的,只要给定相同的信息,它总会输出相同的内容。
但是如果稍微修改一下输入,可能只是修改其中一个字符,最终的哈希值就会完全不同。 实际上,我在这里演示的散列函数称为“SHA256”。
输入稍微修改一下,输出就会完全不同,完全没有规律可言。 明白了,这不是普通的哈希函数,这是加密的哈希函数,也就是说不可能逆向计算。
如果我告诉你一个256位的1、0的字符串,然后让你求SHA256函数的输入内容,这样两者经过SHA256后的结果是一样的。 你只有一种蛮力试错的方法。
不过,如果想感受计算2256" role="presentation">22562256次需要多长时间,可以看看这个补充视频(《256位加密有多安全?》这几天会整理【遇见数学]) 。
你会认为,如果你知道这个函数的运行细节,你就可以猜测输入而不是猜测。 但目前还没有人能做到。
有趣的是,没有严格的证据证明逆向是困难的,但目前大量的安全行业和加密需求依赖于密码哈希函数及其属性。
如果您仔细观察浏览器和 youtube 之间加密连接背后的加密算法,或者当浏览器连接到银行网站时,您很可能会看到 SHA256 算法。
但是现在,我们的重点将是这样一个散裂函数如何证明票据上的一系列交易与大量计算有关?
想想如果有人给你一个交易记录说“嘿!我发现了一个特殊号码(下图账本中的绿色号码1073765433)”,你把这个号码放在这个交易记录后面,然后给整个交易后记录信息是用SHA256函数计算的,前30位为0!”
你认为找到这样一个数字有多难? 对于一条随机的信息,它的哈希值的前30位全为0的概率是2的1/30,差不多是1/10亿,而由于SHA256是加密哈希函数,求这个的唯一方法找到一个特殊号码是通过蛮力,所以你基本上已经尝试了十亿次来找到那个特殊号码。
而当你知道了这个数字后,快速计算出交易列表和数字一起作为输入,经过hash计算,你会发现开头确实有30个0行。
也就是说,你可以快速验证它们确实经过了大量的计算,而不需要你自己去消耗这么大的计算量。 这称为“工作量证明”。
重要的是,这个工作量证明本身就对应着交易记录。 如果你改变了其中一个交易信息,即使你改变了一个数字,也会彻底改变最终的哈希值。 所以它又需要十亿 至少需要两次尝试才能找到一个新的工作量证明——也就是说,找到那个特殊的数字,附加到你修改过的交易列表中,以便相应的哈希值以 30 个零开头。
现在我们回过头来考虑我们分布式账本的情况:每个人都在广播交易信息,我们想找到一种方法让每个人都同意一个正确的账单。 正如我之前所说,原始比特币纸的核心点是,每个人都信任消耗最多计算量的票据。
要实现这个想法,首先需要将票据组织成“块”。 这些区块包含了一系列的交易信息和它们的工作量证明,也就是有一个特殊的数字,它的哈希值以一连串的0开头。
我们暂且从60个0开始,一会儿回过头来看看如何系统地确定这些0的个数。
类似于交易信息只有在发送者签名后才被认为是有效的,类似地,一个块只有在它有工作量证明时才被认为是有效的。
并且为了保证这些区块有一个标准的顺序,我们规定必须将前一个区块的哈希值添加到当前区块的头部信息中。
这样,如果你回过头来,想改变其中一个区块的内容,或者调换两个区块的顺序,就会改变下一个区块的内容,同时也改变了那个区块的哈希值,然后它再次影响下一个块......
这就需要重新计算所有这些区块的哈希值,重新寻找每一个特殊的数字,使得区块的哈希值以60个0开头。 因为所有的区块都是这样相互链接的,所以我们一般不把它叫做账本,而是称为“区块链”(blockchain)。
在这个新的系统下,我们现在让世界上的每个人都可以参与到区块的构建中,也就是说他们可以监听网络中的交易信息,将这些信息组织起来生成区块,然后花费大量的计算工作来find 那个特殊的数字使得区块的哈希值以 60 个零开始。
一旦他们找到这个号码,他们就会广播这个区块。 为了奖励区块创建者巨大的计算量,当她创建区块时,我们规定她可以在账单的开头放一个特殊的交易信息,即:让她凭空得到10个LD。 它被称为“区块奖励”,它不属于任何交易,它不来自任何其他人,因此不需要签名。
这也意味着每一个新的区块都会增加新的虚拟货币。 构建区块通常被称为“挖矿”,因为它会消耗大量的计算工作。 挖矿会给整个经济体引入新的货币数量。
所以当你听到或看到矿工时,你现在明白他们所做的是:监听交易、构建区块、广播区块,并获得新币作为奖励,仅此而已。
在矿工眼中,每个区块就像一张小彩票。 每个人都想尽快猜出特殊数字,直到其中一位幸运儿猜到特殊数字,这可以使区块的 Column 值的分布以大量的 0 开头,然后获得奖励。
对于其他只想使用这个系统进行交易的人来说,他们不需要监听交易记录,他们只需要监听矿工广播的区块,然后更新他们保留的区块链。
现在到了我们协议的重点,如果我们收到两条完全不同的区块链,当交易信息发生冲突时,你只保留最长的一条,即包含最大工作量的一条(例如,如果区块链的长度是 4 和 5,选择长度为 5) 的那个。
如果暂时难以区分上下,等待下一个区块的广播,总会有更长的区块链,所以即使没有中央权威,每个人都会记录自己的区块链,但如果每个人都信任区块链的工作量最大,我们达成了去中心化的共识。
为了理解为什么这个系统是可信的,以及如何相信每一笔交易都是真实的。 我们其实可以理解在这个系统下要做什么作弊。
也许 Alice 想用一个假块来欺骗 Bob,也就是说,她给 Bob 一个块,其中包含她向 Bob 支付 100 个信用点的信息,但她没有将这个块广播给网络中的其他人。 在那种情况下,其他人都认为她仍然持有这 100 美元。 为了做到这一点,她必须在所有其他矿工之前找到工作证明来欺骗大家,因为所有矿工也是独立的积木。
它真的有可能发生! 有可能 Alice 只是碰巧比其他人先找到了这个代表计算量的特殊数字,但 Bob 也会收到其他矿工的区块广播。 所以为了让他相信她伪造的区块,Alice 不断地重新计算她伪造的区块给 Bob 之后的所有区块,这些区块与 Bob 从其他矿工那里收到的区块是不同的。
但系统协议规定 Bob 总是信任他所指的最长链,而 Alice 可能在前几个区块中仍然领先——恰好她比所有其他矿工都先找到了那个区块。
但除非她拥有所有矿工接近50%的计算资源,否则,从概率的角度,基本上可以肯定,所有其他矿工计算出的区块,都会比Alice伪造给Bob的区块更长、更复杂. 快的。
所以在足够的时间之后,Bob 将拒绝他从 Alice 那里收到的区块链,并选择其他人都在使用的最长的区块链。
注意,这意味着你不必信任你刚刚收到的新区块,但你应该等待稍后添加几个新区块,如果你还没有听说过更长的区块链,你可以信任这个区块确实属于其他人正在使用的同一条链。
到目前为止,我们已经解释了所有主要内容,这个基于工作量证明的分布式账本系统,这基本上就是比特币和其他加密货币的工作原理。 再说详细一点,刚才讲了工作量证明,就是找到那个特殊的数字,满足它的块的哈希值以60个0开头。 在实际的比特币协议中,0的个数会被定理改变,以保证平均每10分钟产生一个新区块。
当越来越多的矿工加入“挖矿”的行列时,这种计算的挑战也越来越大。 以至于这个小彩票大约每10分钟只能有一个人中奖。 许多新的加密货币具有更短的块时间间隔
比特币系统中的所有比特币都来自于产生新区块的奖励,最初是每个区块50个比特币。 还有一个叫“Block Explorer”的网站你可以去,它可以很方便的查看比特币区块链中的信息,如果你看区块链的前几个区块,除了奖励的50个比特币外,没有其他交易给矿工。
但是每210,000个区块,几乎每4年,区块奖励就会减半。 现在,每个区块的奖励为 12.5 个比特币,由于这个奖励随时间按比例递减,也就是说最终可用的比特币不会超过 21,000,000 个。 但这并不是说矿工最后就赚不到钱,除了区块奖励,矿工还可以获得交易手续费,每次支付的时候可以选择一小笔交易手续费一起支付,这笔交易手续费最终会去给包含此记录的区块的创建者,您可以激励矿工继续工作并将包含您的交易信息的区块广播给网络中的其他人。
在比特币中,每个区块包含大约 2400 条交易记录。 许多评论家认为这个限制过于严格。 与VISA相比,VISA平均每秒处理约1700笔交易,具备每秒处理高达24000笔交易的能力。 交易。 比特币较慢的交易速度使其交易费用较高,而正是交易费用决定了矿工将哪些交易添加到新区块中。
除了以上关于加密货币的基础知识,还有很多其他的加密货币在系统设计中没有涉及到,但我希望这个视频可以称得上是好奇心的坚实基石。 有兴趣的可以多看看,继续学习。 正如我一开始所说,我做这个视频的初衷是因为有大量的资金在涌入加密货币。 好坏我不过多评论,但我觉得想进入这个领域的人至少应该了解一下这个技术的基础知识,应该是很有好处的。
“赠人玫瑰,手留余香”
如果觉得本文有点帮助,感谢转发,支持本号更快发展!
遇见数学
冲破知识的茂密森林,在精彩的数学中探索乐趣。
感谢您关注 Met Math!