為什么密碼學(xué)是區(qū)塊鏈的核心?

區(qū)塊鏈大本營(yíng)
CSDN App
區(qū)塊鏈技術(shù)以多種不同的方式對(duì)錢包、交易、安全性和隱私保護(hù)協(xié)議進(jìn)行加密。本文將討論與區(qū)塊鏈技術(shù)相關(guān)的一些重要加密主題,包括公鑰加密、Hash散列和Merkel樹。

2345截圖20200908083720.png

眾所周知,區(qū)塊鏈?zhǔn)潜忍貛诺牡讓蛹夹g(shù),但你知道區(qū)塊鏈技術(shù)的核心是什么嗎?

是密碼學(xué)。

密碼學(xué)是區(qū)塊鏈技術(shù)的核心。所有的交易信息都會(huì)被編碼到區(qū)塊里,而區(qū)塊鏈則是由這一個(gè)個(gè)區(qū)塊連接在一起而形成的結(jié)構(gòu)。

密碼技術(shù)由來(lái)已久,主要經(jīng)歷了古典密碼、機(jī)械密碼、現(xiàn)代密碼三個(gè)發(fā)展階段。隨著歷史推進(jìn),密碼技術(shù)在不斷演變,密碼學(xué)成為了科學(xué)。今天我們就一起來(lái)看看,區(qū)塊鏈技術(shù)當(dāng)中的密碼學(xué),與過(guò)去我們了解的密碼學(xué)有什么不同?它的作用在哪里?

什么是密碼學(xué)?

密碼學(xué)是開(kāi)發(fā)防止第三方查看私人數(shù)據(jù)的學(xué)科?,F(xiàn)代密碼學(xué)結(jié)合了數(shù)學(xué)、計(jì)算機(jī)科學(xué)、物理、工程等學(xué)科。一些重要術(shù)語(yǔ)的定義如下:

加密:將文本編碼成不可讀的格式。

解密:將混亂的信息轉(zhuǎn)換為其原始形式。

Cipher密碼:一種用于執(zhí)行加密或解密的算法,通常是一組可履行的、定義明確的步驟。

【密碼學(xué)】在以前是加密的同義詞,即把信息從可讀的格式轉(zhuǎn)換為毫無(wú)意義信息的過(guò)程。加密技術(shù)的歷史可以追溯到古埃及,歷史十分悠久。

舉例來(lái)說(shuō),Caesar Cipher凱撒密碼是凱撒大帝用來(lái)與將軍們進(jìn)行安全通信的一個(gè)著名的密碼。密碼將信息中的每個(gè)字母都移動(dòng)了一定的距離(移位為2),A變成了C,B變成了D,依此類推。

區(qū)塊鏈技術(shù)以多種不同的方式對(duì)錢包、交易、安全性和隱私保護(hù)協(xié)議進(jìn)行加密。本文將討論與區(qū)塊鏈技術(shù)相關(guān)的一些重要加密主題,包括公鑰加密、Hash散列和Merkel樹。

公鑰加密

公鑰加密(也被稱為非對(duì)稱加密)是一種使用一對(duì)密鑰(公鑰和私鑰)進(jìn)行加密的密碼系統(tǒng)。公鑰可以廣泛分發(fā),但是私鑰只有其所有者才知道。密鑰總是成對(duì)創(chuàng)建的,每個(gè)公鑰必須有一個(gè)相對(duì)應(yīng)的私鑰。

公鑰加密經(jīng)常被用于以安全的方式加密兩個(gè)人或兩臺(tái)計(jì)算機(jī)之間的消息。任何人都可以使用某人的公鑰來(lái)加密信息,但是信息一旦被加密,只有使用相對(duì)應(yīng)的私鑰才能解密該消息。

假設(shè)Alice想要向Bob發(fā)送一條加密消息,其工作原理是這樣的:

Alice使用Bob的公鑰來(lái)加密消息;

Alice將加密后的消息發(fā)送給Bob,如果被第三方攔截,那么第三方只能看到隨機(jī)的數(shù)字和字母;

Bob使用他的私鑰來(lái)解密和讀取收到的消息;

這個(gè)過(guò)程如下圖所示:

2345截圖20200908083720.png

來(lái)源:Wellesley College

公鑰加密是區(qū)塊鏈技術(shù)的一個(gè)基本組成要素,是錢包和交易的基礎(chǔ)技術(shù)。當(dāng)用戶在區(qū)塊鏈上創(chuàng)建錢包時(shí),就是在生成公私密鑰對(duì)。

錢包的地址,或者其在區(qū)塊鏈上的表示方式,是由公鑰生成的一串?dāng)?shù)字和字母的組合。由于區(qū)塊鏈技術(shù)本身的性質(zhì),這個(gè)地址對(duì)所有人來(lái)說(shuō)都是公開(kāi)的,可以用來(lái)檢查錢包里的余額或向其發(fā)送代幣。

與錢包相關(guān)聯(lián)的私鑰證明了錢包的所有權(quán)和控制權(quán)。這是唯一能把代幣發(fā)送出去的方法,如果私鑰丟失,那么里面的代幣將被永遠(yuǎn)封存。

區(qū)塊鏈上的交易不過(guò)是一條廣播信息,其本質(zhì)是在說(shuō),“從我的錢包里取出X枚代幣,并將X枚代幣存入另一個(gè)錢包”。一經(jīng)確認(rèn),交易就會(huì)被不可更改地寫入分類賬簿,并更新雙方余額。

然而,此交易消息需要發(fā)送錢包的密鑰簽名才有效,消息廣播后,任何人都可以使用錢包的公鑰來(lái)確保來(lái)自私鑰的數(shù)字簽名是真實(shí)的。這是區(qū)塊驗(yàn)證者們?cè)谙騾^(qū)塊鏈添加交易(即消息)前要承擔(dān)的一個(gè)角色。

加密Hash散列

加密Hash散列是區(qū)塊鏈技術(shù)的另一個(gè)基本要素,它直接保障了區(qū)塊鏈的不可變性,這是區(qū)塊鏈最重要的特性之一。

Hash是計(jì)算機(jī)科學(xué)中的一個(gè)術(shù)語(yǔ),其大意是輸入任意長(zhǎng)度的字符串,然后產(chǎn)生一個(gè)固定長(zhǎng)度的輸出。無(wú)論某個(gè)Hash散列函數(shù)的輸入是3個(gè)字符還是10個(gè)字符,其輸出的長(zhǎng)度始終是相同的。

加密Hash散列函數(shù)具有以下幾個(gè)關(guān)鍵特性:

確定性:無(wú)論給函數(shù)多少次特定的輸入,它都始終會(huì)得到相同的輸出;

不可逆性:無(wú)法根據(jù)函數(shù)的輸出來(lái)確定輸入的內(nèi)容;

抗沖擊性:沒(méi)有任何兩個(gè)輸入可以得到相同的輸出;

加密Hash散列函數(shù)的另一個(gè)重要特性是改變輸入中的任何一位數(shù)據(jù)都將極大地改變輸出結(jié)果。舉例來(lái)說(shuō),111111和111112的Hash散列輸出將會(huì)是絕對(duì)唯一的,且彼此間沒(méi)有任何聯(lián)系。

加密Hash散列函數(shù)最為廣泛的用例是密碼儲(chǔ)存。大多數(shù)網(wǎng)站不會(huì)儲(chǔ)存用戶的原始密碼,它們會(huì)儲(chǔ)存用戶密碼的Hash散列,并在用戶訪問(wèn)給定的站點(diǎn)并輸入密碼時(shí),檢查散列是否匹配。如果黑客入侵了他們的數(shù)據(jù)庫(kù),也只能訪問(wèn)不可逆的密碼Hash散列。

那么,加密Hash散列又是如何實(shí)現(xiàn)區(qū)塊鏈技術(shù)不變性的?答案就是每個(gè)新的數(shù)據(jù)塊都包含前一個(gè)區(qū)塊中所有數(shù)據(jù)的Hash散列輸出。

想象一個(gè)剛剛添加了第1000個(gè)區(qū)塊的區(qū)塊鏈。來(lái)自區(qū)塊999的數(shù)據(jù)作為Hash散列函數(shù)輸出存在于第1000個(gè)區(qū)塊中。然而,包含在區(qū)塊999中的數(shù)據(jù)是區(qū)塊998中數(shù)據(jù)的Hash散列,區(qū)塊998中又包含了區(qū)塊997中數(shù)據(jù)的Hash散列。

這樣向前回溯,從第1000個(gè)區(qū)塊到第1個(gè)區(qū)塊就這樣通過(guò)加密Hash散列連在了一起。其結(jié)構(gòu)圖如下所示:

2345截圖20200908083720.png

來(lái)源:Block Geeks

一直以來(lái),這就是保證區(qū)塊鏈中數(shù)據(jù)具有不可變性的原因。如果有人想在前面的區(qū)塊中哪怕更改一位數(shù)據(jù),那么不僅會(huì)改變?cè)搮^(qū)塊數(shù)據(jù)的Hash散列輸出,還會(huì)改變后面的每一個(gè)區(qū)塊。網(wǎng)絡(luò)上的礦工和節(jié)點(diǎn)會(huì)立刻注意到所產(chǎn)生的Hash散列與其鏈的版本不匹配,并拒絕此次更改。

供參考:比特幣使用的是名為SHA-256的加密Hash散列函數(shù),Ethereum使用的是名為keccak256的加密Hash散列函數(shù)。

Merkle樹

上面的圖是區(qū)塊鏈的一種簡(jiǎn)化版本,它省略了一些重要信息。圖中有三個(gè)向上的箭頭,表示每個(gè)區(qū)塊的交易都被儲(chǔ)存在一個(gè)Merkle根中,而這就是Merkle樹的根節(jié)點(diǎn)。

樹是計(jì)算機(jī)科學(xué)中的一個(gè)術(shù)語(yǔ),代表以分層樹狀結(jié)構(gòu)儲(chǔ)存數(shù)據(jù),其中,數(shù)據(jù)位被稱為節(jié)點(diǎn)。有一個(gè)根(頂)節(jié)點(diǎn),下面連接著“子”節(jié)點(diǎn)(Child Node),子節(jié)點(diǎn)本身也有子節(jié)點(diǎn),依此類推。下圖展示了一個(gè)典型的樹型數(shù)據(jù)結(jié)構(gòu):

2345截圖20200908083720.png

圖片來(lái)源:Tutorials Point

如圖所示,樹中的節(jié)點(diǎn)組被稱為子樹(Sub-tree),沒(méi)有子樹的節(jié)點(diǎn)(其下沒(méi)有數(shù)據(jù)的節(jié)點(diǎn))被稱為葉子節(jié)點(diǎn)(Leaf Node)。

Merkle樹(或稱為Hash散列樹)是一種使用加密Hash散列函數(shù)來(lái)儲(chǔ)存散列輸出(而不是每個(gè)節(jié)點(diǎn)中的原始數(shù)據(jù))的樹。每個(gè)葉子節(jié)點(diǎn)由其原始數(shù)據(jù)的加密Hash散列組成,而每個(gè)父節(jié)點(diǎn)(Parent Node)是其子節(jié)點(diǎn)Hash散列組合的Hash散列。

Merkle根僅僅是Merkle樹的根(頂)節(jié)點(diǎn),Merkle根表示其左右子樹組合的Hash散列輸出。下圖是一棵有著4個(gè)葉子節(jié)點(diǎn)的Merkle樹。

2345截圖20200908083720.png

來(lái)源:Shaan Ray

每個(gè)葉節(jié)點(diǎn)表示交易A、B、C和D的數(shù)據(jù)的Hash散列,然后將Hash A和Hash B組合并求散列以生成Hash(A,B),并且以相同的方式生成Hash(C,D)。最終,Hash(AB)和Hash(CD)被組合到一起求散列Hash(Hash(A,B),Hash(C,D)),最終形成樹的Merkle根。

那么,為什么Merkle樹對(duì)區(qū)塊鏈技術(shù)來(lái)說(shuō)是十分重要呢?

使用Merkle根并且應(yīng)用加密Hash散列函數(shù)的性質(zhì),可以快速判斷給定區(qū)塊中的交易是否已被篡改,并識(shí)別正在被篡改的特定交易。

如果已確認(rèn)區(qū)塊中的單個(gè)交易已經(jīng)被更改,那么Merkle根最終將與“正確的”Merkle根截然不同,并且改動(dòng)是十分顯而易見(jiàn)的。

Merkle樹還允許用戶在不下載整個(gè)區(qū)塊鏈的情況下驗(yàn)證他們的的交易是否被包含在區(qū)塊中。簡(jiǎn)單支付證明技術(shù)可以掃掃描Merkle樹中的所有分支,并檢查某個(gè)特定的交易是否已經(jīng)被散列存儲(chǔ)到該樹中。如果不是在每個(gè)區(qū)塊中包含一個(gè)Merkle根,區(qū)塊鏈技術(shù)是不可能實(shí)現(xiàn)這種效率水平的。

下圖表示的是在區(qū)塊鏈中有4筆交易的Merkle樹(在此圖中,Tx_Root表示Merkle根)

2345截圖20200908083720.png

來(lái)源:Block Geeks

結(jié)語(yǔ)

密碼學(xué)是區(qū)塊鏈技術(shù)內(nèi)部工作的一個(gè)必要組成部分。公鑰加密是區(qū)塊鏈錢包和交易的基礎(chǔ),加密Hash散列函數(shù)賦予了區(qū)塊鏈不變的特性,Merkle樹在組織交易的同時(shí)提高了區(qū)塊鏈的效率。

THEEND

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

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