【區塊鏈小教室】第二講:密碼學 &雜湊函數

兩個重要的技術賦予區塊鏈的不可篡改性去中心化意義

葉顧純
Dapp Pocket
8 min readSep 10, 2019

--

第一講裡提到區塊鏈的不可篡改性去中心化,相信許多人會和我產生一樣的疑惑:「沒有第三方、不須仲介代辦的去中心化應用,的確可以省去很多時間成本,可是那要怎麼確保不經手第三方的資料沒被動過手腳?沒有銀行,一筆交易的真偽如何認證?」

如果去中心化不能解決以上認證、防偽的問題,那區塊鏈的不可篡改性也只不過是一堆不可篡改,但是也無憑無據的交易。

所以 Cryptography (密碼學) Hash Function (雜數值)就誕生了!是這兩個重要的技術賦予區塊鏈的不可篡改性去中心化意義。

Cryptography密碼學 🔐

在資訊發達的現在,密碼學其實隱藏在我們日常生活中的每一處,像是登入郵件、社群…等等都需要輸入一個專屬於自己的密碼一樣,而久遠以前羅馬人說的Kryptosgraphia(密碼學) 也就是Kryptos (hidde) + Graphia (message) 隱藏的訊息,是不是很有趣呢?

而區塊鏈使用的密碼學技術是 Public Key Cryptography (公鑰密碼學),又稱 Asymmetric Cryptography (非對稱式密碼學)。從 Public Key (公鑰) 可以知道必定也有 Private Key (私鑰) 的存在,公私鑰的區別就在私鑰不可以給別人看,要自己保管好 ; 而公鑰則是一個可以公布給所有人知道的資訊。

公私鑰匙都可以進行 encryption (加密)decryption (解密),並且兩兩配對(故稱非對稱式密碼學),一個私鑰產生一個公鑰,且只有成對的公私鑰可以互相解密。

當公鑰加密成為鎖,私鑰就是他的解,反之亦然,形成兩種不同的資安用途:

  1. 📩公鑰加密,私鑰解密:保護被傳送的訊息本身,證明只有私鑰擁有者可以閱讀。

例如:Alice 要傳送銀行資料給Jack,她用Jack的公鑰加密,而Jack公鑰的解鎖就是Jack的私鑰,代表說這項銀行資訊只有Jack有辦法解密閱讀。

2. 👤私鑰加密,公鑰解密:保護公鑰持有者,證明發佈人 (私鑰擁有者) 的正當性。

例如:Digital Signing (數位簽章✍️)。Jack是一家公司老闆,今天他想以他的名義發布訊息給大眾,要如何確保是Jack老闆本尊發布的呢?只要Jack用他的私鑰加密,接下來知道Jack公鑰的大眾便可以解密得到資訊。

注意:這裏使用公私鑰的目的就和第一種保護機密訊息不同,而是為了要確保發佈人的資訊沒有在傳送途中被竄改,因為要是被竄改,大眾用Jack公鑰時便會解密失敗。

更簡而言之來說,使用公鑰加密時有如我們的郵筒,讓任何人都可以寄送想保密的資料給我們,只有擁有郵筒鑰匙的我們可以看到訊息 ; 另一方面,用私鑰加密目的在確保發佈人身份,功用如同digital signature (數位簽章)。

現下常見的Public Key Cryptography公鑰密碼學

  • RSA加密演算法:Rivest Shamir Adelman (RSA) Algorithm
  • ECC加密演算法:Eliptic Curve Cryptography (ECC),目前比特幣和以太坊採用的公鑰密碼學,較受青睞的原因是ECC較RSA處理上更有效率。

關鍵筆記:Public Key Cryptography 公鑰密碼學

  • 公鑰密碼學解釋了,為什麼在區塊鏈上使用錢包、轉換貨幣安全,同時也解釋了做到身份認證的機制。
  • 只有產出公鑰的當事人會擁有私鑰,而且產生公鑰是不可逆的過程,在別人知道你的公鑰後,並不可能逆推回去原本的私鑰。(需要大到不可能發生的電腦運算能力)
  • 經過加密的訊息有如亂碼,需要對應的鑰匙(一把公鑰配一把私鑰or一把私鑰配一把公鑰)解密才能把亂碼打回原形。

Hash Function 雜湊函數 🔗

什麼是區塊鏈的雜湊函數?請看下圖秒理解。

沒錯,區塊鏈的雜湊函數就是一個可以接收各種檔案形式(數字、文字、圖像、影片、電子書、合約…等等)、檔案大小,並且經過雜數方程式運算,壓縮後,丟出一串固定大小的數字。

「咦,數字?我怎麼還有看到英文。」

因為雜湊函數是以十六進位為基礎,不同於我們生活中每天在用的十進位,十六進位在 1~9 之後代表的數字 10~15,就是ABCDEF。

雜湊函數其實就像是雜數方程式,跟數學方程式一樣有多到數不清種樣子,可能是x+y=?最簡單的加法,當然也可能如此複雜。

雜湊函數也有非常多種,隨便舉幾個例子 MD5 (128-bit) 、 SHA-256 (256-bit) 、 SHA-512 (512-bit) 。括弧中的幾bit代表檔案壓縮後,產出那串數字的大小,而bit越大代表可能產生的數字越多種,區塊鏈也就越安全。試想要是今天檔案壓縮後只有2²=4種可能,跟另一個256 bits的雜湊函數大約有2²⁵⁶=1.15 x 100000000000000000000000000000000000000000000000000000000000000000000000000000 (沒錯,有77個0這麼多) 種可能相比,哪個更安全,更不容易被駭客破解呢?

雜湊函數除了可以把各種檔案壓縮成一串串大小相同的數字外,他還有幾樣特色:1. 產出非常迅速,好奇的朋友可以親自玩玩看 SHA-256 雜湊函數 ; 2. 即使只是相差一個字,出來的數字相差十萬八千里(試著輸入dog和dog3,看看會發生什麼事!)所以如果智能合約裡有一個標點符號、一個英文單字、或是一個數字被改變,都會立刻被發現 ;

3. 最後也是最重要的一點,真的很重要,區塊鏈使用的雜湊函數是一種one-way(單向)方程式,也就是說沒有人可以從產出的那串密碼回推原始檔案,有沒有覺得好像似曾相似? 沒錯,前面提到私鑰產出公鑰的過程,就是利用雜湊函數運算的結果,所以不需要在公開公鑰給大眾後,擔心自己的私鑰會有被破解的一天。在這裡真的要向想出應用這個運算法則在區塊鏈上的聰明工程師們致敬。

關鍵筆記:Hash Function雜湊函數

  • 雜數看起來跟一堆沒有意義的亂碼長相有七八分相似。
  • 雜湊函數目的在壓縮檔案,並讓各式各樣檔案可以被量化。
  • 雜湊函數有產出迅速、不易重複性(因為僅差一字就完全不同)、和單向的特性。
  • 經由雜湊函數加持過的密碼,被駭的機率微乎其微 ; 經由雜湊函數加持過的資料,也不可能被竄改。

結語:

區塊鏈有了公私鑰確認身份,又有雜數方程式迅速產生單向的加密數字,讓沒有第三方的區塊鏈也能真正做到交易認證和防偽。

你的鼓勵、回應,是我繼續寫下去的動力。留下一點足跡,讓我知道你讀過。

  • 1~10 Claps 看過覺得還不錯
  • 11~30 Claps 對你有幫助的文章
  • 31~50 Claps 值得分享的文章

若想知道更多區塊鏈的主題,也歡迎在底下留言給我!

馬上使用新版 Dapp Pocket

有這麼多新功能,快打開你的 Dapp Pocket 使用看看吧!還沒下載的朋友快點這邊:

iOS App Store

Android Play Store

很快 Dapp Pocket 將會推出更多新功能,甚至有全新的產品會推出喔😁想要知道我們的第一手資訊,歡迎追蹤 FacebookTwitter。也很歡迎加入我們的 TelegramLINE 一起討論喔。

參考資料

--

--