草根站长
老司机 路子野 随时超车
众所周知比特币的最重要特性之一就是去中心化,这是它区别于传统记账货币中心化机制的最大不同,中心化是需要一个类似银行的发行、清算机构来验证交易有效合法性的。
去中心化,本质上是让所有的节点都可以验证该笔交易的真伪,去掉假的,只保留真的。我在网络上广播我转了一笔比特币给xx,矿工们怎么才能验证这笔交易是真实的而不是伪造的呢?
中本聪使用了非对称加密技术解决了这个问题,所谓非对称加密,是指加密和解密的时候使用不同的密钥的加密算法。比如,A要向B发送消息,在此之前A和B都要产生一对用于加密解密的公钥与私钥。私钥,就像一把私人拥有的钥匙,只有自己知道,别人不知道;公钥,恰如一把公共的钥匙,加密前一般告诉对方自己的公钥。A向B方消息,A用B的公钥加密这段信息,B收到这段消息,用B自己的私钥解密A发送的消息,而其他人收到这个消息的,都无法解密,因为只有B才拥有解密的钥匙。
这个听上去对于不懂技术的人来说有点复杂,简单说就是公钥和私钥是成对存在的,一把钥匙开一把锁,两者可以相互的验证对方。在比特币交易中,简单说来,你要转给对方的钱包地址(相当于对方的银行卡号)我们可以理解为公钥,交易时签名和输密码其实就相当于对私钥进行签名。
每个矿工在拿到一笔转账交易的时候就可以验证公钥、私钥是否是匹配的,如果匹配,那么这笔交易就是合法的,这样,每个人只需要保管好自己的私钥,知道对方的钱包地址就能进行比特币转账,无需一个中心化的机构验证这笔交易是否是真的,这极大的降低了人们转账时的信任,只要你告诉我钱包地址,我给你转账你一定会收到真的比特币,谁也无法伪造。这就是基于比特币规则创造的一种信任(中心化的第三方信任中介机构譬如银行在这个过程中就被无情的干掉了)
以上只是保证在记账节点对账本交易进行验证加锁,那么修改账本本身这个行为在比特币网络中成本更是高到无限大,篡改者基本无利可图。
比特币去中心化的原理有两个:
第一,作为一个区块链产品,因为其清算能力是分布在比特币网络的若干电脑上,而不是依赖于某个中心化服务器,因此比特币是去中心化的。
第二,根据比特币的设计,清算能力分布在若干电脑上的同时,关于比特币程序的重大修改,是要进行投票的。这样,理论上比特币的决策是民主的,所以在这个意义上也可以说是去中心化的。
在传统中心化的场景下,这个记账记录是否容易被篡改主要取决于中心大账本服务器的安全可靠程度,如果中央服务器被攻破,那么记账记录则有可能被黑客肆意破坏,大家平时使用的银行、支付宝等这些服务器都是固若金汤的,即使偶尔出了漏洞被黑客利用,但是网警这个物种你觉得是吃白饭的吗?从法律层面足以震慑一般人不敢轻易去黑支付机构。
但比特币这种新生的数字货币,一出生世界各国没几个人认可,而且没有中心化机构,它如何保证交易记录不被篡改?每个矿工将交易记录打包后的区块体数据结合该区块的前一个区块进行哈希碰撞,找到正确的哈希值(表示该矿工完成了一定的工作量,就像你考驾照成绩合格就表示你曾经付出努力学习了驾驶技术,就可以给你颁发驾照一样)就能去的记账权,其他节点经过简单的验证,就可以同意其记账,新的区块产生后,其他所有的矿工都会停下手头的工作,同步一只在这个新的区块之后继续"挖矿"工作。
在区块链世界,所有节点都默认最长的那一条链为有效的链,任何其他节点即使修改了链上某个区块的交易记录,根据前文我们提到的哈希运算的特性,都会造成该区块的哈希值发生变化,从而导致该区块的ID发生变化,后续的区块根据其存储的上一个区块的ID就无法找到交易记录发生改变的区块,最终导致"断链",除非这个篡改记录的人拥有极其强大的算力能把被篡改之后所有的区块的交易记录重新做一遍哈希运算,把后续所有的区块都修改了,并且修改速度能超过其他剩余节点产生新区快的速度,使自己的这条链成为最长的链,让其他矿工误以为这条链才是正确的账本,否则修改就是空谈。
然而这么做的结果是没有任何好处的,抛开要投入的矿机成本不谈,全网都非常警惕那个节点的算力超过了全网算力的51%,毕竟区块链的精神就是去中心化的,不允许存在能够控制整个链的"中心化"节点,一旦出现某个节点算力过于集中,全网都会要求其降低算力,中心化的倾向一出现,比特币的价格肯定会大幅降低,这对篡改账本的人来说也没什么好处,偷鸡不成反蚀把米,几乎不可能发生如此自残的事件。
对于历史上曾发生某个矿池的算力超出了全网算力的30%,后来这个矿池主动降低了自己的算力,以保证全网算力的均衡。如何在任何一个区块链产品中实现社区自治,维护所有用户的利益,实现真正的去中心化,不但是个技术难题,恐怕也是政治难题。100%的民主决策流程是低效的,一个组织不可能事无巨细都让所有成员投票,这等同于一个国家天天公投。但是一旦有人被代表,就有利益,就有纷争。
比特币网络主要会通过以迅孙销下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:非对称加密可以保证攻击者无法伪造账户所有者的签名;共识算法可以保证网络中的历史交易不会被攻击者替换;非对称加密非对称加密算法3是目前广泛应用的加密技术,TLS 证书和电子签名等场景都使凯乱用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。请点击输入图片描述图 2 - 非对称加密特性比特币使用了非对称加密算法保证每一笔交易的安全,网络中的每一个账户(地址)都是一对秘钥中的公钥,账户的所有者会持有私钥,下面就是一对刚刚生成的比特币地址和私钥4:Address: 13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnKPrivate Key: 469d998dd4db3dfdd411fa56574e52b6be318f993ca696cc5c683c45e8e147eb需要注意的是,使用网站生成比特币地址和私钥是极其危险的做法,我们并不清楚网站是否会存储私钥,所以建议使用比特币的客户端生成公私钥对。任何人通过上面的地址 13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnK 都可以向该账号转账;账号的持有者也可以使用私钥签名交易向其他地址转账,当我们想要向比特币网络中提交一笔新的交易时,需要先构建一个如下所示的交易结构:{ "txid":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f", "hash":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f", "version":1, "size":224, "vsize":224, "locktime":0, "vin": [...], "vout": [...], "hex":"0100000001a90b4101e6cbb75e1ff885b6358264627581e9f96db9ae609acec98d72422067000000006b483045022100c42c89eb2b10aeefe27caea63f562837b20290f0a095bda39bec37f2651af56b02204ee4260e81e31947d9297e7e9e027a231f5a7ae5e21015aabfdbdb9c6bbcc76e0121025e6e9ba5111117d49cfca477b9a0a5fba1dfcd18ef91724bc963f709c52128c4ffffffff02a037a0000000000017a91477df4f8c95e3d35a414d7946362460d3844c2c3187e6f6030b000000001976a914aba7915d5964406e8a02c3202f1f8a4a63e95c1388ac00000000", "blockhash":"0000000000000000000c23ca00756364067ce5e815deb5982969df476bfc0b5c", "confirmations":5, "time":1521981077, "blocktime":1521981077}接下来,我们可以使用持有的私钥对整个交易中的全部字段进行签名,然后将签名与交易打包并发送到网络中等待比特币网络的确认就可以了。在比特币的所有地址中,35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP 地址中目前持有 250,000 多个 Bitcoin5,目亩游前的市值大概为 20 亿美元。在只知道地址的情况下,我们来算一下获取该地址对应的私钥需要多长时间。比特币的私钥总共有 256 位,即 22562256 中可能性:115792089237316195423570985008687907853269984665640564039457584007913129639936115792089237316195423570985008687907853269984665640564039457584007913129639936目前我们没有较为快捷的破解手段,只能使用暴力破解计算私钥。假设我们使用 IBM 在 2018 年推出的超级计算机 Summit6,它能每秒能做 1.4∗10171.4∗1017 次浮点数计算,假设该计算机可以每秒计算相同次数的公私钥对(计算公私钥对远比一次浮点数计算复杂),想要找到存放 20 亿美元资产的地址对应的私钥需要如下所示的时间:1.15∗1077365∗86400∗1.4∗1017=2.9∗1052年1.15∗1077365∗86400∗1.4∗1017=2.9∗1052年我们整个宇宙的存在时间也只是破解该私钥时间的几十亿分之一,所以在目前的计算能力没有革命性突破的前提下,想要通过暴力破解的方式获取公钥对应的私钥只有理论上的可能性,在实践中是完全不可能的7。共识算法MySQL 等数据库以行为单位存储数据,而比特币这个分布式数据库中存储的基本单位是区块,区块通过哈希指针连接就会构成一棵树,如下图所示,图中绿色的最长链就是网络的主链。请点击输入图片描述图 3 - 区块链和主链如何让网络中的所有节点对下一个区块中的内容达成共识是比特币需要解决的关键问题,只有让节点对数据达成一致才会保证过去的交易不会被篡改,但是作为在公网运行的分布式数据库,它面对的场景非常复杂,需要解决拜占庭将军问题下的分布式一致性问题。拜占庭将军问题是 Leslie Lamport 在 The Byzantine Generals Problem 论文中提出的分布式领域的容错问题,它是分布式领域中最复杂、最严格的容错模型8。在该模型下,系统不会对集群中的节点做任何的限制,它们可以向其他节点发送随机数据、错误数据,也可以选择不响应其他节点的请求,这些无法预测的行为使得容错这一问题变得更加复杂。拜占庭将军问题描述了一个如下的场景,有一组将军分别指挥一部分军队,每一个将军都不知道其它将军是否是可靠的,也不知道其他将军传递的信息是否可靠,但是它们需要通过投票选择是否要进攻或者撤退:请点击输入图片描述图 4 - 拜占庭将军问题区块链技术使用 共识算法 和激励让多个节点在拜占庭将军场景下实现分布式一致性。比特币使用如下的规则让多个节点实现分布式一致性:引入工作量证明 — 让节点在提交新的区块之前计算满足特定条件的哈希,取代传统分布式一致性算法中,一人一票(或者一节点一票)的设定;引入最长链是主链的设定 — 只有主链上的交易才被认为是合法交易;引入激励 — 提交区块的节点可以获得比特币奖励;通过以上的规则,各个节点会在最长的链上计算哈希,努力提交合法的区块。然而一旦节点中有人掌握了 51% 以上的计算能力,它能通过强大的算力改变区块链的历史。因为区块具有连续性,所以前一个区块的改变会使后一个区块计算的哈希失效,如图 4 所示,如果攻击者需要改变主链中的倒数第三个黄色区块,它需要连续构建四个区块才能完成对历史的篡改,其他的节点才会在这条更长的链上继续计算:请点击输入图片描述图 4 - 51% 攻击1使用如下所示的代码可以计算在无限长的时间中,攻击者持有 51% 算力时,改写历史 0 ~ 9 个区块的概率9:#include#includedouble attackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum;}int main() { for (int i = 0; i < 10; i++) { printf("z=%d, p=%f\\n", i, attackerSuccessProbability(0.51, i)); } return 0;}通过上述的计算我们会发现,在无限长的时间中,占有全网算力的节点能够发起 51% 攻击修改历史的概率是 100%;但是在有限长的时间中,因为比特币中的算力是相对动态的,比特币网络的节点也在避免出现单节点占有 51% 以上算力的情况,所以想要篡改比特币的历史还是比较困难的,不过在一些小众的、算力没有保证的一些区块链网络中,51% 攻击还是极其常见的10。防范 51% 攻击方法也很简单,在多数的区块链网络中,刚刚加入区块链网络中的交易都是未确认的,只要这些区块后面追加了数量足够的区块,区块中的交易才会被确认。比特币中的交易确认数就是 6 个,而比特币平均 10 分钟生成一个块,所以一次交易的确认时间大概为 60 分钟,这也是为了保证安全性不得不做出的牺牲。不过,这种增加确认数的做法也不能保证 100% 的安全,我们也只能在不影响用户体验的情况下,尽可能增加攻击者的成本。总结研究比特币这样的区块链技术还是非常有趣的,作为一个分布式的数据库,它也会遇到分布式系统经常会遇到的问题,例如节点不可靠等问题;同时作为一个金融系统和账本,它也会面对更加复杂的交易确认和验证场景。比特币网络的设计非常有趣,它是技术和金融两个交叉领域结合后的产物,非常值得我们花时间研究背后的原理。比特币并不能 100% 防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题 — 比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。
区块链主要解决的交易的信任和安全问题,通过每个独立的节点的去中心化实现不可篡改(依赖分布式节点的共识机制),通过非对称交易算法实现仅公开交易信息,对交易人信息保密。 辅助理解:某种程度的逆运算 挖矿就是获取新的交易信息的记账权的过程。 比特币记账(记录交易信息,也就是挖矿)的过程,也是比特币发行的过程,会奖励第一个完成挖矿计算的节点一定数量的比特币。 挖矿的规则: 注意事项:庆并桐 一条成功计算成功的信息摘要:首位18位连续为0的哈希值 涉及3个算法: 账号和秘钥是不可逆推算的,秘钥是可以推算出账号的,但是账号是无法推算秘钥的,这样张三亮出私钥,就可以证明是张三账号的持有者,但是别人知道张三账号,却无法推算出张三的私钥。 在验证阶段,通过夹杂私钥生成的签名摘要+账号信息,必须要可以验证是否能匹配成功,这就需要加密算法的设计,这三个算法必须有设计上面的关联性 用户张三给李四的账号发起一笔转账为例。 用户张三,在系统中申请一个用户账号,创建的同时会收到一个私钥(通过私钥证明自己是张三)。 假设张三现在已经有10比特币,要转账给李四。 那么张三利用通过自己账号来发起一笔交易 发起人:账号张三 接收人:账号李四 转账金额:10比特币 这笔交易要广播出来,就有几个问题 为了方便节点之间更快的完成交易信息的核对,可以对交易信息进行哈希运算,这样李四和王二比对交易信息的时候,比如比对这个交易信息的时候,只需要比对哈希值就可以知道是不是同一笔交易,交易信息是否完全一样,而不需要比对 发起人账号、收款人账号、转账金誉坦额等这些信息 哈希运算:Hash(交易信息(出账人账号,紧张人账号李四,转账金额10比特币)) 获得交易摘要 签名信息不可伪造是因为签名的参数涉及到私钥 签名的哈希运算:sign(交易摘要信息,私钥) -->签名摘要 开始广播,现在有一个交易信息:信息为***,信息签名为:签名摘要,大家可以开始验证,验证成功请记账。 验证的过程:verify(签名信息,出账人账号),现实生活场景中的签名字迹和签名人的姓名,是否对的上。 最后王二、麻子等等村民都收到了这蔽物个广播,但是王二速度最快完成了记账,马上通过村里的广播广而告之,我对这笔交易率先记账成功了 (因为大家的账本都只记录交易信息,不记录余额的,假设张三频繁的发送转账,要统计几年的交易记录后的余额,也是要考验村民的计算能力的(为了方便理解,你可以这么认为,实际上是挖矿的过程)), 你们村民你们就不要再算了,因为我是第一个完成校验计算的,张三的余额是够的,李四的账号也是存在的,我宣布该笔交易有效,同时我有权利获得了相应的奖励,大家一起开始记录,我的账户获得奖励1个比特币,同时你们复制我的结果,当然还有我的计算过程编号。 整个交易才算完成。 只要大家都记账了这个操作就可以了,因为是虚拟货币,类似于银行转账,而不是纸币交易,只需要在银行的系统中张三账号的余额-10,李四的账号+10即可,只不过这里的银行账本是比特币所有节点的账本都做修改。 另外,从安全角度来说,还保护了张三和李四的真实信息的隐私,因为大家看到的只是张三的账号、李四的账号,这只是两个神奇的数字,并不知道发起人是张三,收款人是李四。但是可以确认,这个交易是持有张三账号的人发起的,而不是其它人伪造的,至于张三到底是谁,住在哪里,哪个国家的,就不得而知了。
比如说,我通过支付宝给你转了1000块钱,我这里一发送,你那里立刻就收到了。这样看似咱俩直接打交道的金融交易,其实是有的。第一,转账用的人民币有中心的。人民币在现实中是一张纸,在互联网上是一个数字,只有中国人民银行才伏磨能发行人民币。如果有人自己印一张人民币,画得再像也是违物历法行为,所有的人民币都离不开中国人民银行这个中心。第二,支付宝的转账交易有中心。虽然是咱们两个在手机上转账,但背后是通过支付宝的服务器来实现的,相当于我现把钱交给支付宝这个中心,然后支付宝再把钱交给你。如果某一天支付宝的服务器出故障了,我们的支付宝也就不通了,所以用支付宝转账离不开支付宝这个中心。以上说的两个中心,比特币完全不存在。有没有一个中心去负责比特币转账?没有,两个人之间转账就是通过互联网,只要能上网,没办法阻止交易,比特币转账交易是通过使用比特币的人一起确认的。在日常的交易中,“去中心化”和“中心化”都有各自的利弊,它们都在各自的领域中发挥着自己的作用,关键是看未来运用的规则谁能占得先机,更加方便安全的融入市场,我们就拭目以待了。相关信息中心化的问题很多,比如央行不需要经过你的同意,就可以无穷无尽地印钞票,掠夺你的财富;你在银行的钱,实际上不是你的钱,而是银行对你的负债。你并不总能从银行里取出你的钱,银行有可能一天只允许你取60欧元,甚至有可能强制没收你的存款。虽说私有财产神圣不可侵犯,但人们对此毫无办法。在比特币中这些劣行将不复存在,比特缺蚂斗币是一个完全脱离银行,只依靠互联网运行的货币系统,即使是政府执法部门,也无法查封或没收比特币;除非彻底关停互联网,否则也无法封杀比特币网络。在比特币系统里,你能真正掌握你的钱,而不是通过银行间接掌握你的钱,比特币在人类历史上第一次用技术手段保证了私有财产神圣不可侵犯。
版权声明:本文标题:比特币交易在去中心化机制下如何保证不可篡改?内容由互联网整理发布,该文观点仅代表作者本人,转载请联系作者并注明出处:http://www.0792jiaju.com/post/2045.html,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发表评论