当前位置: 首页 > 科技观察

揭秘区块链核心技术“哈希与加密算法”

时间:2023-03-19 13:21:27 科技观察

众所周知,区块链的关键技术组成部分有:P2P网络协议、共识机制、密码学技术、账户和存储模型。在这些技术中,最核心的两个点是密码学和共识机制。那么今天我们就来详细聊聊密码学,看看密码学技术在区块链中是如何应用的。首先,我们要知道区块链使用的密码算法有哪些?其实分为两大类:哈希算法非对称加密算法1.区块链中的哈希算法哈希算法是区块链中最流行的算法之一,广泛应用于构建区块和确认交易的完整性。它是一种数学函数算法,也称为散列算法,需要具备三个基本特征:输入可以是任意大小的字符串可以产生固定大小的输出可以进行高效的计算,即可以在合理的范围内使用可以在短时间内计算出输出值如果哈希算法需要实现密码安全,我们还要求它具有以下三个附加特性:1.抗碰撞性:是指对于两个不同的输入,必须产生两个不同的输出。如果两个不同的输入产生相同的输出,那么就没有抗碰撞性,或者说抗碰撞性很弱。2.隐蔽性:又称不可逆性,是指在y=HASH(x)中,输入值x可以计算出输出值y,但不能通过推导y的值来计算出x的值。为了保证不可逆性,x的值必须来自一个非常宽的集合,这样就很难通过计算推导出x的值。3.Puzzle-friendly:这个特性可以理解为拼图是公平友好的。比如算法中,y=HASH(x),如果知道y的值,想得到x的值,就必须暴力枚举,不断地尝试,没有更好的办法,没有捷径。哈希算法有很多种,比特币使用的主要哈希算法是SHA-256算法。此外,还有其他流行的哈希算法,如MD5、SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)、SHA-3等,其中MD5和SHA-1已被证明抗碰撞性不强,安全性不够高,市场不再推荐使用。下面以比特币为例,看看哈希算法的具体应用:在比特币中,哈希算法用于生成交易的数据摘要。当前区块包含上一个区块的哈希值,下一个区块的哈希值还包含当前区块的哈希值,一个一个连接起来形成一个哈希指针链表,如图下图:上图只是一个示意图,那么在实际的比特币系统中,每个区块包含什么:关注上图:PrevBlock:记录签署区块的哈希地址,32字节MerkleRoot:一个数据摘要记录当前区块所有交易信息的hash值,32字节Nonce:一个随机值,需要用这个随机值找到一个满足一定条件的hash值(挖矿)。以上4个字节只解释了几个关键字段。所有这些字段共同组成了区块头(blockheader),然后区块头需要进行两次哈希计算,计算出的值就是当前比特币区块的哈希值。因为比特币系统要求计算出的哈希值满足一定的条件(小于某个值),所以我们需要不断遍历Nonce值,计算出新的哈希值来满足要求。只有找到符合要求的哈希值,那么这才是一个合法的区块(这一系列动作也叫挖矿)python例子:SHA-256(SHA-256(区块头))我们再来看上面另一个重要的字段:Merkle树领域Merkle树全称为Merkletree,也是hash算法的一个重要应用,它实际上是用hash指针构建的二叉树或多叉树,Merkle树如图所示:树的顶端称为默克尔根(MerkleRoot),默克尔根也是一个哈希值,它是如何计算的?在比特币中,对每笔交易进行一次哈希计算,然后将每2笔交易的哈希值合并做一个hash,如图中交易A交易B的哈希值为H(A),交易B的哈希值为H(B),将这两个交易的哈希合并后就是H(hA|hb).这样,合并计算一直持续到最后的根就是Merkle根。Merkle树结构在比特币和以太坊中都有使用,但以太坊为了实现更复杂的功能而拥有三棵Merkle树。至此,哈希在区块链中的算法应用介绍就结束了。接下来我们来看一下非对称加密算法。2.区块链中的非对称加密算法区块链中的一个关键点就是账户问题,但是比特币没有账户的概念,那么如何进行转账交易呢?这里首先要介绍一下区块链中的非对称加密技术。非对称加密技术有很多种,例如:RSA、ECC、ECDSA等,比特币中使用的是ECDSA算法。ECDSA是美国政府标准,使用升级版的椭圆曲线,该算法经过多年仔细的密码分析,被广泛认为安全可靠。所谓非对称加密,就是我们在对数据进行加密和解密时,需要使用两个不同的密钥。例如,我们可以使用A密钥加密数据,然后使用B密钥解密数据。反之,我们也可以先用B加密,再用A解密。所以如果我要给某人发信息,我可以先用A加密,然后把密文传给她。她得到密文后,就可以用手中的B密钥解密。在这两个密钥中,一个称为公钥,另一个称为私钥。在比特币中,每个用户都有一对密钥(公钥和私钥),比特币系统使用用户的公钥作为交易账户。我们先看下图:如图所示,在第一条交易记录中,交易是由用户U0发起的,如何向用户U1支付代币,是如何实现的?首先用户U0写入交易信息:数据(明文,例如:用户U0给用户U1转100元)用户U0使用哈希算法计算交易信息,得到H=hash(data),然后对H进行签名有自己的私钥,即S(H),这一步实际上是为了防止交易信息被篡改,然后基于区块链网络,将签名S(H)和交易信息数据传递给用户U1。用户U1使用用户U0的公钥验证S(H)解密得到交易信息的哈希值H。同时,用户U1也使用哈希算法计算交易信息数据,得到H2=hash(data)将以上两个哈希值进行比较,若H1==H2,则交易合法。说明用户U0在发起交易时确实拥有真正的私钥,有权在自己的账户发起交易。网络中的每个节点都可以参与上述验证步骤。本例为比特币交易的签名过程,结合哈希算法和非对称算法对比特币交易进行数字签名。另外,在比特币中,公私钥的生成以及比特币地址的生成,也是通过非对称加密算法来保证的。以上就是核心技术哈希算法和加密算法在区块链系统中的应用。欢迎交流。