区块链图片高清
⑴ 漫画图解 什么是区块链
漫画图解:什么是区块链
什么是区块链?
区块链,英文 Blockchain,本质上是一种去中心化的分布式数据库。任何人只要架设自己的服务器,接入区块链网络,都可以成为这个庞大网络的一个节点。
区块链既然本质是数据库,里面究竟存储了什么东西呢?让我们来了解一下区块链的基本单元:区块(Block)。
一个区块分为两大部分:
1.区块头
区块头里面存储着区块的头信息,包含上一个区块的哈希值(PreHash),本区块体的哈希值(Hash),以及时间戳(TimeStamp)等等。
2.区块体
区块体存储着这个区块的详细数据(Data),这个数据包含若干行记录,可以是交易信息,也可以是其他某种信息。
刚才提及的哈希值又是什么意思呢?
想必大家都听说过MD5,MD5就是典型的哈希算法,可以把一串任意长度的明文转化成一串固定长度(128bit)的字符串,这个字符串就是哈希值。
而在我们的区块链中,采用的是一种更为复杂的哈希算法,叫做SHA256。最新的数据信息(比如交易记录)经过一系列复杂的计算,最终会通过这个哈希算法转化成了长度为256bit的哈希值字符串,也就是区块头当中的Hash,格式如下:
区块与Hash是一一对应的,Hash可以当做是区块的唯一标识。
不同的区块之间是如何进行关联的呢?依靠Hash和PreHash来关联。每一个区块的PreHash和前一个区块的Hash值是相等的。
为什么要计算区块的哈希值呢?
既然区块链是一个链状结构,就必然存在链条的头节点(第一个区块)和尾节点(最后一个区块)。一旦有人计算出区块链最新数据信息的哈希值,相当于对最新的交易记录进行打包,新的区块会被创建出来,衔接在区块链的末尾。
新区块头的Hash就是刚刚计算出的哈希值,PreHash等于上一个区块的Hash。区块体的Data存储的是打包前的交易记录,这部分数据信息已经变得不可修改。
这个计算Hash值,创建新区块的过程就叫做挖矿。
用于进行海量计算的服务器,叫做矿机。
操作计算的工作人员,叫做矿工。
计算哈希值究竟难在哪里?咱们来做一个最粗浅的解释,哈希值计算的公式如下:
Hash = SHA-256(最后一个区块的Hash + 新区块基本信息 + 交易记录信息 + 随机数)
其中,交易记录信息也是一串哈希值,它的计算涉及到一个数据结构 Merkle Tree。有兴趣的小伙伴可以查阅相关资料,我们暂时不做展开介绍。
这里关键的计算难点在于随机数的生成。猥琐的区块链发明者为了增大Hash的计算难度,要求Hash结果的前72bit必须都是0,这个几率实在是太小太小。
由于(最后一个区块的Hash + 新区块基本信息 + 交易记录信息)是固定的,所以能否获得符合要求的Hash,完全取决于随机数的值。挖矿者必须经过海量计算,反复生成随机数进行“撞大运”一般的尝试,才有可能得到正确的Hash,从而挖矿成功。
同时,区块头内还包含着一个动态的难度系数,当全世界的硬件计算能力越来越快的时候,区块链的难度系数也会水涨船高,使得全网平均每10分钟才能产生出一个新区块。
小伙伴们明白挖矿有多么难了吧?需要补充的是,不同的区块链应用在细节上是不同的,这里所描述的挖矿规则是以比特币为例。
区块链的应用
比特币(BitCoin)的概念最初由中本聪于2008年提出,而后根据这一思路设计发布了开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。
什么是P2P网络呢?
传统的货币都是由中央银行统一发行,所有的个人储蓄也是由银行统一管理,这是典型的中心化系统。
而比特币则是部署在一个全世界众多对等节点组成的去中心化网络之上。每一个节点都有资格对这种数字货币进行记录和发行。
至于比特币底层的数据存储,正是基于了区块链技术。比特币的每一笔交易,都对应了区块体数据中的一行,简单的示意如下:
交易记录的每一行都包含时间戳、交易明细、数字签名。
表格中只是为了方便理解。实际存储的交易明细是匿名的,只会记录支付方和收款方的钱包地址。
至于数字签名呢,可以理解为每一条单笔交易的防伪标识,由非对称加密算法所生成。
接下来说一说比特币矿工的奖励:
比特币协议规定,挖到新区块的矿工将获得奖励,从2008年起是50个比特币,然后每4年减半,目前2018年是12.5个比特币。流通中新增的比特币都是这样诞生的,也难怪大家对挖掘比特币的工作如此趋之若鹜!
区块链的优势和劣势
区块链的优势:
1.去中心化
区块链不依赖于某个中心节点,整个系统的数据由全网所有对等节点共同维护,都可以进行数据的存储和检验。这样一来,除非攻击者黑掉全网半数以上的节点,否则整个系统是不会遭到破坏的。
2.信息不可篡改
区块内的数据是无法被篡改的。一旦数据遭到篡改哪怕一丁点,整个区块对应的哈希值就会随之改变,不再是一个有效的哈希值,后面链接的区块也会随之断裂。
区块链的劣势:
1.过度消耗能源
想要生成一个新的区块,必须要大量服务器资源进行大量无谓的尝试性计算,严重耗费电能。
2.信息的网络延迟
以比特币为例,任何一笔交易数据都需要同步到其他所有节点,同步过程中难免会受到网络传输延迟的影响,带来较长的耗时。
几点补充:
1.本漫画部分内容参考了阮一峰的博文《区块链入门教程》,感谢这位大神的科普。
2.由于篇幅有限,关于Merkle Tree 和 非对称加密 的知识暂时没有展开细讲,有兴趣的小伙伴们可以查阅资料进行更深一步的学习。
⑵ 【区块链思维导图】002:比特币
在这里,杰Sir为你送出第002张区块链思维导图:002比特币~
下面是比特币的相关内容简述:
比特币(英语:Bitcoin)是一种去中心化,非普遍全球可支付的电子加密货币。比特币由中本聪(又译中本哲史)(化名)于2009年1月3日,基于无国界的对等网络,用共识主动性开源软件发明创立。截至目前2018年2月12日,比特币是目前市场总值最高的加密货币。【1】
为什么会产生比特币这种加密货币呢?或者说,比特币为什么会广受大众的欢迎,从极客圈的潮流玩意逐渐走进普通人的日常生活投资之中??
有观点认为,比特币的问世是人们憎恨商品经济中国家主权货币超发、以及货币政策干预、向往礼物经济中社区共识货币自主的结果。相信大家都会对于“通货膨胀”的问题深有感触吧?
查阅资料可得:通货膨胀,一般定义为:在信用货币制度下,流通中的货币数量超过经济实际需要而引起的货币贬值和物价水平全面而持续的上涨--用更通俗的语言来说就是:在一段给定的时间内,给定经济体中的物价水平普遍持续增长,从而造成货币购买力的持续下降。【2】
在中国,我们可以用个形象的例子来说明:在改革开放之初的1980年左右,“万元户”都是很厉害的富翁了;而过了30多年后的今天,估计要到亿万资产的级别才能算得上“富翁”了吧?? 而这上千万倍的差距变化,背后就是因为货币超发而造成的货币贬值大问题 。
中本聪对于这种“通货膨胀”类的问题可谓是深恶痛绝的。于是,他提出了自己解决问题的方法论: 基于对技术的信仰和自由货币主义的信念,提出了区块链技术系统;并且以区块链技术为依托,创造了比特币 。
有趣的是,中本聪创造了比特币系统的第一个区块,即“创世区块”,并附有一句“The Times 03/Jan/2009 Chancellor on brink of second lout for banks”(2009年1月3日,财政大臣正处于实施第二轮银行紧急援助的边缘),而这句是当天泰晤士报的头版文章标题。
至此,人们自主发行货币系统的大胆尝试开始启动,而一旦启动了的试验车轮,便很难被阻挡下来。后来,比特币历经了不断的迭代发展,也产生了许许多多的硬分叉币种。
资料显示:
当然,比特币的发展也并不是一帆风顺的,黑客们会攻击比特币的交易网站;而很多的犯罪组织也会利用比特币进行非法的交易;甚至很多人至今认为比特币是一种“庞氏骗局”。
另外,名人大咖们对于比特币的褒贬也是不一的,资料显示:
诺贝尔经济学得主保罗·克鲁曼,认为“比特币是邪恶的”,发表了若干对于比特币的看法。
美银美林利率与外汇研究全球主管David Woo 认为“比特币能够成为电子商务的一种主要支付方式,并且成为传统货币交易的有力竞争者”。。。【3】
比特币到底是如何呢?每个人都会有自己不同的看法。不过,杰Sir觉得: 对于不清楚的新事物,在我们轻易地做下判断之前,不如先主动去学习去了解它吧。而学习比特币,先去了解比特币的白皮书就是一种很好的方法论 。
杰Sir在之前的文章里面也曾经写到过比特币的官方白皮书解读,欢迎大家查看:
题目:【说数字货币】比特币白皮书解读
链接: https://mp.weixin.qq.com/s?__biz=MzU1MTA2NDM1NA==&mid=2247483713&idx=1&sn=&chksm=5c761a#rd
总的来说,一个新的时代已经到来,区块链、比特币等新事物,必将会在未来展现出它们巨大的能量!我们都是时代的幸运儿与见证者,大家赶紧去学习、去了解区块链的世界吧!!!
注:
【1】摘自维基网络:比特币
【2】摘自网络:通货膨胀
【3】摘自维基网络:比特币
⑶ 图解什么是区块链
区块链这么火,都开始影响到我的生活了,不想了解也不行了的样子,今天来看看到底什么是区块链。
本文结构:
和它的名字一样,
区块链是由一组块组成的链,
块是包含信息的信息块,组成的链也就包含了信息。
区块链技术最早是在1991年由一群研究人员研发,用来给数字化文档打时间戳,使得这些文档不能被篡改。从那之后就基本上没有再发挥其他作用,直到2009年,中本聪采用区块链技术创造了数字加密货币-比特币。
一条区块链,就是一个对所有人完全公开的分布式账本,它有一个很有趣的属性: 一旦某些数据被记录到一条区块链中后,那么数据就很难再被改变。
来看一下 一个区块(block)的组成:
每一个区块包含了 一些数据,这个区块的哈希值,以及前一个区块的哈希值 。
区块中所保存的数据与区块链的类型有关,例如,比特币区块链中的区块保存了相关的交易信息,包括卖家,买家,以及交易比特币的数量。
每个区块包含了一个哈希值,哈希值用来标识一个区块和它所包含的所有内容,并且它是独一无二的,就像指纹一样。一旦某个区块被创建,它的哈希值就相对应的被计算出来了。如果改变区块中的某些内容会使得哈希值改变, 如果一个区块的指纹改变了,那它就再也不是之前的区块了 。
区块中包含的第三个元素是前一个区块的哈希值,这个元素使得区块之间可以形成链接,并且能够使得区块链十分的安全。
假设我们有一条区块链包含3个区块
每个区块包含了一个自己的哈希值以及前一个区块的哈希值
3号区块指向2号区块,2号区块又指向1号区块
1号区块有点特殊,它不能指向前一个区块,因为它是第一个
我们把1号区块叫做 创世区块 。
现在假设我们篡改了第二个区块
这将导致第二个区块的哈希值改变
接下来这就会导致3号区块以及3号区块连接的所有的后续区块变得非法
因为现在它们存储的前一个区块号的都变得非法
所以 单独改变一个块,将连带性地致使后面的所有内容都变成无效 。
但要 防止篡改,只有哈希是不够的
因为现在的计算机运算速度已经足够强大,并且能够每秒计算成千上万的哈希值
这样你完全可以篡改一个区块并且重新计算其他的区块的哈希值,使得你的区块再次变得合法。
所以 为了减少这种风险,区块链还采用了一种技术,叫做工作证明
这是一种减缓新区块创建过程的机制
在比特币区块链中,大概需要花费10分钟来完成所要求的工作证明,并且添加一个新的区块到区块链中
这个机制使得区块链的篡改更加困难
因为 一旦篡改了一个区块,就需要重新计算所有后续的区块的工作量证明 。
所以 区块链技术的安全性主要来自于哈希值以及工作量证明机制 。
区块链还有一种机制来 保护自身的安全性,那就是分布式
相对于用一个中心化的实体来管理区块链网络,区块链采用的是一种 peer-to-peer网络,并且所有人都可以加入
当有人加入这个网络时, 他就会得到整个区块链的复制
这个人就可以以此来验证是否所有的区块还是合法未篡改的,也就是不同的节点也可以借此互相验证。
当某人创建了一个新的区块时,
这个新的区块会被发送给网络上的所有人。
每个人再验证这个区块以确保这个区块没有被篡改过
如果所有的东西都被检验正确之后,那么每个人才能把这块新的区块加到自己的区块链上
我们可以称之为, 网络上的所有人达成了“共识” 。
区块链网络中的所有节点都达成共识
他们认同网络中哪些区块是合法的,哪些是不合法的
那些被篡改过的区块将会被网络上的其他用户拒绝
所以, 要成功篡改一个区块链,你需要篡改区块链上的所有区块
重新完成每个区块的工作量证明,并且控制区块链网络中超过50%的用户
只有这样,你篡改的区块才会被所有人承认
可以说, 这基本上是不可能做得到的!
区块链技术本身也在不断地发展
例如后来的一个技术改进,叫做智能合约
智能合约 是一些存放在区块链上的简单的程序
它能基于合约内所记载的条件自动执行, 只要条件成立,依照合约自动完成交易
例如在特定条件下可以实现自动化比特币交易。
学习资料:
https://www.youtube.com/watch?v=SSo_EIwHSd4
⑷ 分布式存储网络Filecoin是什么
Filecoin是IPFS上的一个代币,而Filecoin就是通过贡献闲置的硬盘来作为奖励矿工的一种方式。Filecoin采用了一种全新的算法(工作量证明),简单的来说,你拥有的硬盘容量够大,那么你获取的Filecoin奖励就越多。
Filecoin是一个去中心化分布式存储网络,是IPFS的唯一激励层。Filecoin采用了区块链通证体系发行了Token,Token简称FIL。Filecoin基于IPFS协议将云存储构建了一个去中心化的存储交易市场,包括「存储」和「检索」两个市场。这个市场运行在有着本地协议令牌(FIL)的区块链,矿工可以通过为客户提供存储来获取FIL;同样的,客户可以通过花费FIL来雇佣矿工来存储或分发数据。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
⑸ 什么是区块链
区块链的意思是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“蠢并不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。
它最早出现在1991年,由一群研究人员用来给数字化文档打时间戳。以使得这些文档不能被篡改,看上去区块链技术就像一位公证人一样。
一条区块链就是对所有人完全公开的分布式账本,它有一个很有趣的属性:一旦数据被记录到区块链中后就带烂迹很难再发生改变。那么它到底是如何工作的呢?接下来让我们首先来观察一下单个区块的组成。
请点击输入图片描述(最多18字)
相关资料
一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等。
⑹ 什么是区块链技术区块链到底是什么什么叫区块链
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
【基础架构】
一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点 。
拓展资料:
【区块链核心技术】
区块链主要解决的交易的信任和安全问题,因此它针对这个问题提出了四个技术创新:
1.分布式账本,就是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点都记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证。
区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。
没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
2.非对称加密和授权技术,存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
3.共识机制,就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。
4.智能合约,智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息(包括医疗信息和风险发生的信息)都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔。
在保险公司的日常业务中,虽然交易不像银行和证券行业那样频繁,但是对可信数据的依赖是有增无减。因此,笔者认为利用区块链技术,从数据管理的角度切入,能够有效地帮助保险公司提高风险管理能力。具体来讲主要分投保人风险管理和保险公司的风险监督。
区块链-网络
⑺ 什么是区块链技术区块链是什么通俗解释
区块链 自从10月底以来,就一直处于风口浪尖。
什么是区块链技术
虽然说区块链问世已经有十几年了,但是很多人对于这个技术还不是很了解。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。从应用视角来看,区块链是一个分布式账本。
那么,为什么区块链叫区块链呢?
因为区块链本身就是一串区块链接而成,在这些区块上,都写满了交易记录,区块很像数据库的记录,每次写入数据,就是创建一个区块。而随着信息交流的扩大,一个区块与一个区块相继续,形成的结果就叫区块链。
区块链技术具有哪些特点呢
简单来说,区块链具有去中心化、开放性、不可篡改、匿名性等特点。
1、去中心化:
在区块链系统中,是没有一个中心的。
在区块链模式中,是分布式核算和存储,各节点自我验证、传递、管理信息,各个节点都是中心,也就是去中心化。
2、开放性:
区块链系统具有开放性的特点,数据是开放的,任何人都可以通过公开的接口查询区块链数据和开发相关应用。
3、信息无法篡改:
区块链系统中,数据一旦写入,就无法撤销篡改,除非掌控全部数据节点的51%,才有可能伪造出一条不存在的记录。所以,区块链技术具备一定的安全性。
4、隐私匿名性:
区块链里面的密码学技术,能够很好地实现身份隐匿。
各节点的身份信息不需要公开或验证,信息传递可以匿名进行。只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
小李向小王借出了10000元,小李找了两个人共同的还有小白来作证明。这种记账模式,就是中心化记账模式,小白就是中心。
然而,一年之后,小李想要回这笔钱的时候,小王适口否认自己借过他钱,原来小王给小白的女朋友在他的公司介绍了一份工作。
这就是中心化记账的弊端。
小李吃一堑长一智,以后有人再找他 借钱 ,他就在村里的微信说,我借给谁谁谁多少多少钱,这样,全村人都知道小李借给谁多少钱。
这样以后小李再要债的时候,对方就不会否认这个问题,因为村里的人脑海里已经建立了一个共识机制:你确实在小李那里借了多少多少钱。
这就是去中心化记账的优势。
因为毕竟有很多人来作证这笔交易,如果像作假的话,除非把全村一半以上的人都收买了,然而这个代价是很大的。
实际上,区块链具备的这些特点都是为了解决“信任”这个问题,区块链丰富的应用场景,也都基于区块链能解决信息不对称问题,同时区块链也有助于实现多个主体之间的协作信任与一致行动。
区块链的应用有哪些
除了数字货币,区块链的应用场景还有很多。
1、医学领域
区块链帮助实现智慧医疗,比如去医院看病,通过区块链模式,患者的就诊情况、病例、治疗情况等都清晰可见,节省大量医疗资源。
2、版权领域
区块链可以证明作品版权的真实性和唯一性,从音频、视频、图片、文字等作品的诞生到转让,都能被追踪和记录,并且形成不可篡改的信息。
3、物流领域
在物流领域应用了区块链之后,商品从生产到消费都有迹可循。
4、食品安全
区块链用于食品安全?通过区块链的可追溯性,可以轻松地从追踪他们食物的前世今生。
5、证券交易
比如传统的证券交易,需要经过多个机构的协调工作,才能完成,而区块链系统就可以独立地完成一条龙式服务可以让证券交易的时候更简单,效率更快。
不过,很多人对于区块链存在着很大的误解,其中最大的误解就是:区块链= 比特币
实际上,区块链和比特币并不是一回事儿,区块链是比特币的底层技术,比特币是区块链的第一个应用。
⑻ 【深度知识】区块链之加密原理图示(加密,签名)
先放一张以太坊的架构图:
在学习的过程中主要是采用单个模块了学习了解的,包括P2P,密码学,网络,协议等。直接开始总结:
秘钥分配问题也就是秘钥的传输问题,如果对称秘钥,那么只能在线下进行秘钥的交换。如果在线上传输秘钥,那就有可能被拦截。所以采用非对称加密,两把钥匙,一把私钥自留,一把公钥公开。公钥可以在网上传输。不用线下交易。保证数据的安全性。
如上图,A节点发送数据到B节点,此时采用公钥加密。A节点从自己的公钥中获取到B节点的公钥对明文数据加密,得到密文发送给B节点。而B节点采用自己的私钥解密。
2、无法解决消息篡改。
如上图,A节点采用B的公钥进行加密,然后将密文传输给B节点。B节点拿A节点的公钥将密文解密。
1、由于A的公钥是公开的,一旦网上黑客拦截消息,密文形同虚设。说白了,这种加密方式,只要拦截消息,就都能解开。
2、同样存在无法确定消息来源的问题,和消息篡改的问题。
如上图,A节点在发送数据前,先用B的公钥加密,得到密文1,再用A的私钥对密文1加密得到密文2。而B节点得到密文后,先用A的公钥解密,得到密文1,之后用B的私钥解密得到明文。
1、当网络上拦截到数据密文2时, 由于A的公钥是公开的,故可以用A的公钥对密文2解密,就得到了密文1。所以这样看起来是双重加密,其实最后一层的私钥签名是无效的。一般来讲,我们都希望签名是签在最原始的数据上。如果签名放在后面,由于公钥是公开的,签名就缺乏安全性。
2、存在性能问题,非对称加密本身效率就很低下,还进行了两次加密过程。
如上图,A节点先用A的私钥加密,之后用B的公钥加密。B节点收到消息后,先采用B的私钥解密,然后再利用A的公钥解密。
1、当密文数据2被黑客拦截后,由于密文2只能采用B的私钥解密,而B的私钥只有B节点有,其他人无法机密。故安全性最高。
2、当B节点解密得到密文1后, 只能采用A的公钥来解密。而只有经过A的私钥加密的数据才能用A的公钥解密成功,A的私钥只有A节点有,所以可以确定数据是由A节点传输过来的。
经两次非对称加密,性能问题比较严重。
基于以上篡改数据的问题,我们引入了消息认证。经过消息认证后的加密流程如下:
当A节点发送消息前,先对明文数据做一次散列计算。得到一个摘要, 之后将照耀与原始数据同时发送给B节点。当B节点接收到消息后,对消息解密。解析出其中的散列摘要和原始数据,然后再对原始数据进行一次同样的散列计算得到摘要1, 比较摘要与摘要1。如果相同则未被篡改,如果不同则表示已经被篡改。
在传输过程中,密文2只要被篡改,最后导致的hash与hash1就会产生不同。
无法解决签名问题,也就是双方相互攻击。A对于自己发送的消息始终不承认。比如A对B发送了一条错误消息,导致B有损失。但A抵赖不是自己发送的。
在(三)的过程中,没有办法解决交互双方相互攻击。什么意思呢? 有可能是因为A发送的消息,对A节点不利,后来A就抵赖这消息不是它发送的。
为了解决这个问题,故引入了签名。这里我们将(二)-4中的加密方式,与消息签名合并设计在一起。
在上图中,我们利用A节点的私钥对其发送的摘要信息进行签名,然后将签名+原文,再利用B的公钥进行加密。而B得到密文后,先用B的私钥解密,然后 对摘要再用A的公钥解密,只有比较两次摘要的内容是否相同。这既避免了防篡改问题,有规避了双方攻击问题。因为A对信息进行了签名,故是无法抵赖的。
为了解决非对称加密数据时的性能问题,故往往采用混合加密。这里就需要引入对称加密,如下图:
在对数据加密时,我们采用了双方共享的对称秘钥来加密。而对称秘钥尽量不要在网络上传输,以免丢失。这里的共享对称秘钥是根据自己的私钥和对方的公钥计算出的,然后适用对称秘钥对数据加密。而对方接收到数据时,也计算出对称秘钥然后对密文解密。
以上这种对称秘钥是不安全的,因为A的私钥和B的公钥一般短期内固定,所以共享对称秘钥也是固定不变的。为了增强安全性,最好的方式是每次交互都生成一个临时的共享对称秘钥。那么如何才能在每次交互过程中生成一个随机的对称秘钥,且不需要传输呢?
那么如何生成随机的共享秘钥进行加密呢?
对于发送方A节点,在每次发送时,都生成一个临时非对称秘钥对,然后根据B节点的公钥 和 临时的非对称私钥 可以计算出一个对称秘钥(KA算法-Key Agreement)。然后利用该对称秘钥对数据进行加密,针对共享秘钥这里的流程如下:
对于B节点,当接收到传输过来的数据时,解析出其中A节点的随机公钥,之后利用A节点的随机公钥 与 B节点自身的私钥 计算出对称秘钥(KA算法)。之后利用对称秘钥机密数据。
对于以上加密方式,其实仍然存在很多问题,比如如何避免重放攻击(在消息中加入 Nonce ),再比如彩虹表(参考 KDF机制解决 )之类的问题。由于时间及能力有限,故暂时忽略。
那么究竟应该采用何种加密呢?
主要还是基于要传输的数据的安全等级来考量。不重要的数据其实做好认证和签名就可以,但是很重要的数据就需要采用安全等级比较高的加密方案了。
密码套件 是一个网络协议的概念。其中主要包括身份认证、加密、消息认证(MAC)、秘钥交换的算法组成。
在整个网络的传输过程中,根据密码套件主要分如下几大类算法:
秘钥交换算法:比如ECDHE、RSA。主要用于客户端和服务端握手时如何进行身份验证。
消息认证算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。
批量加密算法:比如AES, 主要用于加密信息流。
伪随机数算法:例如TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个 主密钥 ——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。
在网络中,一次消息的传输一般需要在如下4个阶段分别进行加密,才能保证消息安全、可靠的传输。
握手/网络协商阶段:
在双方进行握手阶段,需要进行链接的协商。主要的加密算法包括RSA、DH、ECDH等
身份认证阶段:
身份认证阶段,需要确定发送的消息的来源来源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA签名)等。
消息加密阶段:
消息加密指对发送的信息流进行加密。主要采用的加密方式包括DES、RC4、AES等。
消息身份认证阶段/防篡改阶段:
主要是保证消息在传输过程中确保没有被篡改过。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。
ECC :Elliptic Curves Cryptography,椭圆曲线密码编码学。是一种根据椭圆上点倍积生成 公钥、私钥的算法。用于生成公私秘钥。
ECDSA :用于数字签名,是一种数字签名算法。一种有效的数字签名使接收者有理由相信消息是由已知的发送者创建的,从而发送者不能否认已经发送了消息(身份验证和不可否认),并且消息在运输过程中没有改变。ECDSA签名算法是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。 主要用于身份认证阶段 。
ECDH :也是基于ECC算法的霍夫曼树秘钥,通过ECDH,双方可以在不共享任何秘密的前提下协商出一个共享秘密,并且是这种共享秘钥是为当前的通信暂时性的随机生成的,通信一旦中断秘钥就消失。 主要用于握手磋商阶段。
ECIES: 是一种集成加密方案,也可称为一种混合加密方案,它提供了对所选择的明文和选择的密码文本攻击的语义安全性。ECIES可以使用不同类型的函数:秘钥协商函数(KA),秘钥推导函数(KDF),对称加密方案(ENC),哈希函数(HASH), H-MAC函数(MAC)。
ECC 是椭圆加密算法,主要讲述了按照公私钥怎么在椭圆上产生,并且不可逆。 ECDSA 则主要是采用ECC算法怎么来做签名, ECDH 则是采用ECC算法怎么生成对称秘钥。以上三者都是对ECC加密算法的应用。而现实场景中,我们往往会采用混合加密(对称加密,非对称加密结合使用,签名技术等一起使用)。 ECIES 就是底层利用ECC算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。
<meta charset="utf-8">
这个先订条件是为了保证曲线不包含奇点。
所以,随着曲线参数a和b的不断变化,曲线也呈现出了不同的形状。比如:
所有的非对称加密的基本原理基本都是基于一个公式 K = k G。其中K代表公钥,k代表私钥,G代表某一个选取的基点。非对称加密的算法 就是要保证 该公式 不可进行逆运算( 也就是说G/K是无法计算的 )。 *
ECC是如何计算出公私钥呢?这里我按照我自己的理解来描述。
我理解,ECC的核心思想就是:选择曲线上的一个基点G,之后随机在ECC曲线上取一个点k(作为私钥),然后根据k G计算出我们的公钥K。并且保证公钥K也要在曲线上。*
那么k G怎么计算呢?如何计算k G才能保证最后的结果不可逆呢?这就是ECC算法要解决的。
首先,我们先随便选择一条ECC曲线,a = -3, b = 7 得到如下曲线:
在这个曲线上,我随机选取两个点,这两个点的乘法怎么算呢?我们可以简化下问题,乘法是都可以用加法表示的,比如2 2 = 2+2,3 5 = 5+5+5。 那么我们只要能在曲线上计算出加法,理论上就能算乘法。所以,只要能在这个曲线上进行加法计算,理论上就可以来计算乘法,理论上也就可以计算k*G这种表达式的值。
曲线上两点的加法又怎么算呢?这里ECC为了保证不可逆性,在曲线上自定义了加法体系。
现实中,1+1=2,2+2=4,但在ECC算法里,我们理解的这种加法体系是不可能。故需要自定义一套适用于该曲线的加法体系。
ECC定义,在图形中随机找一条直线,与ECC曲线相交于三个点(也有可能是两个点),这三点分别是P、Q、R。
那么P+Q+R = 0。其中0 不是坐标轴上的0点,而是ECC中的无穷远点。也就是说定义了无穷远点为0点。
同样,我们就能得出 P+Q = -R。 由于R 与-R是关于X轴对称的,所以我们就能在曲线上找到其坐标。
P+R+Q = 0, 故P+R = -Q , 如上图。
以上就描述了ECC曲线的世界里是如何进行加法运算的。
从上图可看出,直线与曲线只有两个交点,也就是说 直线是曲线的切线。此时P,R 重合了。
也就是P = R, 根据上述ECC的加法体系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0
于是乎得到 2 P = -Q (是不是与我们非对称算法的公式 K = k G 越来越近了)。
于是我们得出一个结论,可以算乘法,不过只有在切点的时候才能算乘法,而且只能算2的乘法。
假若 2 可以变成任意个数进行想乘,那么就能代表在ECC曲线里可以进行乘法运算,那么ECC算法就能满足非对称加密算法的要求了。
那么我们是不是可以随机任何一个数的乘法都可以算呢? 答案是肯定的。 也就是点倍积 计算方式。
选一个随机数 k, 那么k * P等于多少呢?
我们知道在计算机的世界里,所有的都是二进制的,ECC既然能算2的乘法,那么我们可以将随机数k描 述成二进制然后计算。假若k = 151 = 10010111
由于2 P = -Q 所以 这样就计算出了k P。 这就是点倍积算法 。所以在ECC的曲线体系下是可以来计算乘法,那么以为这非对称加密的方式是可行的。
至于为什么这样计算 是不可逆的。这需要大量的推演,我也不了解。但是我觉得可以这样理解:
我们的手表上,一般都有时间刻度。现在如果把1990年01月01日0点0分0秒作为起始点,如果告诉你至起始点为止时间流逝了 整1年,那么我们是可以计算出现在的时间的,也就是能在手表上将时分秒指针应该指向00:00:00。但是反过来,我说现在手表上的时分秒指针指向了00:00:00,你能告诉我至起始点算过了有几年了么?
ECDSA签名算法和其他DSA、RSA基本相似,都是采用私钥签名,公钥验证。只不过算法体系采用的是ECC的算法。交互的双方要采用同一套参数体系。签名原理如下:
在曲线上选取一个无穷远点为基点 G = (x,y)。随机在曲线上取一点k 作为私钥, K = k*G 计算出公钥。
签名过程:
生成随机数R, 计算出RG.
根据随机数R,消息M的HASH值H,以及私钥k, 计算出签名S = (H+kx)/R.
将消息M,RG,S发送给接收方。
签名验证过程:
接收到消息M, RG,S
根据消息计算出HASH值H
根据发送方的公钥K,计算 HG/S + xK/S, 将计算的结果与 RG比较。如果相等则验证成功。
公式推论:
HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG
在介绍原理前,说明一下ECC是满足结合律和交换律的,也就是说A+B+C = A+C+B = (A+C)+B。
这里举一个WIKI上的例子说明如何生成共享秘钥,也可以参考 Alice And Bob 的例子。
Alice 与Bob 要进行通信,双方前提都是基于 同一参数体系的ECC生成的 公钥和私钥。所以有ECC有共同的基点G。
生成秘钥阶段:
Alice 采用公钥算法 KA = ka * G ,生成了公钥KA和私钥ka, 并公开公钥KA。
Bob 采用公钥算法 KB = kb * G ,生成了公钥KB和私钥 kb, 并公开公钥KB。
计算ECDH阶段:
Alice 利用计算公式 Q = ka * KB 计算出一个秘钥Q。
Bob 利用计算公式 Q' = kb * KA 计算出一个秘钥Q'。
共享秘钥验证:
Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'
故 双方分别计算出的共享秘钥不需要进行公开就可采用Q进行加密。我们将Q称为共享秘钥。
在以太坊中,采用的ECIEC的加密套件中的其他内容:
1、其中HASH算法采用的是最安全的SHA3算法 Keccak 。
2、签名算法采用的是 ECDSA
3、认证方式采用的是 H-MAC
4、ECC的参数体系采用了secp256k1, 其他参数体系 参考这里
H-MAC 全程叫做 Hash-based Message Authentication Code. 其模型如下:
在 以太坊 的 UDP通信时(RPC通信加密方式不同),则采用了以上的实现方式,并扩展化了。
首先,以太坊的UDP通信的结构如下:
其中,sig是 经过 私钥加密的签名信息。mac是可以理解为整个消息的摘要, ptype是消息的事件类型,data则是经过RLP编码后的传输数据。
其UDP的整个的加密,认证,签名模型如下: