算区块链的加密难题的软件,区块链 加密算法
请查看相关英文文档
『一』区块链加密技术
数字加密技术是区块链技术应用和发展的关键。一旦加密方法被破解,区块链的数据安全性将受到挑战,区块链的不可篡改性将不复存在。加密算法分为对称加密算法和非对称加密算法。区块链主要使用非对称加密算法。非对称加密算法中的公钥密码系统根据其所基于的问题一般分为三类:大整数微分问题、离散对数问题和椭圆曲线问题。首先介绍一下区块链加密技术。加密算法一般分为对称加密和非对称加密。非对称加密是指集成到区块链中以满足安全需求和所有权验证要求。非对称加密在加密和解密过程中通常使用两个非对称密钥,称为公钥和私钥。非对称密钥对有两个特点:第一,一个密钥(公钥或私钥)加密信息后,只能解密另一个对应的密钥。其次,公钥可以公开给别人,但私钥是保密的,别人无法通过公钥算出对应的私钥。非对称加密一般分为三大类:大整数微分问题、离散对数问题和椭圆曲线问题。大整数微分问题类是指用两个大素数的乘积作为加密数。由于素数的出现是不规则的,只能通过不断的试算才能找到答案。离散对数问题类是指非对称分布式加密基于离散对数和强单向散列函数的难度的灰化算法。椭圆曲线是指利用平坦的椭圆曲线来计算一组不对称的特殊值。比特币就使用这种加密算法。非对称加密技术在区块链中的应用场景主要包括信息加密、数字签名和登录认证。 (1) 信息加密场景中,发送方(记为A)用接收方(记为B)的公钥对信息进行加密后发送给
B,B使用自己的私钥key 解密信息。比特币交易的加密就属于这种情况。 (2)在数字签名场景中,发送者A使用自己的私钥加密信息并发送给B,B使用A的公钥解密信息,然后确保信息是A发送的。 (3)登录认证场景,客户端使用私钥加密登录信息并将其发送到服务器。然后,服务器使用客户端的公钥来解密经过身份验证的登录信息。请注意以上三种加密方案的区别:信息加密是公钥加密、私钥解密,保证信息的安全;数字签名是私钥加密和公钥解密,保证了数字签名的所有权。经过验证的私钥加密和公钥解密。以比特币系统为例,其非对称加密机制如图1所示:比特币系统一般通过调用操作系统底层的随机数生成器来生成256位随机数作为私钥。比特币私钥总数庞大,遍历所有私钥空间来获取比特币私钥是极其困难的,因此密码学是安全的。为了便于识别,采用 256 位二进制 Bitcoin私钥将通过SHA256算法进行哈希处理并转换为Base58,形成50个字符长的私钥,方便用户识别和写入。比特币的公钥是私钥通过Secp256k1椭圆曲线算法生成的65字节随机数。公钥可用于生成比特币交易中使用的地址。生成过程是公钥首先通过SHA256和RIPEMD160哈希生成20字节的汇总结果(即Hash160的结果),然后通过SHA256哈希算法和Base58转换形成33个字符的比特币地址。公钥生成过程是不可逆的,即无法从公钥推导出私钥。比特币的公钥和私钥通常存储在比特币钱包文件中,其中私钥最为重要。丢失私钥就意味着丢失对应地址的所有比特币资产。在现有的比特币而区块链系统则根据实际应用需求衍生出了多重私钥加密技术,以满足多重签名等更加灵活复杂的场景。
『二』区块链如何保证网络中数据的安全?
区块链如何保证网络中数据的安全:
在区块链当中这些技术中,数字加密技术是关键。一般采用非对称加密算法,即加密的密码和解锁的密码不同。简单来说,我们有一个专属的私钥。只要我们保护好自己的私钥,把公钥给对方,对方就会用公钥加密文件生成密文,然后把密文传给你,我们就用私钥。解密明文可以保证传输内容不被他人看到。这样,加密数据传输就比较完整了。让!
同时,还有数字签名,为我们增加了一层额外的保护,以证明文档在发送给对方的过程中没有被篡改。可见,区块链的加密技术可以有效解决数据流通和共享过程中的安全问题,可以说潜力巨大。潮社
『三』【深度知识】区块链加密原理图解(加密、签名)
首先放一张以太坊的架构图:
在学习过程中,我主要是通过单个模块来学习和理解,包括P2P、密码学、网络、协议等,下面直接开始总结:
秘钥分发的问题还有密钥传输的问题。如果密钥是对称的,则只能离线交换密钥。如果密钥是在线传输的,则可能是被拦截。因此,采用非对称加密,有两个密钥,一个私钥保密,另一个公钥公开。公钥可以通过互联网传输。无需线下交易。确保数据安全。
如上图所示,节点A向节点B发送数据,此时采用公钥加密。节点A从自己的公钥中获取节点B的公钥,对明文数据进行加密,并将密文发送给节点B。节点B使用自己的私钥进行解密。
2.无法解决消息篡改。
如上图所示,节点A使用B的公钥进行加密,然后将密文传输给节点B。节点B使用节点A的公钥对密文进行解密。
1、由于A的公钥是公开的,一旦网络黑客截获了该消息,密文就毫无用处。说白了,这种加密方式只要截获消息就可以解密。
2.还存在无法确定消息来源的问题以及消息篡改的问题。
如上图所示,节点 A 在发送数据之前,先用 B 的公钥加密得到密文 1,然后再用 A 的私钥加密密文 1 得到密文 2。得到密文后,首先用A的公钥解密得到密文1,然后用B的私钥解密得到明文。
1、当网络上截获数据密文2时,由于A的公钥是公开的,所以可以用A的公钥解密密文2,得到密文1。所以这看起来是双重加密,但是实际上最后一层的私钥签名是无效的。一般来说,我们都希望签名是在最原始的数据上签名的。如果签名稍后放置,则签名缺乏安全性,因为公钥是公开的。
2.有性能ce 问题。非对称加密本身效率很低,要进行两次加密过程。
如上图所示,节点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否认不是他自己寄的。
在(3)的过程中,没有办法解决交互双方之间的相互攻击问题。这意味着什么?可能A发送的消息对节点A不利,后来A否认该消息不是它发送的。
为了解决这个问题,引入了签名。这里我们将(2)-4中的加密方法与消息签名结合起来。
上图中,我们使用节点A的私钥对其发送的摘要信息进行签名,然后添加签名+原文,然后使用B的公钥进行加密。 B获得密文后,首先使用B的私钥解密,然后使用A的公钥解密摘要。仅比较两个摘要的内容,看看它们是否相同。这样既避免了防篡改的问题,又规避了双方攻击的问题。由于 A 签署了该信息,因此无法否认。
为了解决perf为了解决非对称加密数据时的性能问题,通常使用混合加密。这里我们需要引入对称加密,如下图:
在加密数据时,我们使用双方共享的对称密钥进行加密。对称密钥不应在网络上传输,以免丢失。这里的共享对称密钥是根据自己的私钥和对方的公钥计算出来的,然后用对称密钥来加密数据。对方收到数据时,也计算对称密钥并解密密文。
上面的对称密钥是不安全的,因为A的私钥和B的公钥一般在短期内是固定的,所以共享的对称密钥也是固定的。为了增强安全性,最好的方法是为每次交互生成临时共享对称密钥。那么我们如何在每次交互过程中生成随机对称密钥而不传输它呢?
那么如何生成一个用于加密的随机共享密钥?
对于发送方节点A来说,每次发送都会生成一个临时的非对称密钥对,然后根据节点B的公钥和临时的非对称私钥可以计算出对称密钥。 (KA算法-密钥协议)。然后使用对称密钥来加密数据。这里对于共享密钥的处理过程如下:
对于节点B来说,当接收到发送的数据时,解析出节点A的随机公钥。然后使用节点A的随机公钥和节点B本身的私钥计算对称密钥(KA算法)。然后使用对称密钥对数据进行加密。
对于上述加密方法,还存在很多问题,比如如何避免重放攻击(在消息中添加Nonce),以及彩虹表等问题(参考KDF机制解决)。由于时间和能力有限,我暂时忽略它。
那又怎样呢?应该使用 ind 加密吗?
主要根据要传输的数据的安全级别。不重要的数据其实是可以进行认证和签名的,但是非常重要的数据就需要使用安全级别比较高的加密方案。
密码套件是网络协议的一个概念。主要包括身份认证、加密、消息认证(MAC)、密钥交换等算法。
在整个网络传输过程中,算法按照密码套件主要分为以下几类:
密钥交换算法:如ECDHE、RSA等。主要用于客户端与服务器握手时的认证。
消息认证算法:如SHA1、SHA2、SHA3。主要用于消息摘要。
批量加密算法:如AES,主要用于对信息流进行加密。
伪随机数算法:例如伪随机函数TLS 1.2 的 n 使用 MAC 算法的哈希函数来创建主密钥 - 连接双方共享的 48 字节私钥。在创建会话密钥(例如创建 MAC)时,主密钥充当熵源。
在网络中,消息传输一般需要经过以下四个阶段的加密,以保证消息传输的安全可靠。
握手/网络协商阶段:
双方握手阶段,需要进行链路协商。主要的加密算法有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是一种椭圆加密算法,主要描述了公钥和私钥是如何在椭圆上生成的,并且是不可逆的。乙CDSA主要使用ECC算法进行签名,而ECDH则使用ECC算法生成对称密钥。以上三种都是ECC加密算法的应用。在现实场景中,我们经常使用混合加密(对称加密、非对称加密、签名技术等的组合)。 ECIES 是底层 ECC 算法提供的一套集成(混合)加密解决方案。这包括非对称加密、对称加密和签名函数。
<meta charset="utf-8">
这个前提是保证曲线不包含奇异值点。
因此,随着曲线参数a和b不断变化,曲线也呈现出不同的形状。例如:
所有非对称加密的基本原理基本上都是基于一个公式K = k G。其中,K代表公钥,k代表私钥,G代表选定的基点。阿西mmetric加密算法是保证公式不可逆(即G/K无法计算)。 *
ECC如何计算公钥和私钥?这里我按照我自己的理解来描述一下。
我理解ECC的核心思想就是在曲线上选取一个基点G,然后在ECC曲线上随机选取一个点k(作为私钥),然后计算我们的公钥并保证公钥K也在曲线上。 *
那么如何计算k G呢?如何计算k G 才能保证最终结果不可逆?这就是ECC算法要解决的问题。
首先,我们随机选择一条ECC曲线,a = -3,b = 7,得到如下曲线:
在这条曲线上,我随机选择了两个点。如何计算点的乘积?我们可以把问题简单化。乘法可以用加法来表示,如2 2 = 2+2、3 5 = 5+5+5。那么只要我们能计算出加法就可以了e曲线,理论上我们可以计算乘法。因此,这条曲线只要能进行加法计算,理论上就可以计算出乘法,理论上就可以计算出k*G等表达式的值。
如何计算曲线上两点的相加?这里,为了保证不可逆性,ECC在曲线上定制了加法系统。
现实中,1+1=2、2+2=4,但在ECC算法中,我们理解的加法系统是不可能的。因此,需要定制一套适合该曲线的添加系统。
ECC的定义是在图中随机找到一条直线与ECC曲线相交于三个点(也可能是两个点)。这三个点分别是P、Q、R。
那么P+Q+R = 0。其中,0并不是坐标轴上的0点,而是ECC中的无穷大点。换句话说,无穷远点被定义为点 0。
Simi最后,我们可以得到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 年 1 月 1 日 0:00:00 作为时间一个起点,如果我们告诉你,到起点已经过去了一整年,那么我们就可以计算出现在的时间,也就是我们可以在手表上计算出来。在时间上,分针和秒针应指向 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
< p> 在介绍原理之前,说明一下ECC满足结合律和交换律,即A+B+C = A+C+B = (A+C)+B。这里有一个 WIKI 上的例子来说明如何生成共享密钥。您还可以参考爱丽丝和鲍勃的例子。
为了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. signature算法使用ECDSA
3.认证方式使用H-MAC
4.ECC参数系统使用secp256k1,其他参数系统可以在这里找到
H-MAC的整个过程称为基于哈希的消息认证码。其模型如下:
在以太坊的UDP通信中(RPC通信加密方式不同),则采用上面的实现方法并进行扩展。
首先,以太坊的UDP通信的结构如下:
其中,sig是私钥加密后的签名信息。 mac可以理解为整个消息的总结,ptype是消息的事件类型,data是RLP编码后的传输数据。
UDP的整个加密、认证、签名模型如下:
『四』什么是区块链密码算法?
区块链作为一种新兴的技术技术受到越来越广泛的关注。这是传统技术在互联网时代的新应用,包括分布式数据存储技术、共识机制和密码学等。随着各类区块链研究联盟的创建,相关研究得到了越来越多的资金和人员支持。哈希算法、零知识证明、环签名等区块链中使用的密码算法:
哈希算法
哈希算法是区块链的基础技术。哈希函数的本质就是将一组任意长度(有限)的数据映射成一组定义长度的数据流。如果这个函数同时满足:
(1)任何输入数据集的Hash值的计算都非常简单;
(2)认为找到具有相同哈希值的 2 个不同数据在计算上是困难的。
满足以上两个性质的哈希函数也称为密码哈希函数。除非有任何矛盾哈希函数通常是指密码学的哈希函数。对于Hash函数来说,找到这样的值称为碰撞。目前流行的哈希函数有MD5、SHA1、SHA2、SHA3。
比特币使用SHA256,大多数区块链系统都使用SHA256算法。那么这里我们先介绍一下SHA256。
1. SHA256算法步骤
STEP1:添加填充位。该消息经过填充,以便消息长度与 448 mod 512 一致(长度 = 448 mod 512)。填充位数范围为1~512。填充位串的最高位为1,其余位为0。
STEP2:附加长度值。将以 64 位表示的初始消息(填充之前)的位长度附加到步骤 1 的结果(低位字节在前)。
第三步:初始化缓存。使用256位缓存来存储哈希函数的中间结果和最终结果。
第4步:处理512位(16个字)消息数据包序列。该算法使用6个基本逻辑函数,由64步迭代运算组成。每个步骤都以 256 位缓存值作为输入,然后更新缓存内容。每个步骤使用一个32位常数值Kt和一个32位Wt。其中Wt为分组后的消息,t=1,2,...,16。
STEP5:处理完所有512位数据包后,SHA256算法最后一个数据包生成的输出是256位消息。
2.环签名
2001年,三位密码学家Rivest、Shamir和Tauman首次提出了环签名。它是一种简化的群签名,只有环成员,没有管理者,不需要环成员之间的配合。在环签名方案中,签名者首先选择一个临时的签名者集合,其中包括签名者。然后签名者可以使用自己的私钥和签名集中其他人的公钥独立生成签名,而无需其他人的帮助呃。一组签名者的成员可能不知道他们被包括在内。
环签名方案由以下部分组成:
(1)密钥生成。为环中的每个成员生成密钥对(公钥PKi,私钥SKi)。
(2)签名。签名者使用自己的私钥和任意n个环成员(包括他自己)的公钥来生成消息m的签名a。
(3)签名验证。验证基于环签名和消息m,用户验证签名是否由环中的成员签名。如果有效,则接受,否则丢弃。
环签名满足的属性:
(1)无条件匿名:攻击者无法确定环中的哪个成员生成了签名,即使在获得环成员的private 密钥的情况下,概率不超过 1/n。
(2)正确性:签名必须得到所有其他人的验证。
>(3)不可伪造性:环中的其他成员无法伪造真实签名者的签名。即使外部攻击者获得了有效的环签名,他也无法伪造消息m的签名。
3.环签名与群签名的比较
(1)匿名性。这是一个个人代表团体签名的系统。验证者可以验证签名是由该组的成员签署的,但无法知道是哪个成员,从而实现签名者的匿名性。
(2)可追溯性。在群签名中,群管理员的存在保证了签名的可追溯性。组管理员可以撤销签名以揭示真正的签名者。环签名本身不能透露签名者,除非签名者自己想要透露签名或向签名添加附加信息。提出了一种可验证的环签名方案。在该方案中,真正的签名者希望验证者知道他的身份。这时,重新签名者可以通过透露他所拥有的秘密信息来验证他的身份。
(三)管理体系。群签名由群管理员管理,而环签名不需要管理。签名者只需选择一组可能的签名者,获取其公钥,然后发布该组。所有成员都是平等的。
链桥教育在线旗下学说创新区块链技术工作站是教育部学校规划建设发展中心推出的唯一获批的“智慧学习工厂2020-学说创新工作站”中国。 “区块链技术专业”试点工作站。专业基地立足于为学生提供多元化成长路径,推进专业学位产学研一体化培养模式改革,构建应用型、复合型人才培养体系。
『吴』什么是区块链 en加密算法
区块链加密算法(EncryptionAlgorithm)
非对称加密算法是一种使用加密密钥将原始明文文件或数据转换为一串不可读的密文代码的功能。加密过程是不可逆的。只有持有相应的解密密钥,才能将加密信息解密为可读的明文。加密允许私有数据通过公共网络以低风险传输,并保护数据不被第三方窃取和读取。
区块链技术的核心优势是去中心化。利用数据加密、时间戳、分布式共识和经济激励等手段,在节点无需相互信任的分布式系统中实现去中心化。点对点的交易、信用的协调协作,从而为信用的共性问题提供了解决方案。数据集中存储成本高、效率低且不安全机构。
区块链的应用领域包括数字货币、通证、金融、防伪溯源、隐私保护、供应链、娱乐等。随着区块链和比特币的流行,许多相关的顶级域名被注册。 ,对域名行业产生了比较大的影响。
『Lu』区块链:防篡改的哈希加密算法
学生A和B在教室里抛硬币,打赌谁来打扫房子。如果正面朝上,A 就会打扫房子。 ,尾部向上,然后B清场,这个策略没有任何问题。
但是,如果场景转移到在线聊天室,A和B也玩抛硬币游戏,B很可能不会同意,因为A抛硬币时,B不会猜测。< /p >
无论正面还是反面,A 都可以说 B 猜错了。
如何解决这个问题?先加密抛硬币的结果,然后B猜怎么样?你可以试试这个方法。
假设任意奇数代表硬币的正面,任意偶数代表硬币的反面。 A 想要一个数字 375,然后将其乘以 258,告诉 B 结果是 96750,并声明 A 想要的 375 就是密钥,他将其妥善保管。
接下来验证结果时,A可以撒谎,声称258是他想要的数字,375是关键,A仍然是无敌的。如果A提前告诉B密钥怎么办? B可以直接计算出原始数,失去保密功能。
这种知道加密方法就知道解密方法的方法显然行不通。有没有办法知道加密方式后仍然无法恢复原始文本?
显然是有的,在加密过程中加入不可逆操作就可以了。 A设计了一种新的加密方法:
假设A想要的数字是375,加密后:
B得到结果120943,但他很难根据120943计算出密钥375。
如果B想验证A是否在说谎:
最后,他可以抛硬币...
这个加密丢失部分信息的方法称为“单向加密”。也称为哈希算法。
有一个问题:
这是可以的,但是可以通过增加上述算法的难度,使得A很难找到来解决。
根据上面的说法,一个可靠的哈希算法应该满足:
密码学中的哈希函数具有三个重要的性质,即抗碰撞性和原像的不可逆性。 ,问题友好度。
碰撞是指学生A可以提前找出一个奇数和一个偶数,从而使散列结果一致,这在计算上是不可行的。
首先,有关大空间桑拿房压缩成小空间的消息,肯定会存在碰撞。假设哈希值的长度e 固定为 256 位。如果顺序是1, 2,...2 256 + 1,这2 256 + 1个输入值,一一计算哈希值,一定能找到两个输入值使得hash 值是相同的。
A同学,看到这里,请不要高兴得太早。因为在它属于你之前,你必须有时间弄清楚它。为什么这么说?
根据生日悖论,如果随机选择 2 130 +1 个输入,则有 99.8% 的概率找到至少一对碰撞输入。那么对于哈希值长度为256位的哈希函数,平均需要完成2128次哈希计算才能找到冲突对。如果一台计算机每秒执行 10,000 次哈希计算,则大约需要 10 27 年才能完成 2 128 次哈希计算。
A同学,你别想作弊了,我估计你活不了这么久了。当然,如果计算机的计算能力很强的话也是可以的。改善了。
那么诚信还有什么其他用途呢?
用于验证信息的完整性,因为如果信息在传输过程中没有被篡改,运行哈希计算得到的哈希值将会与原始哈希值不同。
因此,在区块链中,可以利用哈希函数的抗碰撞性来验证区块和交易的完整性。
因为一个哈希值对应着无数的明文,理论上你不知道它是哪一个。例如,4+5=9和2+7=9的结果是相同的。我知道我输入的结果是9,但是我能知道我输入的数字是多少吗?
如果对消息m进行哈希计算时,引入随机前缀r,基于哈希值H(r||m),很难恢复出消息m,这意味着hash函数的值隐藏了消息m。
因此,B同学,不可能根据o推导出原始数据结果。这就像大海捞针一样。
问题友好性是指没有方便的方法来生成满足特殊要求的哈希值。这是什么意思?通俗地说,没有捷径,需要一步步摸索。如果需要的哈希结果以几个0开头,那么找到前3位全为0的哈希值和前6位全为0的哈希值所需的哈希计算次数是一定的。数量关系。
这个怎么用呢?在区块链中,它可以用作共识算法中的工作量证明。
主要描述了哈希函数的三个重要属性:抗碰撞性、原像不可逆性、问题友好性。
由于这些重要的特性,区块链中区块和交易的完整性验证、共识算法的工作量证明等功能都是通过使用来实现的。哈希函数。
[1]。邹军,张海宁。区块链技术指数Nan[M].北京:机械出版社,2016.11
[2]。张柴,韩峰.区块链从数字货币到信用社会[M].北京:中信出版社,2016.7
[3].张健.区块链定义未来金融经济新格局[M].北京:机械工业出版社,2016.6
『凄』新手如何秒懂区块链?哈希计算
新手如何秒懂区块链中的哈希计算
我在学习区块链的时候,发现一个像鬼一样重复出现的词,“哈希”,英文写作“HASH”。
那个说拉肚子的同学,滚出去! !
这个“散列”据说是从密码学派生的函数。试着搜索一下,你会发现一堆论文,或横或竖,或表格或图片,还有一个黑不懂xyzabc。肉汤呃,我只是想了解一下区块链的基础知识。为什么对我来说这么难? !我最长的密码是123456,比较复杂的是654321,最复杂的时候在最后加一个a。你写给我的复杂密码,明显感觉我的脑力正在被耗尽,我唯一的脑细胞正在批量死亡!为了让像我这样的新手同学能够理解这一点,我无奈地尝试着用傻瓜式的语言来讲解哈希计算,不求最准确而是求最简单易懂。让我们开始吧:
# 1. 什么是哈希算法
## 1. 定义:哈希算法将任意长度的字符串转换为固定长度的字符串。
从这里可以看出,可以理解为输入一串数字进行“哈希运算”,它会输出一串数字**。
如果我们自己定义“加一算法”,那么输入1就等于ll输出2;如果我们输入100,则输出101。
如果我们自己定义“大写算法”,则输入“abc”,输出“ABC”。
哈哈,先别打我!这实际上只是函数的概念。
## 2.特点:
这个哈希算法与我的“加一算法”和“大写算法”相比有什么特点?
1)**确定,计算快**:无论怎么计算结果都是一样的,计算效率高。
2)**不可逆**:意味着知道输出无法推导出输入的值。
3) **不可预测的结果**:只要稍微改变输入,结果就会完全不规则。
总之,这个哈希运算是一个黑匣子,是加密的好帮手!当你说“11111”时,它会为你加密成“”。当你说“11112”时,它会为你加密成“”。无论如何,输入和 o输出在天空和地下。即使输入相关,两个输出也不相关。
# 2.哈希运算在区块链中的使用
## 1.数据加密
**交易数据通过哈希Hash进行处理进行操作加密,并将对应的哈希值写入区块头**。如下图所示,区块头包含前一个区块的哈希值和下一个区块的哈希值。
1)、**识别区块数据是否被篡改**:区块链的哈希值可以唯一、准确地标识一个区块。区块链中的任何节点都可以通过一个简单的哈希值,通过哈希计算就可以得到这个区块的哈希值。计算出的哈希值没有改变,这意味着区块链中的信息没有被篡改。
2)、**将每个区块连接成一个区块链**:每个区块都包含p的哈希值前一个块和下一个块的值,相当于前一个块的哈希值链接到前一个块的末尾,下一个块的哈希值链接到下一个区块的头部,因此形成具有链式结构的区块链。
## 2、加密交易地址和哈希
上图中的区块头中,有一个默克尔根(Merkle root)的哈希值,这是什么它是用来做什么的?
首先了解一下Merkle root是什么?它是二叉树结构的根。什么是二叉树?什么是根?只要看看下面的图片就知道了。一可分为二,二可分为四,四可分为八。它被称为二叉树。根是最顶层的节点,称为根。
这个根数据从哪里来?得到一个区块中每笔交易的哈希值后,再对哈希值进行哈希,再进行哈希,然后再次散列,直到达到顶部值。
这样散列很久了是怎么回事?它有什么作用?
1)、**快速定位每笔交易**:由于交易是线性存储的,定位交易需要遍历,效率低且耗时。这样的二叉树可以快速定位你要找的交易。
举个不恰当的例子:如何求0-100之间的任意整数? (假设答案是88)更好的方法是问:1.它比50大还是小? 2. 比75大还是小? 3. 比88大还是小?只需提出几个问题即可快速找到答案。
2)、**验证交易数据是否被篡改**:从交易到每棵二叉树的哈希值,任何一个数字的变化都会导致Merkle的变化根值。同时,如果出现错误,可以快速定位错误所在。
## 3.挖矿
我们的区块头中有一个参数,叫做**随机数Nonce。找到这个随机数的过程就叫做“挖矿”**!网络上的任何机器只需要找到一个合适的数字来填充自己区块的Nonce位置,使区块头的6个字段(80字节)中的数据的哈希值大于18从0开始,谁找到了“金子”!由于我们没有办法提前写出一个满足18个零的数字,然后推断出Nounce,所以唯一的办法就是从0开始一一尝试,看看结果是否符合要求。如果没有,请尝试下一个,直到找到为止。
您要查找此号码的目的是什么?这样做有什么用呢?
1)、**公平地找到计算能力最强的计算机**:这有点像我这里有一个沙子,我告诉你它和一粒沙子是一样的在那个海滩上的沙子,你会发现相同的。可行的办法是上图把每颗药丸拿出来并进行比较!那么速度最快的人最有可能先到达沙子。这就是所谓的“工作量证明POW”。如果你先找到这个沙子,我想你会比较最多,做的工作也最多。
2)**难度动态调整**:为了保证10分钟内产生一个区块,比特币每2016个区块(2周)就会计算一次找到这个nonce数字的难度,如果这2016个区块的平均时间小于10分钟,则增加难度,如果超过10分钟,则减少难度。这样,无论全网挖矿算力如何变化,都可以在10分钟内计算出随机数nonce。
# 3.什么是哈希运算?
说了这么多哈希运算,看起来哈希运算只是一种,但实际上不是!作为密码学中的哈希运算,许多流派都衍生自不断发展。看完《馒头包》,我还是觉得内部机制太复杂了。我暂时列出如下,让新手有一个印象,知道是怎么回事。
从下表还可以看出,哈希运算也在不断发展。算法多种多样,各种应用也在灵活应用单一或多种算法。比特币系统中,哈希运算基本使用SHA256算法,而莱特币则使用SCRYPT算法、夸克、达世币,层层串联使用多种算法,但重磅币(HAV)将多种算法并行连接,并将每种算法的一部分混合在一起用来。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。
需要注意的是,哈希运算的各种算法都在不断升级和完善,各种币种所使用的算法也不是一成不变的,也在不断地变化。狡猾地优化了。
**总结**:哈希运算广泛应用于各种区块链项目中。以比特币为例,我们可以看到,在**数据加密和交易数据定位、挖掘等方面都发挥着极其重要的作用**。作为密码学的一个分支,哈希不断发展和扩展。作为普通新手,如果我们想要了解区块链的一些基本概念,了解这个层面就足够了。