區塊鏈技術與密碼學聯絡
密碼學是什麼
密碼學可以用下面的話來進行概括
Cryptography is the practice and study oftechniques for secure communication in the presence of third parties (called adversaries) —from wiki.
密碼學是第三方存在下的安全通訊技術的研究與實踐。
密碼學是研究如何在敵人存在的環境中通訊
——著名的密碼學者Ron Rivest
注意是因為有這個第三方的存在,才需要密碼學, 也就是說是為了防止第三方搞破壞。
密碼體制分類
- 單鑰、私鑰、對稱密碼體制
- 雙鑰、公鑰、非對稱密碼體制
密碼學的主要研究內容
- 公鑰加密
- 數字簽名
- 私鑰加密:分組密碼,流密碼
- Hash函式
- 偽隨機數
- 安全協議:承諾,零知識證明,多方計算
資訊保安的基本要素
- 資訊的保密性 (保證資訊不洩漏給未經授權的人)
- 資訊的完整性 (防止資訊被未經授權的篡改或破壞)
- 認證性 (怎麼知道是你的資訊, 需要認證)對某一實體所聲稱的身份提供
證實的行動 - 不可否認性 (數字簽名)
- 匿名性 (例如智慧電錶, 資訊不能透露給別人)
- 接入控制
- 可用性
與區塊鏈相關的密碼技術
- 單向函式;
- 對稱加密:AES;
- Hash函式;
- 公鑰加密:RSA,ECC
- 數字簽名及其推廣;
- 承諾方案;
- 零知識證明;(如何不暴露金鑰的情況下進行驗證)
下面會重點講幾個點
雜湊函式
雜湊函式定義
Hash函式是將任意長度的訊息對映成一個較短的定長輸出訊息的函式.如下形式: h = H(M), M是變長的訊息,h是定長的Hash值.
雜湊函式特點
雜湊函式的特點就是 變長訊息經過雜湊處理變成定長雜湊值, 也可以這樣理解•Hash函式的目的是為檔案、訊息或其它的分組資料產生
“數字指紋”
雜湊函式的需求
- H能用於任何大小的資料分組;
- H產生定長輸出;
- 對任意給定的x, H(x)要相對易於計算,使得軟硬體實現都實際可行;
- 對任意給定的碼h, 尋求x使得H(x)=h在計算上是不可行的(單向的或原像穩固的);
- 任意給定分組x, 尋求不等於x的y, 使得H(y)= H(x)在計算上不可行(第二原像或弱抗攻擊性);
- 尋求對任何的(x,y)對使得H(x)=H(y)在計算上不可行(碰撞或強抗攻擊性);
零知識證明
零知識證明指的是證明者能夠在不向驗證者提供任何有用的資訊的情況下,使驗證者相信某個論斷是正確的。零知識證明實質上是一種涉及兩方或更多方的協議,即兩方或更多方完成一項任務所需採取的一系列步驟。
互動證明協議
證明但是不能透露金鑰
傳送者給承諾, 驗證者給挑戰, 傳送者給迴應。只要挑戰失敗就表示不能通過, 這不是正確的傳送者。
區塊鏈和密碼學聯絡
區塊鏈是比特幣的底層技術, 區塊鏈本質上是一條雜湊鏈。
早期雜湊鏈
雜湊鏈最早是由Leslie Lamport提出, 用於解決如何在不透露密碼的情況下讓郵箱伺服器驗證自己的身份
他的解決方案是首先把密碼進行雜湊,開始會把密碼雜湊N 次,然後把每次的雜湊結果放到郵箱伺服器的資料庫中,此時資料庫儲存了N個雜湊值分別對應密碼的n次雜湊值, 這就代表了他的密碼, 那麼如何驗證呢? 驗證方法很簡單, 客戶端將密碼雜湊A次(A<N), 然後將雜湊值傳給伺服器, 伺服器對雜湊值再一次進行雜湊, 把此時的雜湊值與最開始存在資料庫中的雜湊A+1次的結果進行比對 , 如果相同則表示ok, 不同則表示不是此使用者, 一共驗證N次都成功,則表示·1是此使用者的登陸。
在以上的過程中, 有兩個重要的點
- 傳給伺服器的沒有密碼, 只有雜湊值
- 從密碼到第一個雜湊值,再到第二個雜湊值,只要有一個地方的雜湊值出現問題,驗證都不會成功
雜湊鏈串聯資料
當我們把上面的密碼換成資料的話, 可以說現在這一條雜湊鏈是一個數據庫了
而且這樣的資料庫 有防止篡改, 公開驗證的特性。
共識機制
那麼對於這樣一條雜湊鏈, 是由誰來上傳和記錄資料呢, 換句話說, 誰能把資料雜湊然後成為雜湊鏈的新節點?
答案是共識機制,顯然不能每個節點都能夠記錄資料, 因為這樣每個節點得到的交易可能不同, 導致雜湊鏈不同,出現分支, 我們使用工作量證明來當做共識機制, 由於雜湊函式的隨機性, 每次的雜湊值的每一位的0/1的概率相同, 當節點找到某個值,其雜湊值的前n位為0, 就表示工作完成, 此節點就被加入到雜湊鏈裡, 完成這一過程需要2^n次雜湊計算
總結
首先明白區塊鏈實質上是一條雜湊鏈, 雜湊函式能把變長值變成固定長度的雜湊值, 且不可逆。 區塊鏈就是把區塊頭當做資料進行雜湊的雜湊鏈, 此時區塊鏈已經有了雜湊鏈的特性了, 但是不能每個人都能把資料雜湊然後成功加入鏈中,所以加入難度, 想要加入鏈中雜湊值必須滿足條件(前n位為0這也就是挖礦的過程。 零知識證明則是節點如何在不透露金鑰的情況下,驗證身份的理論基礎。