本篇文章主要给网友们分享区块链设计账户防篡改措施的知识,其中更加会对区块链如何防止欺诈进行更多的解释,如果能碰巧解决你现在面临的问题,记得关注本站!
区块链技术,也称为分布式账本技术。
在区块链里面,由于每个人(计算机)都有一模一样的账本,并且每个人(计算机)都有着完全相等的权利,因此不会由于单个人(计算机)失去联系或宕机,而导致整个系统崩溃。
既然有一模一样的账本,就意味着所有的数据都是公开透明的,每一个人可以看到每一个账户上到底有什么数字变化。
它非常有趣的特性就是,其中的数据无法篡改。因为系统会自动比较,会认为相同数量最多的账本是真的账本,少部分和别人数量不一样的账本是虚假的账本。
在这种情况下,任何人篡改自己的账本是没有任何意义的,因为除非你能够篡改整个系统里面大部分节点。
如果整个系统节点只有五个、十个节点也许还容易做到,但是如果有上万个甚至上十万个,并且还分布在互联网上的任何角落,除非某个人能控制世界上大多数的电脑,否则不太可能篡改这样大型的区块链
同学A和B在教室里抛硬币,赌谁打扫卫生,正面朝上,则A打扫,反面朝上,则B打扫,这个策略没有什么问题。
然而,如果把情景迁移到网络聊天室,A和B同样进行抛硬币的游戏,估计B就不会答应了,因为当A抛了硬币,B不论是猜
正面还是反面,A都可以说B猜错了。
怎么解决这个问题呢?要不先给抛硬币的结果加密,B再猜?这个方法可以试一下。
假设任意奇数代表硬币正面,任意偶数代表反面。A想一个数375,然后乘以一个258,把其结果告诉B为96750,并声明A想的375为密钥,由他保管。
在接下来验证结果时,A可以谎称258为他想的数,375为密钥,A还是立于不败之地。那如果A事先把密钥告诉B呢?B可以直接算出原始数字,失去了保密作用。
这种知道加密方法就知道了解密方法显然行不通,那有没有一种方法,知道了加密方法仍然无法恢复原文呢?
显然是有的,在加密过程中加入不可逆运算就OK了。A设计新的加密方式:
假设A想的数是375,进行加密:
B拿到结果120943,但他几乎不能根据120943反算出密匙375。
如果B想要验证A是否说谎:
终于可以抛硬币了……
这种丢掉一部分信息的加密方式称为“单向加密”,也叫 哈希算法 。
有个问题:
这个是有可能的,但可以解决,就是增加上述算法的难度,以致于A很难很难找到。
根据以上表述,一个可靠的哈希算法,应该满足:
密码学中的哈希函数有3个重要的性质,即 抗碰撞性、原像不可逆、难题友好性 。
碰撞性,就是指A同学事先找出一奇一偶使得哈希结果一致,在计算上是不可行的。
首先,把大空间桑拿的消息压缩到小空间上,碰撞肯定是存在的。假设哈希值长度固定为256位,如果顺序取1,2,…2 256 +1, 这2 256 +1个输入值,逐一计算其哈希值,肯定能找到两个输入值使得其哈希值相同。
A同学,看到这里时, 请不要高兴的太早。因为你得有时间把它算出来,才是你的。为什么这么说呢?
根据生日悖论,如果随机挑选其中的2 130 +1输入,则有99.8%的概率发现至少一对碰撞输入。那么对于哈希值长度为256为的哈希函数,平均需要完成2 128 次哈希计算,才能找到碰撞对。如果计算机每秒进行10000次哈希计算,需要约10 27 年才能完成2 128 次哈希计算。
A同学,不要想着作弊了,估计你活不了这么久。当然如果计算机运算能力大幅提升,倒是有可能。
那么完整性还用其他什么用途呢?
用来验证信息的完整性,因为如果信息在传递过程中别篡改,那么运行哈希计算得到的哈希值与原来的哈希值不一样。
所以,在区块链中,哈希函数的抗碰撞性可以用来做区块和交易的完整性验证。
因为一个哈希值对应无数个明文,理论上你并不知道哪个是。就如,4+5=9和2+7=9的结果一样,知道我输入的结果是9,但能知道我输入的是什么数字吗?
如果,对消息m进行哈希计算时,在引入一个随机的前缀r,依据哈希值H(r||m),难以恢复出消息m,这代表该哈希函数值隐藏了消息m。
所以,B同学,根据结果想反推出原数据,这是不大可能的事,就犹如大海里捞针。
难题好友性,指没有便捷的方法去产生一满足特殊要求的哈希值。是什么意思呢,通俗的讲,就是没有捷径,需要一步一步算出来。假如要求得到的哈希结果以若干个0开头,那么计算找到前3位均为0的哈希值和找到前6位均为0的哈希值,其所需的哈希计算次数是呈一定数量关系。
这个可以怎么用呢?在区块链中,可以作为共识算法中的工作量证明。
主要描述了哈希函数的3个重要性质: 抗碰撞性、原像不可逆、难题友好性 。
因为这些重要性质,区块链中的区块和交易的完整性验证、共识算法的工作量证明等功能用哈希函数来实现。
[1].邹均,张海宁.区块链技术指南[M].北京:机械出版社,2016.11
[2].长铗,韩锋.区块链从数字货币到信用社会[M].北京:中信出版社,2016.7
[3].张健.区块链定义未来金融与经济新格局[M].北京:机械工业出版社,2016.6
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。
没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
基于以上特点,这种数据存储技术是可以完美防止数据被篡改的可能性,在现实中也可以运用到很多领域之中,比我们的电子存证技术在电子合同签署上提供了更安全可靠的保证。
比特币网络主要会通过以下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:
非对称加密可以保证攻击者无法伪造账户所有者的签名;
共识算法可以保证网络中的历史交易不会被攻击者替换;
非对称加密
非对称加密算法3是目前广泛应用的加密技术,TLS 证书和电子签名等场景都使用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。
请点击输入图片描述
图 2 - 非对称加密特性
比特币使用了非对称加密算法保证每一笔交易的安全,网络中的每一个账户(地址)都是一对秘钥中的公钥,账户的所有者会持有私钥,下面就是一对刚刚生成的比特币地址和私钥4:
Address: 13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnK
Private 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
#include
double 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% 防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题 — 比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:
比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;
比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;
通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。
一、易保全区块链技术
易保全的区块链是基于BCOS开源平台搭建区块链设计账户防篡改措施,通过SHA-512哈希算法、时间戳服务、PBFT共识算法区块链设计账户防篡改措施,对元数据进行运算区块链设计账户防篡改措施,能灵活扩展联盟链机构以及节点。通过易保全进行区块链存证保全的数据都会以Hash值的形式存储在区块链上区块链设计账户防篡改措施,通过区块链去中心化、分布式存储等特点区块链设计账户防篡改措施,能有效保障数据的真实性与客观性,有效防篡改。
二、易保全区块链存证
易保全通过区块链技术,联合公证处、司法鉴定中心、仲裁委、互联网法院、版权保护中心、CA机构等发起,并对外开放的保全链开放平台。让电子数据从产生、存证、到最后的使用都能同步到保全链开放平台的各个节点上,做同步的监督与公证,并可出具相关证书,和进行区块链查询,有效保障数据的司法效力。
三、易保全区块链资质
目前,易保全已获得2018年中国创客50强(全国唯一区块链入选企业)、2018年国家工信部工业互联网试点示范项目(全国唯一区块链入选项目)、2019年国家⽹信办⾸批境内区块链信息服务备案企业、2019工业互联网(工业智能化)试点示范项目企业。
关于区块链设计账户防篡改措施和区块链如何防止欺诈的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
评论