區塊鏈密碼學:雜湊(Hash)
By ·
這篇我們要先介紹比特幣使用到的密碼學技術:Hash(雜湊)。hash是什麼,有點類似「洗牌」把牌洗亂的概念,只是洗的不是牌,而是一筆資料,這個「洗」的過程是經過嚴謹定義的,且產生的結果會是固定長度的。常見的hash演算法有MD5、RIPEMD-160、SHA1、SHA256等,不同hash演算法「洗」的過程都不同,產生出來hash值長度也不同,像是MD5不管喂進去的資料多大,最終都會產生128 bits的結果,而SHA256產生的hash值則會是256 bits。一個好的hash演算法通常需要具備以下這些特性:1.輸入任意長度的資料,產生的hash值是固定長度的2.取得hash值的計算過程是快速的3.輸入的資料有任何一點改變,產生的hash值會有很大的差異4.具有單向性,可輕易輸入資料取得hash值,但無法從hash值得知原始資料的內容hash可以拿來做什麼呢?假如今天阿牛在下班前打了一份500頁的重要檔案,因為檔案很重要不能帶離公司,那隔天他上班時如何得知是否有人趁晚上潛入公司偷改他的檔案,有一個很簡單的作法,就是取得整份檔案的hash值,比如說用SHA256取得一個256bits的hash值,然後記在紙上或其他地方,隔天到公司時,只要對這份檔案取得hash值,然後跟昨天下班前得到那個256bits的hash值比對,如果兩者有差異,表示有人偷改這份檔案,阿牛就要再仔細檢查這份檔案,如果兩者一樣,表示檔案沒有被修改過,阿牛可以安心的繼續編輯他的檔案。再回來看為什麼一個好的hash值需要上述的四點呢?1.固定長度:因為結果是固定長度的,阿牛可以知道要準備多大張的紙來抄,而不會有時長有時短,也不方便比對。若是程式來說,設計者可以事先規劃多大的空間放置hash值,不用擔心Overflow的問題2.快速得到結果:雖然輸入的資料越大,計算hash的時間會相對增加,不過整體的過程還是不需要太複雜的計算,因此即便阿牛的檔案是500頁,也可以快速的得到hash值3.任何改變產生的結果都截然不同:阿牛的整份500頁檔案即便有人多加了一個空格,隔天阿牛也可以明顯的知道hash值不一樣了,而第三個特性還有一個重要的原因,就是不能讓原始資料與hash值可以看出什麼關聯性,因此即便是原始資料有任何一點改變,結果都是截然不同的4.具有單向性:假如今天阿牛不小心將紙條掉落在電梯裡,被其他人撿走也不會擔心重要檔案的資訊會外流,因為無法從hash值回推原始資料的內容hash應用非常廣泛,比如說網站登入時會先將密碼轉成hash值,若有人擷取到資訊,密碼也不會外流。有些軟體也會提供hash值,使用者下載後可以將檔案hash比對,就能知道下載的軟體是否有被竄改。而數位簽章也是使用hash來減少需要加密的資料。不過有些hash演算法像是MD5、SHA1已經不建議使用了。那麼hash值與比特幣有什麼關係呢?比特幣所謂的「挖礦」,其實就是不斷的計算hash直到找到合法的hash值,這個合法的hash值就是我們上一篇說的「幸運草」。我們在第一篇文章裡說到區塊鏈的特性之一「難以竄改」就是利用hash值一筆一筆串接下去產生「鏈」的概念,其中任何資料被竄改,會讓原本合法的hash值變成不合法,導致「鏈」斷掉下一篇我們就來講比特幣的「區塊」有哪些資料,「挖礦」是怎麼計算hash值的,並將「區塊」連成「區塊鏈」。更多區塊鏈資訊:www.qukuaiwang.com.cn/news#密碼學#雜湊#Hash
免責聲明:
- 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
- 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
- 鏈報僅提供相關項目信息,不構成任何投資建議。
推荐阅读
;