官术网_书友最值得收藏!

2.2 區塊鏈加密技術

從計算機科學角度來看,區塊鏈是一種分布式數據庫,不同的節點擁有相同的數據記錄,包含經節點確認的數據信息的區塊從后向前呈鏈狀結構有序連接,利用密碼學的方式保證了數據在傳輸過程和之后訪問過程的安全,加密技術保護了區塊鏈中的數據安全,從而保證了區塊鏈不可篡改和不可偽造的特性。

2.2.1 哈希函數

哈希算法在區塊鏈中有著廣泛的使用,交易信息的存儲、工作量證明算法、密鑰對的產生等過程中都有哈希算法的存在。

哈希(Hash)也被翻譯為散列。任意長度的輸入經過散列函數,都能夠輸出為固定長度的值,該輸出就是散列值。SHA(secure Hash algorithm)也被稱為安全散列算法,直譯為哈希算法,由美國國家安全局所設計,由美國國家標準與技術研究院發布。SHA家族現有五個算法,分別是SHA-1、SHA-224、SHA-256、SHA-384和SHA-512,后四者并稱為SHA-2。

如果將區塊鏈看作一個公共賬本,節點中每個人都備份一份賬本數據,任何人都可以對賬本上的內容進行寫入和讀取。如果有用戶對內容進行了惡意篡改,依照少數服從多數的原則,將差異數據與全網數據進行比較后,就能夠發現存在的異常。但是,賬本上的內容隨著時間的累積,數據量必然會越來越龐大,如果將交易數據進行原始存儲,利用大量數據直接進行比對,工程量對于一個貨幣系統而言是十分不現實的。對此,在交易信息的存儲中,區塊鏈利用了哈希函數能夠方便實現數據壓縮的特性:一段數據在經過哈希函數的運算后,就能夠得到相較而言很短的摘要數據。將函數大致表示為:

Hash(原始信息)=摘要信息

同時,哈希函數如下特點,也保證了數據的不可篡改性。

(1)相同的原始信息經過相同哈希函數能夠得到相同的摘要信息。

(2)不同的原始信息經過相同哈希函數得到的摘要信息差距很大。

(3)不可逆性,即從摘要信息無法倒推出原始的輸入信息。

以比特幣為例,交易信息存儲在區塊中,就區塊頭中涉及的哈希摘要信息就包含了父區塊哈希和MerkleRoot標識的區塊的交易哈希。父區塊哈希為上一個區塊的哈希值,高度概括上一個區塊的全部字段信息。簡單表示如下:

n塊的區塊哈希=Hash(第n-1塊的區塊哈希,第n塊的交易信息)

n-1塊的區塊哈希便是第n塊區塊的父哈希,因此,即使每個區塊內的交易數據是相互獨立的,區塊間的連接仍依賴于上一個區塊的哈希值,當鏈上任何一區塊中的任一交易數據被篡改,都將直觀地反映到最新的區塊哈希上。對于哈希函數,不同的原始信息經過相同的函數作用得到的摘要信息差距是極大的。就SHA-256而言,多一個點,多一個空格,計算結果完全不同,記錄發生微小的變動,SHA-256的計算結果完全變了,而且變化的結果沒有任何規律可循。

例如,下面幾條非常相似的記錄,它們的SHA-256加密結果卻完全不同:

(1)SHA-256(韓梅梅支付李磊30元)=

1B416389C118C96D6389154CABEAC5688E2999E9953D654640C106421D16F7F8

(2)SHA-256(韓梅梅支付李磊□30元)=

43C0F7E9BAE71A1EBAE494C531DB52EA4A824F25756BF29508A133B2B437CCD8

(3)SHA-256(韓梅梅□支付李磊30元)=

0E5A5A43723B41E3DEF901228B56D2CF19D9C3F2A0D052AD0A52A4E1F52D226A

(4)SHA-256(韓梅梅支付了李磊30元)=

A0D05103342B52404239D3017784EB1B9572BA60CAC92523426DF7576A17732E

但是,相同的輸入信息通過哈希函數得到的摘要信息是完全相同的。只要記錄的內容相同,則無論誰來計算,SHA-256的結果是不變的。網上有計算工具(例如,http://tool.oschina.net/encrypt和https://1024tools.com/hash這兩個網址都提供各種加密計算),無論任何人任何時間任何地點用任何設備,只要輸入相同的內容,就能得到相同的SHA-256計算結果。

哈希函數不僅僅在確保全網數據一致性上發揮了作用,在賬戶所有權的證明中同樣利用了哈希函數,具體將在3.2.1節中進行講解。

哈希函數的特點決定了其在比特幣網絡、區塊鏈中的不可或缺。哈希函數在簡化、標識、隱匿和驗證信息的過程中都有著獨特的作用,算法的安全性也能夠得到保證。

2.2.2 非對稱加密

加密算法一般分為對稱加密和非對稱加密。對稱加密算法也稱為單密鑰加密,同一個密鑰同時作為信息的加密和解密,如果在分布式網絡中,使用對稱加密,如何將對應的密鑰發送給需要解密信息的人是一個很難解決的問題。因此在區塊鏈中大量采用了非對稱加密。

非對稱加密中含有一個密鑰對:公鑰和私鑰。私鑰由一方安全保管,不輕易外泄,而公鑰可以發送給任何人。非對稱加密算法密鑰對中一個進行加密,另一個進行解密。目前最常用的非對稱加密算法是RSA算法。中本聰在比特幣區塊鏈網絡中采用了橢圓加密算法,在保護傳送信息內容的同時,能夠讓消息的接收方確定消息來源的身份,同時確保了身份的私密性。

1. 橢圓加密算法

在拜占庭將軍問題的解決方案中,為了追溯信息傳遞根源,采用簽名信息的機制。倘若在古代,無法造假的真正可信的簽名體系難以實現。但是在最開始的比特幣區塊鏈中,中本聰利用非對稱加密技術為用戶的信息簽名。實現了消息傳送的私密性、簽名不可篡改偽造,同時能夠確認身份,將一個不可信的分布式網絡變成了一個可信的網絡。

橢圓加密算法屬于非對稱加密算法中的一種。非對稱加密算法會產生密鑰對,包括一個私有密鑰(后簡稱私鑰)和由私有密鑰衍生的公開密鑰(后簡稱公鑰)。如果使用公鑰對數據加密,那么只有對應的私鑰才能解密;如果使用的是私鑰加密,那么使用對應的公開公鑰就能對信息解密。因為私鑰和公鑰是兩種不同的密鑰,因此這種算法稱作非對稱加密算法。

區塊鏈技術中,加密算法不僅需要滿足單方向計算容易、但反方向無法倒推的特點,同時還需要實現其他節點能夠獨立對簽名信息進行驗證,而非對稱加密算法的特性十分貼合需求。在實際使用中,從隨機數生成私鑰,公鑰通過橢圓曲線算法計算得到,過程不可逆,只能通過暴力搜索得到。

橢圓加密算法是一種基于離散對數問題的非對稱加密算法,利用曲線上的點進行加法或者乘法運算。其中比特幣區塊鏈技術中選擇了secp256k1標準定義的一條特殊的橢圓曲線和一系列數學常數。

secp256k1曲線由下述函數定義,該函數可產生一條橢圓曲線:

y2=(x3+7)over(Fp

y2modp=(x3+7)modp

圖2-5 比特幣中實際使用的函數曲線

上述modp(素數p取模)表明該曲線是在素數階p的有限域內,也寫作Fp,其中p=2256-232-29-28-27-26-24-1,這是一個非常大的素數。定義在素數域的曲線很像一些離散的點集,實際很難表示,因此使用圖2-5中的曲線對比特幣區塊鏈中使用的函數曲線進行近似描述。

加法運算的定義是:兩個點的加法結果是兩點的連接和曲線的交點關于x軸的鏡像。確定曲線上一個點為基點P,由私鑰推得公鑰的算法很簡單,公鑰Q就定義為KP相加,K為私鑰:

具體的幾何定義如圖2-6所示。相加存在兩種情況,P、Q為相同點和P、Q為不同點。如果P、Q為相同點,那么PQ的連線就是P的切線,曲線上有且只有一個新的點與該切線相交,切線斜率可根據微分求得。如果PQ為不同點,那么重復根據加法運算定義進行求解即可。

圖2-6 橢圓曲線加法幾何示意圖

理論上講,目前由橢圓曲線公鑰求解私鑰的最有效算法的復雜度為O),其中p是階數n的最大素因子。當參數選的足夠好讓p>2160時,以目前的計算能力,攻破橢圓曲線是不現實的。

2. 密鑰對的應用

以比特幣網絡為例,私鑰證明了用戶對于賬戶的所有權,如果用戶想要使用某個賬戶中的比特幣,只有擁有該賬戶對應的私鑰,才能如愿使用。在登錄認證的場景中,用戶輸入私鑰信息,客戶端使用私鑰加密登錄信息后發送給服務器,服務器接收后采用對應的公鑰解密認證登錄信息。

此外,在比特幣交易中用戶使用私鑰對交易進行簽名,交易信息廣播后,驗證節點通過公鑰對信息進行解密,從而確保信息是由A發送的,具體內容在3.3.2節還會詳細介紹。

區塊鏈網絡充分利用了非對稱加密的特性,一是使用其中一個密鑰加密信息后,只有對應另外一個密鑰才能解開;二是公鑰可以向其他人公開,公鑰不能逆推出私鑰,保證了賬戶安全性。而現在的區塊鏈系統中,根據實際需要已經衍生出了多種私鑰加密技術,以便滿足更為靈活和復雜的應用場景。

主站蜘蛛池模板: 宝坻区| 姚安县| 商南县| 汝州市| 泸定县| 全南县| 黎平县| 望谟县| 宁明县| 盘锦市| 新巴尔虎右旗| 石楼县| 精河县| 阿拉尔市| 璧山县| 富裕县| 高台县| 东丰县| 永川市| 个旧市| 七台河市| 乡城县| 抚顺市| 宜昌市| 抚宁县| 兴城市| 龙山县| 宁明县| 武强县| 五原县| 平度市| 禹城市| 集贤县| 台东市| 澎湖县| 保山市| 梧州市| 桂阳县| 明光市| 辛集市| 墨竹工卡县|