区块链密封的关键是哈希函数
『壹』 区块链与电子存证的基础——哈希值简介
区块链与电子存证的基础——哈希值简介
哈希函数(hash function)是可以将任意大小的原始数据映射成固定长度值的函数,其得到的结果被称为“哈希值”,原始数据则被称为“消息”,哈希值也可称为“摘要”。
一、哈希函数的特点
固定长度输出:无论输入的消息有多长,哈希函数都会将其映射为一个固定长度的哈希值。
雪崩效应:好的哈希函数具有“雪崩效应”,即输入消息发生微小变化时,其哈希值会发生大幅改变。这一特性使得哈希函数在密码学和数据完整性校验中具有重要意义。
单向性:哈希函数是一个单向函数,只能从消息得到摘要,而无法从摘要得到消息。这一特性保证了哈希值的安全性,使得通过哈希值无法反推出原始消息。
二、哈希函数的应用
数据完整性校验:由于哈希函数的雪崩效应和单向性,可以用于对文件进行核验。通过计算出文件的哈希值并与另一文件的哈希值进行比较,可以判断这两个文件是否相同。这一应用在区块链技术中尤为重要,区块链通过计算每个区块的哈希值来确保数据的完整性和不可篡改性。
密码学应用:哈希函数在密码学中有着广泛的应用,如数字签名、消息认证码等。通过哈希函数对消息进行摘要,可以生成一个固定长度的哈希值,然后对该哈希值进行加密或签名,从而实现消息的认证和完整性校验。
电子存证:在电子存证领域,哈希值也被广泛应用。通过对电子数据进行哈希计算,可以生成一个唯一的哈希值作为电子数据的“指纹”。当需要验证电子数据的完整性时,只需重新计算其哈希值并与之前的哈希值进行比较即可。这一方法可以有效防止电子数据在存储或传输过程中被篡改。
三、常见的哈希函数
MD5:MD5是一种广泛使用的哈希函数,其摘要长度为128位(32个半角字符)。然而,由于MD5的碰撞概率较高,已被认为不再适合用于安全性要求高的场景。
SHA-1:SHA-1是另一种常见的哈希函数,其摘要长度为160位(40个半角字符)。尽管SHA-1在一段时间内被认为是安全的,但近年来也被发现存在碰撞问题,因此也不再适合用于高安全性要求的场景。
SHA-2:SHA-2是一系列哈希函数的集合,包括SHA-224、SHA-256、SHA-384和SHA-512等。其中,SHA-256的摘要长度为256位(64个半角字符),具有较高的安全性和较低的碰撞概率,因此被广泛用于安全性要求高的场景。
四、哈希碰撞与安全性
虽然哈希函数具有许多优点,但碰撞问题一直是其安全性方面的关注重点。碰撞是指两个不同的消息具有相同的哈希值。虽然自然发生碰撞的概率极低,但随着计算机技术的发展和哈希函数的广泛应用,碰撞问题逐渐凸显出来。
为了应对碰撞问题,需要采取一系列措施来提高哈希函数的安全性。例如,选择具有更高安全性的哈希函数(如SHA-256)、增加哈希值的长度、采用多哈希函数组合等方法。此外,在应用哈希函数时还需要注意避免使用弱密码或容易受到攻击的哈希函数。
综上所述,哈希函数作为区块链与电子存证的基础技术之一,在数据完整性校验、密码学应用和电子存证等领域发挥着重要作用。然而,随着技术的发展和碰撞问题的出现,需要不断研究和探索新的哈希函数和安全性措施来应对挑战。
『贰』 区块链如何防止篡改
区块链不可篡改的关键是区块链的每个区块头均封装有前一个区块的哈希码,这个机制就确保了区块链数据不可篡改的技术特征。
区块链是当前科技产业发展的趋势,“去中心化”和“不可篡改”是普通人所能脱口而出的技术优势。“去中心化”被很好地理解为一种非集中和无组织的行动。然而,从目前的发展来看,区块链技术的应用还比较薄弱和多中心。
区块链不可篡改的原因1.交易不可被篡改
2.区块体不可被篡改
3.区块头不可被篡改
4.区块链不可被篡改
拓展资料:
1、区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能
2、智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息(包括医疗信息和风险发生的信息)都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔。在保险公司的日常业务中,虽然交易不像银行和证券行业那样频繁,但是对可信数据的依赖是有增无减。因此,笔者认为利用区块链技术,从数据管理的角度切入,能够有效地帮助保险公司提高风险管理能力。具体来讲主要分投保人风险管理和保险公司的风险监督
3、区块链通过结点连接的散状网络分层结构,能够在整个网络中实现信息的全面传递,并能够检验信息的准确程度。这种特性一定程度上提高了物联网交易的便利性和智能化。区块链+大数据的解决方案就利用了大数据的自动筛选过滤模式,在区块链中建立信用资源,可双重提高交易的安全性,并提高物联网交易便利程度。为智能物流模式应用节约时间成本。区块链结点具有十分自由的进出能力,可独立的参与或离开区块链体系,不对整个区块链体系有任何干扰。区块链+大数据解决方案就利用了大数据的整合能力,促使物联网基础用户拓展更具有方向性,便于在智能物流的分散用户之间实现用户拓展
区块链技术
背景:比特币诞生之后,发现该技术很先进,才发现了区块链技术。比特币和区块链技术同时被发现。
1.1比特币诞生的目的:
①货币交易就有记录,即账本;
②中心化机构记账弊端——可篡改;易超发
比特币解决第一个问题:防篡改——hash函数
1.2hash函数(加密方式)
①作用:将任意长度的字符串,转换成固定长度(sha256)的输出。输出也被称为hash值。
②特点:很难找到两个不同的x和y,使得h(x)=h(y)。
③应用:md5文件加密
1.3区块链
①定义
区块:将总账本拆分成区块存储
区块链:在每个区块上,增加区块头。其中记录父区块的hash值。通过每个区块存储父区块的hash值,将所有的区块按照顺序连接起来,形成区块链。
②区块链如何防止交易记录被篡改
形成区块链后,篡改任一交易,会导致该交易区块hash值和其子区块中不同,发现篡改。
即使继续篡改子区块头中hash值,会导致子区块hash值和孙区块中不同,发现篡改。
1.4区块链本质
①比特币和区块链本质:一个人人可见的大账本,只记录交易。
②核心技术:通过密码学hash函数+数据结构,保证账本记录不可篡改。
③核心功能:创造信任。法币依靠政府公信力,比特币依靠技术。
1.5如何交易
①进行交易,需要有账号和密码,对应公钥和私钥
私钥:一串256位的二进制数字,获取不需要申请,甚至不需要电脑,自己抛硬币256次就生成了私钥
地址由私钥转化而成。地址不能反推私钥。
地址即身份,代表了在比特币世界的ID。
一个地址产生之后,只有进入区块链账本,才能被大家知道。
②数字签名技术
签名函数sign(张三的私钥,转账信息:张三转10元给李四)=本次转账签名
验证韩式verify(张三的地址,转账信息:张三转10元给李四,本次转账签名)=True
张三通过签名函数sign(),使用自己的私钥对本次交易进行签名。
任何人可以通过验证韩式vertify(),来验证此次签名是否有由持有张三私钥的张三本人发出。是返回true,反之为false。
sign()和verify()由密码学保证不被破解。·
③完成交易
张三将转账信息和签名在全网供内部。在账户有余额的前提下,验证签名是true后,即会记录到区块链账本中。一旦记录,张三的账户减少10元,李四增加10元。
支持一对一,一对多,多对已,多对多的交易方式。
比特币世界中,私钥就是一切!!!
1.6中心化记账
①中心化记账优点:
a.不管哪个中心记账,都不用太担心
b.中心化记账,效率高
②中心化记账缺点:
a拒绝服务攻击
b厌倦后停止服务
c中心机构易被攻击。比如破坏服务器、网络,监守自盗、法律终止、政府干预等
历史上所有有中心化机构的机密货币尝试都失败了。
比特币解决第二个问题:如何去中心化
1.7去中心化记账
①去中心化:人人都可以记账。每个人都可以保留完整的账本。
任何人都可以下载开源程序,参与P2P网络,监听全世界发送的交易,成为记账节点,参与记账。
②去中心化记账流程
某人发起一笔交易后,向全网广播。
每个记账节点,持续监听、持续全网交易。收到一笔新交易,验证准确性后,将其放入交易池并继续向其它节点传播。
因为网络传播,同一时间不同记账节点的交一次不一定相同。
每隔10分钟,从所有记账节点当中,按照某种方式抽取1名,将其交易池作为下一个区块,并向全网广播。
其它节点根据最新的区块中的交易,删除自己交易池中已经被记录的交易,继续记账,等待下一次被选中。
③去中心化记账特点
每隔10分钟产生一个区块,但不是所有在这10分钟之内的交易都能记录。
获得记账权的记账节点,将得到50个比特币的奖励。每21万个区块(约4年)后,奖励减半。总量约2100万枚,预计2040年开采完。
记录一个区块的奖励,也是比特币唯一的发行方式。
④如何分配记账权:POW(proofofwork)方式
记账几点通过计算一下数学题,来争夺记账权。
找到某随即数,使得一下不等式成立:
除了从0开始遍历随机数碰运气之外,没有其它解法,解题的过程,又叫做挖矿。
谁先解对,谁就得到记账权。
某记账节点率先找到解,即向全网公布。其他节点验证无误之后,在新区块之后重新开始新一轮的计算。这个方式被称为POW。
⑤难度调整
每个区块产生的时间并不是正好10分钟
随着比特币发展,全网算力不算提升。
为了应对算力的变化,每隔2016个区块(大约2周),会加大或者减少难度,使得每个区块产生的平均时间是10分钟。
#欧易OKEx##比特币[超话]##数字货币#
区块链为什么不可篡改?解析其基本原理区块链不可篡改的工作原理是什么?要理解这一点,我们需要引入一个概念:哈希算法。哈希算法有很多种,其基本功能是将任意长度的数据文件转换成唯一对应的定长字符串。
你可以理解为任何文件都会生成一串固定长度的乱码标签。
这个算法是不可逆的,也就是说,当你得到这个标签的时候,你无法逆向推导出原始数据文件。
如果数据文件中有细微的变化,比如添加了一个标点符号,那么重新哈希后,新的标签会和原来的标签有很大的不同。
从新旧标签之间的差异来推断数据文件发生了什么是不可能的。因此,很容易验证某个文件在某个时刻是否存在,或者两个文件是否相同。
正是这种不可逆转性决定了区块链的不可逆转性。在每个块中,除了十分钟内的转账交易数据之外,还有一个块头。
标头包含先前块数据的哈希值。这些hash逐层嵌套,长度固定,最后所有的块串联起来形成一个区块链。区块链包含了自链诞生以来发生的所有交易和新的货币发行。
如果我是个坏人,我会篡改协议。包括交易的发送者和接收者以及转账的金额。发送者发送的比特币可以一直追溯到该货币新发行的最早区块。
发送方拥有这些比特币的合法性由该货币的原始发行区块记录和所有与该货币相关的历史交易记录来保证。
因此,篡改一次交易,意味着后续所有的哈希和相关交易记录都要被再次篡改,这需要极高的计算能力和难度,成功概率为零。
区块链是怎样防止数据篡改的?区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。
没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
基于以上特点,这种数据存储技术是可以完美防止数据被篡改的可能性,在现实中也可以运用到很多领域之中,比我们的电子存证技术在电子合同签署上提供了更安全可靠的保证。
『叁』 区块链什么是哈希值,区块链哈希是什么意思
哈希值是什么意思?哈希值一般指哈希函数。
哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。
一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。
理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
哈希值概念简单普及:
1、哈希值其实就是一段数据,只不过这个数据有特殊的含义,它是某个文件或者某个字符串的DNA,或者身份证。
2、哈希算法(典型的有MD5,SHA-1等),将一段较长的数据映射为较短小的数据,这段小数据就是大数据的哈希值。
它有这样一个特点,他是唯一的,一旦数据发生了变化,哪怕是一个微小的变化,它的哈希值也会发生变化。另外一方面,既然是DNA,那就保证了没有两个数据的哈希值是完全相同的。
3、它常常用来判断两个文件是否相同。比如,从网络上下载某个文件,只要把这个文件原来的哈希值同下载后得到的文件的哈希值进行对比,如果相同,则表示两个文件完全一致,下载过程没有损坏文件。
而如果不一致,则表明下载得到的文件跟原来的文件不同,文件在下载过程中受到了损坏。
区块链中的哈希值是什么意思?
如果你对区块链领域有所了解,那么你一定听说过哈希值,或许我们在浏览区块链信息时会经常看到哈希值,但是如果让我们说说哈希值到底是什么,可能我们也并不能说明白。我知到,虽然很多人都已经进入币圈很久,但是对于区块链领域的一些概念还处于一个一知半解,知道又不完全清楚的状态。其实哈希就是一种压缩信息的方法,我们可以通过哈希将很长的一段文字压缩成一小段乱码,那么区块链中的哈希值是什么意思呢?现在就让我来为大家详细的讲解一下。
哈希值是将任意长度的输入字符串转换为密码并进行固定输出的过程。哈希值不是一个“密码”,我们不能通过解密哈希来检索原始数据,它是一个单向的加密函数。
区块链哈希是什么?如果是刚开始了解区块链,就需要结合“区块”的概念来一起理解了。每一个区块,包含的内容有数据信息,本区块的哈希值以及上一个区块的哈希值。区块中的数据信息,主要是交易双方的地址与此次交易数量还有交易时间信息等。而哈希值就是寻找到区块,继而了解到这些区块信息的钥匙。以上就是区块链中哈希的含义了。
区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。金窝窝集团分析其哈希算法的作用如下:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都接获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
在区块链中,每个块都有前一个块的哈希值,前一个块被称为当前块的父块,如果考虑父块有一个当前区块。它将会有上一个块的哈希值即父块。
在区块链中,每个块都有前一个块的哈希值。当我们更改当前块中的任何数据时,块的哈希值将被更改,这将影响前一个块,因为它有前一个块的地址。例如,如果我们只有两个块,一个是当前块,一个是父块。当前块将拥有父块的地址。如果需要更改当前块中的数据,还需要更改父块。当只有两个数据块时,很容易更改数据,但是现在,当我们在区块链中实现时,2020-01-2412:32已经挖掘了614272个块,而614272(th)块的哈希值为。如果我们要更改当前块614272(th)中的数据,614271块的哈希地址必须更改,但是614271块的哈希是不可能更改的,所以这就是区块链被称为不可变的,数据可信的。区块链的第一个块,称为起源块。你可以从这个起源块中看到有多少块被开采到现在。
如果我们对输入的任何部分做一个小的改变,输出就会有一个大的改变,请看下面的例子以获得更多的理解。哈希值是区块链技术不可变的和确定的潜力核心基础和最重要的方面。它保留了记录和查看的数据的真实性,以及区块链作为一个整体的完整性。
#比特币[超话]##数字货币##欧易OKEx#
区块链中的哈希值是什么?哈希值是将任意长度的输入字符串转换为密码并进行固定输出的过程。哈希值不是一个“密码”,我们不能通过解密哈希来检索原始数据,它是一个单向的加密函数。
区块链:
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。2019年1月10日,国家互联网信息办公室发布《区块链信息服务管理规定》??。
『肆』 区块链如何加密数据(区块链如何加密数据)
区块链以什么方式保证网络中数据的安全性区块链保证网络中数据的安全性的方式:
在区块链技术中,数字加密技术是其关键之处,一般运用的是非对称加密算法,即加密时的密码与解锁时的密码是不一样的。简单来说,就是我们有专属的私钥,只要把自己的私钥保护好,把公钥给对方,对方用公钥加密文件生成密文,再将密文传给你,我们再用私钥解密得到明文,就能够保障传输内容不被别人看到,这样子,加密数据就传输完毕啦!
同时,还有数字签名为我们加多一重保障,用来证明文件发给对方过程中没有被篡改。由此可见区块链的加密技术能够有效解决数据流通共享过程中的安全问题,可谓是大有施展之处。
区块链的密码技术有密码学技术是区块链技术的核心。区块链的密码技术有数字签名算法和哈希算法。
数字签名算法
数字签名算法是数字签名标准的一个子集,表示了只用作数字签名的一个特定的公钥算法。密钥运行在由SHA-1产生的消息哈希:为了验证一个签名,要重新计算消息的哈希,使用公钥解密签名然后比较结果。缩写为DSA。
?
数字签名是电子签名的特殊形式。到目前为止,至少已经有20多个国家通过法律认可电子签名,其中包括欧盟和美国,我国的电子签名法于2004年8月28日第十届全国人民代表大会常务委员会第十一次会议通过。数字签名在ISO7498-2标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。数字签名机制提供了一种鉴别方法,以解决伪造、抵赖、冒充和篡改等问题,利用数据加密技术、数据变换技术,使收发数据双方能够满足两个条件:接收方能够鉴别发送方所宣称的身份;发送方以后不能否认其发送过该数据这一事实。
数字签名是密码学理论中的一个重要分支。它的提出是为了对电子文档进行签名,以替代传统纸质文档上的手写签名,因此它必须具备5个特性。
(1)签名是可信的。
(2)签名是不可伪造的。
(3)签名是不可重用的。
(4)签名的文件是不可改变的。
(5)签名是不可抵赖的。
哈希(hash)算法
Hash,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,其中散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,但是不可逆向推导出输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
哈希(Hash)算法,它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。
以比特币区块链为代表,其中工作量证明和密钥编码过程中多次使用了二次哈希,如SHA(SHA256(k))或者RIPEMD160(SHA256(K)),这种方式带来的好处是增加了工作量或者在不清楚协议的情况下增加破解难度。
以比特币区块链为代表,主要使用的两个哈希函数分别是:
1.SHA-256,主要用于完成PoW(工作量证明)计算;
2.RIPEMD160,主要用于生成比特币地址。如下图1所示,为比特币从公钥生成地址的流程。
【深度知识】区块链之加密原理图示(加密,签名)
先放一张以太坊的架构图:
在学习的过程中主要是采用单个模块了学习了解的,包括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算法-KeyAgreement)。然后利用该对称秘钥对数据进行加密,针对共享秘钥这里的流程如下:
对于B节点,当接收到传输过来的数据时,解析出其中A节点的随机公钥,之后利用A节点的随机公钥与B节点自身的私钥计算出对称秘钥(KA算法)。之后利用对称秘钥机密数据。
对于以上加密方式,其实仍然存在很多问题,比如如何避免重放攻击(在消息中加入Nonce),再比如彩虹表(参考KDF机制解决)之类的问题。由于时间及能力有限,故暂时忽略。
那么究竟应该采用何种加密呢?
主要还是基于要传输的数据的安全等级来考量。不重要的数据其实做好认证和签名就可以,但是很重要的数据就需要采用安全等级比较高的加密方案了。
密码套件是一个网络协议的概念。其中主要包括身份认证、加密、消息认证(MAC)、秘钥交换的算法组成。
在整个网络的传输过程中,根据密码套件主要分如下几大类算法:
秘钥交换算法:比如ECDHE、RSA。主要用于客户端和服务端握手时如何进行身份验证。
消息认证算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。
批量加密算法:比如AES,主要用于加密信息流。
伪随机数算法:例如TLS1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。
在网络中,一次消息的传输一般需要在如下4个阶段分别进行加密,才能保证消息安全、可靠的传输。
握手/网络协商阶段:
在双方进行握手阶段,需要进行链接的协商。主要的加密算法包括RSA、DH、ECDH等
身份认证阶段:
身份认证阶段,需要确定发送的消息的来源来源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA签名)等。
消息加密阶段:
消息加密指对发送的信息流进行加密。主要采用的加密方式包括DES、RC4、AES等。
消息身份认证阶段/防篡改阶段:
主要是保证消息在传输过程中确保没有被篡改过。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。
ECC:EllipticCurvesCryptography,椭圆曲线密码编码学。是一种根据椭圆上点倍积生成公钥、私钥的算法。用于生成公私秘钥。
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算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。
metacharset="utf-8"
这个先订条件是为了保证曲线不包含奇点。
所以,随着曲线参数a和b的不断变化,曲线也呈现出了不同的形状。比如:
所有的非对称加密的基本原理基本都是基于一个公式K=kG。其中K代表公钥,k代表私钥,G代表某一个选取的基点。非对称加密的算法就是要保证该公式不可进行逆运算(也就是说G/K是无法计算的)。*
ECC是如何计算出公私钥呢?这里我按照我自己的理解来描述。
我理解,ECC的核心思想就是:选择曲线上的一个基点G,之后随机在ECC曲线上取一个点k(作为私钥),然后根据kG计算出我们的公钥K。并且保证公钥K也要在曲线上。*
那么kG怎么计算呢?如何计算kG才能保证最后的结果不可逆呢?这就是ECC算法要解决的。
首先,我们先随便选择一条ECC曲线,a=-3,b=7得到如下曲线:
在这个曲线上,我随机选取两个点,这两个点的乘法怎么算呢?我们可以简化下问题,乘法是都可以用加法表示的,比如22=2+2,35=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
于是乎得到2P=-Q(是不是与我们非对称算法的公式K=kG越来越近了)。
于是我们得出一个结论,可以算乘法,不过只有在切点的时候才能算乘法,而且只能算2的乘法。
假若2可以变成任意个数进行想乘,那么就能代表在ECC曲线里可以进行乘法运算,那么ECC算法就能满足非对称加密算法的要求了。
那么我们是不是可以随机任何一个数的乘法都可以算呢?答案是肯定的。也就是点倍积计算方式。
选一个随机数k,那么k*P等于多少呢?
我们知道在计算机的世界里,所有的都是二进制的,ECC既然能算2的乘法,那么我们可以将随机数k描述成二进制然后计算。假若k=151=10010111
由于2P=-Q所以这样就计算出了kP。这就是点倍积算法。所以在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上的例子说明如何生成共享秘钥,也可以参考AliceAndBob的例子。
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=kaKB=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-.其模型如下:
在以太坊的UDP通信时(RPC通信加密方式不同),则采用了以上的实现方式,并扩展化了。
首先,以太坊的UDP通信的结构如下:
其中,sig是经过私钥加密的签名信息。mac是可以理解为整个消息的摘要,ptype是消息的事件类型,data则是经过RLP编码后的传输数据。
其UDP的整个的加密,认证,签名模型如下:
区块链技术如何保障信息主体隐私和权益隐私保护手段可以分为三类:
一是对交易信息的隐私保护,对交易的发送者、交易接受者以及交易金额的隐私保护,有混币、环签名和机密交易等。
二是对智能合约的隐私保护,针对合约数据的保护方案,包含零知识证明、多方安全计算、同态加密等。
三是对链上数据的隐私保护,主要有账本隔离、私有数据和数据加密授权访问等解决方案。
拓展资料:
一、区块链加密算法隔离身份信息与交易数据
1、区块链上的交易数据,包括交易地址、金额、交易时间等,都公开透明可查询。但是,交易地址对应的所用户身份,是匿名的。通过区块链加密算法,实现用户身份和用户交易数据的分离。在数据保存到区块链上之前,可以将用户的身份信息进行哈希计算,得到的哈希值作为该用户的唯一标识,链上保存用户的哈希值而非真实身份数据信息,用户的交易数据和哈希值进行捆绑,而不是和用户身份信息进行捆绑。
2、由此,用户产生的数据是真实的,而使用这些数据做研究、分析时,由于区块链的不可逆性,所有人不能通过哈希值还原注册用户的姓名、电话、邮箱等隐私数据,起到了保护隐私的作用。
二、区块链“加密存储+分布式存储”
加密存储,意味着访问数据必须提供私钥,相比于普通密码,私钥的安全性更高,几乎无法被暴力破解。分布式存储,去中心化的特性在一定程度上降低了数据全部被泄漏的风险,而中心化的数据库存储,一旦数据库被黑客攻击入侵,数据很容易被全部盗走。通过“加密存储+分布式存储”能够更好地保护用户的数据隐私。
三、区块链共识机制预防个体风险
共识机制是区块链节点就区块信息达成全网一致共识的机制,可以保障最新区块被准确添加至区块链、节点存储的区块链信息一致不分叉,可以抵御恶意攻击。区块链的价值之一在于对数据的共识治理,即所有用户对于上链的数据拥有平等的管理权限,因此首先从操作上杜绝了个体犯错的风险。通过区块链的全网共识解决数据去中心化,并且可以利用零知识证明解决验证的问题,实现在公开的去中心化系统中使用用户隐私数据的场景,在满足互联网平台需求的同时,也使部分数据仍然只掌握在用户手中。
四、区块链零知识证明
零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的,即证明者既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄漏出去,即给外界的“知识”为“零”。应用零知识证明技术,可以在密文情况下实现数据的关联关系验证,在保障数据隐私的同时实现数据共享。