關於區塊鏈密碼學

區塊鏈阿特拉斯發表於2018-08-19

什麼是密碼學

以下是密碼學在維基百科中的解釋:

密碼學(英語:Cryptography)可分為古典密碼學和現代密碼學。在西方語文中,密碼學一詞源於希臘語kryptós“隱藏的”,和gráphein“書寫”。古典密碼學主要關注資訊的保密書寫和傳遞,以及與其相對應的破譯方法。而現代密碼學不只關注資訊保密問題,還同時涉及資訊完整性驗證(訊息驗證碼)、資訊釋出的不可抵賴性(數字簽名)、以及在分散式計算中產生的來源於內部和外部的攻擊的所有資訊保安問題。古典密碼學與現代密碼學的重要區別在於,古典密碼學的編碼和破譯通常依賴於設計者和敵手的創造力與技巧,作為一種實用性藝術存在,並沒有對於密碼學原件的清晰定義。而現代密碼學則起源於20世紀末出現的大量相關理論,這些理論使得現代密碼學成為了一種可以系統而嚴格地學習的科學。

直到現代以前,密碼學幾乎專指加密演算法:將普通訊息(明文)轉換成難以理解的資料(密文)的過程;解密演算法則是其相反的過程:由密文轉換回明文;加解密包含了這兩種演算法,一般加密即同時指稱加密與解密的技術。

加解密的具體運作由兩部分決定:一個是演算法,另一個是金鑰。金鑰是一個用於加解密演算法的祕密引數,通常只有通訊者擁有。歷史上,金鑰通常未經認證或完整性測試而被直接使用在加解密上。

加密演算法

  • 對稱密碼演算法

是指加密和解密使用相同的金鑰,典型的有DES、RC5、IDEA(分組加密),RC4(序列加密);

  • 非對稱密碼演算法

又稱為公鑰加密演算法,是指加密和解密使用不同的金鑰(公開的公鑰用於加密,私有的私鑰用於解密)。比如A傳送,B接收,A想確保訊息只有B看到,需要B生成一對公私鑰,並拿到B的公鑰。於是A用這個公鑰加密訊息,B收到密文後用自己的與之匹配的私鑰解密即可。反過來也可以用私鑰加密公鑰解密。也就是說對於給定的公鑰有且只有與之匹配的私鑰可以解密,對於給定的私鑰,有且只有與之匹配的公鑰可以解密。典型的演算法有RSA,DSA,DH,ECC;

  • 雜湊演算法

雜湊變換是指把檔案內容通過某種公開的演算法,變成固定長度的值(雜湊值),這個過程可以使用金鑰也可以不使用。這種雜湊變換是不可逆的,也就是說不能從雜湊值變成原文。因此,雜湊變換通常用於驗證原文是否被篡改。典型的演算法有:MD5,SHA,Base64,CRC等。

雜湊演算法

雜湊演算法(英語:Hash function)又稱雜湊函式、雜湊函式,是一種從任何一種資料中建立小的數字“指紋”的方法。

打個比方,我們每一個人都是一個大大的資料,包括我們一生中的各種資料,記憶、生日、家庭、人生經歷、外表、DNA健康資料等。我們把這些資料最後都濃縮成一小串數字來表示一個人,基本上這串數字就像指紋一樣的唯一的,每一個人都不可能重複。當然我這裡說的是基本上,也有可能存在兩個指紋一樣的人,但是按道理來說我們需要的是唯一。也就是說雜湊函式的抗碰撞性,越好的雜湊函式越不可能從兩個不同的輸入得到兩個相同的輸出。

還有一個就是原像不可逆性,也就是說你不可能通過這一小串資料反向得到我的所有資料。比如你有了我的指紋,但是你不可能通過我的指紋知道我的生辰八字,我的DNA資料等。

區塊鏈中的密碼學

維基百科: 區塊鏈(英語:blockchain或block chain)是藉由密碼學串接並保護內容的串連交易記錄(又稱區塊)。每一個區塊包含了前一個區塊的加密雜湊、相應時間戳記以及交易資料(通常用默克爾樹演算法計算的雜湊值表示),這樣的設計使得區塊內容具有難以竄改的特性。用區塊鏈所串接的分散式賬本能讓兩方有效紀錄交易,且可永久查驗此交易。

簡單來說區塊鏈就是有一個個區塊元件,每個區塊由兩個雜湊值和一個儲存空間組成,每個區塊只和它的前一個區塊連線。而這裡的連線正式通過雜湊值所關聯的,其中一個雜湊值是上一個區塊的,一個雜湊值是自己的。這個雜湊值代表的就是一種身份,也就是我們上文所說的唯一標識“指紋”。

區塊鏈中所運用到的密碼學包含以下幾種:

  • 支撐比特幣底層交易系統的雜湊樹(Merkle tree)
  • 用於保護區塊鏈中訊息摘要真實性的非對稱加密演算法:橢圓曲線演算法(ECC)

雜湊樹(Merkle tree)

在密碼學及電腦科學中,雜湊樹(hash tree)是一種樹形資料結構,每個葉節點均以資料塊的雜湊作為標籤,而除了葉節點以外的節點則以其子節點標籤的加密雜湊作為標籤 。雜湊樹能夠高效、安全地驗證大型資料結構的內容,是雜湊鏈的推廣形式。

雜湊樹的概念由瑞夫·墨克於 1979 年申請專利,故亦稱墨克樹(Merkle tree)。

Merkle樹一般用來進行完整性驗證處理。在處理完整性驗證的應用場景中,Merkle樹會大大減少資料的傳輸量及計算的複雜度。

雜湊樹的理論基礎是基於質數分辨定理,簡單地說就是:n個不同的質數可以“分辨”的連續整數的個數和他們的乘積相等。“分辨”就是指這些連續的整數不可能有完全相同的餘數序列。

關於雜湊樹的整個驗證過程,查詢在查詢——圖文翔解HashTree(雜湊樹)一文中有比較清楚的解釋。

我們在blockchain中可以看到最近生成的區塊,點開其中起一個,可以看到它的區塊頭中有一個叫做Merkle Root,也就是墨克樹裡的根節點墨克根。這個墨克根就是根據這次區塊裡所有的交易根據雜湊樹生成的。

關於區塊鏈密碼學

關於區塊鏈密碼學

橢圓曲線演算法

在比特幣中,使用者生成一個隨機整數 k (256位二進位制數)作為其賬戶私鑰,而用對應的公鑰 K(K=kG) 的雜湊值作為其賬戶的比特幣地址。

使用者需要使用其賬戶比特幣地址上的貨幣時,只需要提供一個用其私鑰對地址金額等資訊計算出的簽名和對應的公鑰。其他比特幣使用者就可以在只知道該使用者公鑰的情況,驗證該簽名是否有效,從而判斷該使用者是否真正擁有該地址上的貨幣。

攻擊者因為無法通過其公鑰或比特幣地址來推算出私鑰,也就無法偽造出一個有效的簽名來盜用其賬戶上的貨幣。

參考

ECC 構築安全可靠的區塊鏈

相關文章