iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
Security

學密碼學也猜不到你的手機密碼系列 第 17

DAY 17- 雜湊函數 HASH

「將咱兩個一齊打碎,用水調和;再捻一個你,再塑一個我。我中有你,你中有我;我與你生同一個衾,死同一個槨。」大概就是這種感覺。


雜湊函數有點像擷取你身體的一部分資料,再把他變成你獨一無二的編號。
比較常講的說法就是,為資料建立指紋。

特性

雜湊函數是固定輸出的。
也就是說不管多長的資料,經過雜湊函數後的長度會是一樣的。
舉例來說,任何資料經過 SHA-1 計算後的長度都會不多不少是160位元。

另外,雜湊函數的結果(雜湊值)幾乎可以說是唯一的,
也就是說不同的資料要得到相同的雜湊值是非常困難的。
這樣有助於確認訊息的正確性。
就算兩個訊息只差極少量的位元,分別輸出的雜湊值也會天差地遠,
這個現象稱為雪崩效應(Avalanche effect)
這個性質可以很好的拿來運用在驗證訊息的完整性。

而最後要注意的是,雜湊函數是無法逆推的,我們也沒辦法做解密。

所以我們要雜湊函數幹嘛?

記得我們說過公鑰密碼系統的另外一個功能,數位簽章嗎。
數位簽章是對一整段訊息進行私鑰加密,大眾可以用公鑰解密看看是否是你本人所簽署。
但是資料太長,簽章後的結果會太長,不好用。
因此雜湊函數就是一個很好的壓縮機,他把訊息壓縮成唯一的值,而且更短(這樣很好)。
那麼經過雜湊後在簽章的值應該也要是可驗證的。

我們會在幾天後看到數位簽章中的雜湊函數。

SHA family

SHA(就唸"夏"),Secure Hash Algorithm,
是由 NSA 所設計,由NIST發布成為標準。
裡面包含了許多演算法,包括SHA-0、SHA-1、SHA-2、SHA-3,

其中SHA-1已經不安全了,
而SHA-2和 SHA-3 都可以選擇不同的輸出位元數。

SHA-2 和 SHA-1 的算法類似,SHA-3則是全新的算法。
比特幣區塊鏈所使用的雜湊函數即是SHA-256,是SHA-2演算法中輸出值為256位元的算法

這是維基百科上SHA-2的示意圖,
經過這些運算之後會產生固定位元長度的雜湊值。

至於為什麼在比特幣區塊鏈上會使用到雜湊函數,

我們可以把他看成是一種證明。
區塊鏈上許多礦工們彼此要爭打包(也就是幫你把交易內容寫到區塊鏈裡面)的工作,
因此他們要做的事情就是將交易內容後面加上一個值,並算出 SHA-2 的值。
不斷更改後面的值,直到輸出的雜湊值符合一個形式,
那麼他就有打包這個區塊的權利,也就會獲得獎賞。

前面說過,雜湊值的結果是無法預測的,
沒有辦法推論的結果之下,最快的方法就是窮舉,
不過就算窮舉,要能算出指定的雜湊值還是不容易的。
(所以才要買礦機啊)


今天大概介紹了雜湊函數的功能以及其性質,
明天來將一下SHA-256怎麼運作。
掰掰一~

圖片來源:
https://zh.wikipedia.org/wiki/SHA-2
https://academy.bit2me.com/en/sha256-bitcoin-algorithm/


上一篇
DAY 16- DHKE、ECDH、ElGamal
下一篇
DAY 18- 雜湊函數 SHA-256
系列文
學密碼學也猜不到你的手機密碼30

尚未有邦友留言

立即登入留言