淺談區(qū)塊鏈中用到的幾種加密技術(shù)

國(guó)網(wǎng)甘肅信通公司創(chuàng)新研發(fā)團(tuán)隊(duì)
王軍
通常我們把密碼學(xué)分為古典加密和現(xiàn)代加密。古典加密常見(jiàn)的是字母表移位,在加密傳輸中,其特點(diǎn)是強(qiáng)調(diào)方法不可泄露,一旦方法遭遇泄露,則原始加密信息可被獲取與篡改;現(xiàn)代加密是伴隨著計(jì)算機(jī)的發(fā)展出現(xiàn)的,其特點(diǎn)是強(qiáng)調(diào)秘鑰的不可泄露,但加密方法可以公開(kāi)?,F(xiàn)代加密方法主要分為三類(lèi):對(duì)稱加密、非對(duì)稱加密和單向散列加密。

比特幣的火爆,讓區(qū)塊鏈技術(shù)得到不斷地關(guān)注、應(yīng)用和推廣。區(qū)塊鏈的關(guān)鍵技術(shù)有:P2P網(wǎng)絡(luò)協(xié)議、共識(shí)機(jī)制、密碼學(xué)技術(shù)、賬戶和區(qū)塊的鏈?zhǔn)酱鎯?chǔ)技術(shù)等。其中,密碼學(xué)與共識(shí)機(jī)制最為核心。今天我們來(lái)聊一聊密碼學(xué)在區(qū)塊鏈中的應(yīng)用。

通常我們把密碼學(xué)分為古典加密和現(xiàn)代加密。古典加密常見(jiàn)的是字母表移位,在加密傳輸中,其特點(diǎn)是強(qiáng)調(diào)方法不可泄露,一旦方法遭遇泄露,則原始加密信息可被獲取與篡改;現(xiàn)代加密是伴隨著計(jì)算機(jī)的發(fā)展出現(xiàn)的,其特點(diǎn)是強(qiáng)調(diào)秘鑰的不可泄露,但加密方法可以公開(kāi)。現(xiàn)代加密方法主要分為三類(lèi):對(duì)稱加密、非對(duì)稱加密和單向散列加密。

對(duì)稱加密

對(duì)稱加密指的是加密和解密使用同一秘鑰(即秘鑰A和B相同),即私鑰。常見(jiàn)的對(duì)稱加密算法有:DES,AES,3DES等。

非對(duì)稱加密

非對(duì)稱加密指的是加密和解密使用不同的秘鑰(秘鑰A和B是不一樣),一把作為公開(kāi)的公鑰,另一把作為私鑰。公鑰加密的信息,只有私鑰才能解密。私鑰加密的信息,只有公鑰才能解密。常見(jiàn)的非對(duì)稱加密算法有:RSA,ECC等。

單向散列加密

單向散列加密即不可逆加密算法,又稱為哈希(Hash)算法,其密鑰是由加密散列函數(shù)生成的。單向散列函數(shù)一般用于消息摘要的產(chǎn)生、密鑰加密等。常見(jiàn)的單向加密算法有:MD5、SHA、CRC-32等。

區(qū)塊鏈用到的加密算法

非對(duì)稱加密算法

區(qū)塊鏈中有一個(gè)很關(guān)鍵的點(diǎn)就是交易內(nèi)容和交易雙方身份的認(rèn)證,也就是大家常說(shuō)的交易雙方如何安全的進(jìn)行轉(zhuǎn)賬交易?這里就不得不提到非對(duì)稱加密。非對(duì)稱加密的私鑰和公鑰功能可以概括為16個(gè)字:公鑰加密-私鑰解密、私鑰簽名和公鑰確認(rèn)。其中公鑰加密-私鑰解密可以實(shí)現(xiàn)交易雙方對(duì)交易內(nèi)容的確認(rèn);私鑰簽名和公鑰確認(rèn)可以實(shí)現(xiàn)對(duì)交易雙方身份的確認(rèn)(也稱為數(shù)字簽名)。

哈希算法

哈希算法是區(qū)塊鏈中應(yīng)用最多的一種算法,它在交易信息和區(qū)塊的標(biāo)識(shí)、確認(rèn)、防篡改等方面都有重要的應(yīng)用。Hash算法有4大基本特性:1.輸入可以是任意長(zhǎng)度的字符串序列,但輸出必須為固定長(zhǎng)度字符串序列;2.在盡可能短的時(shí)間段內(nèi)(毫秒級(jí),ms)完成加密;3.對(duì)于不同的輸入,輸出序列也是不同的。(實(shí)際應(yīng)用中要求碰撞幾率極其微小,同時(shí)輸入容納的域也要非常大);4.不可逆,在哈希函數(shù)y=Hash(x)中,通過(guò)輸入x,可以計(jì)算輸出y,但是通過(guò)y幾乎反推不到x(如果想要從y逆推x,唯一的方法就是暴力枚舉,在現(xiàn)有的算力下算上幾百年或者更多)。

在區(qū)塊鏈中,哈希算法主要就是把交易數(shù)據(jù)生成交易摘要(標(biāo)識(shí)),同時(shí)哈希算法也對(duì)區(qū)塊數(shù)據(jù)生成區(qū)塊摘要(標(biāo)識(shí))。當(dāng)前區(qū)塊里面包含上一個(gè)區(qū)塊的哈希值,后面一個(gè)區(qū)塊又包含當(dāng)前區(qū)塊的哈希值,區(qū)塊通過(guò)哈希指針相連,形成一個(gè)哈希指針鏈表,如下圖:

-PreHash:記錄前一個(gè)區(qū)塊的hash地址,也稱為hash。

-Timestamp:對(duì)當(dāng)前區(qū)塊加蓋時(shí)間節(jié)點(diǎn),表明區(qū)塊是在什么時(shí)間生成的。

-Hash:記錄前當(dāng)前區(qū)塊的hash值,當(dāng)前區(qū)塊的標(biāo)識(shí)符。

-Merkle根:記錄當(dāng)前區(qū)塊內(nèi)所有交易信息的數(shù)據(jù)摘要hash值。

-Nonce:隨機(jī)數(shù),碰撞找到滿足特定條件的hash值。

Merkle tree,默克爾樹(shù),哈希算法的另一個(gè)重要應(yīng)用。二叉樹(shù)依靠哈希指針建立。樹(shù)的頂端叫做默克爾根(Merkle Root),Merkle Root也是一個(gè)hash值,它是怎么計(jì)算出來(lái)的呢?區(qū)塊鏈中對(duì)每一筆交易做一個(gè)hash計(jì)算,然后把每2個(gè)交易的hash合并再做hash計(jì)算,例如交易A的hash值是h(A),交易B的hash值是h(B),對(duì)這2個(gè)交易合并Hash后就是h(hA&hb),依次不斷往上合并計(jì)算,最后就得到Merkle Root了。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無(wú)評(píng)論