【本文由贊我(zaneds.com)獨家冠名】
?計算機密碼學對區(qū)塊鏈技術(shù)來說可謂是重中之重,我們在閱讀各種區(qū)塊鏈項目的白皮書或者區(qū)塊鏈相關(guān)書籍中搓逾,也多少會提及XX算法,如哈希算法和非對稱算法,但是算法到底是怎樣一種存在瑰枫?在區(qū)塊鏈技術(shù)中又解決了哪些問題呢斟叼?今天就帶來一次計算機密碼學的算法之旅--哈希算法
?01
哈希算法一般指SHA家族偶惠。SHA是什么?英文全稱是Secure Hash Algorithm朗涩,即安全散列算法忽孽。能計算出一個數(shù)字消息所能對應(yīng)的固定長度字符串的算法。且如果輸入的數(shù)據(jù)不同谢床,他們能對應(yīng)的不同字符串的機率很高兄一。注意,這里并不是絕對不同识腿。
通過這個定義可以看出哈希算法的特性出革。第一,輸入是可以任意長的字符覆履;第二蹋盆,輸出是固定長度的字符串;第三硝全,函數(shù)的計算過程是有效率的栖雾。簡單的說,就是通過一種方法伟众,可以將任意輸入的字符串計算出一段固定長度的字符串析藕。根據(jù)這種方法,哪怕數(shù)據(jù)發(fā)生微小的變化凳厢,重新計算后的哈希值也會和之前的不一樣账胧。而且計算出的來的結(jié)算,是無法再通過一個算法還原出原始數(shù)據(jù)的先紫,即是單向的治泥。故這種算法適合于身份驗證的場合,由于哈希值能起到一個類似身份證號的作用遮精,因此可以用于判斷數(shù)據(jù)的完整性居夹。
由于哈希算法的輸出值是固定的败潦,而原始數(shù)據(jù)是多種多樣的,所以理論是會存在不同的原始輸出輸入同一種哈希值的可能准脂。但是這種情況只有在原始數(shù)據(jù)的數(shù)量極其龐大的時候才會出現(xiàn)劫扒。例如郵件系統(tǒng)的坑垃圾郵件算法,為了解決這種問題狸膏,對郵件地址進行多種哈希計算沟饥,將計算出來的值聯(lián)合起來判斷是否存在某個郵件地址,即布隆過濾器的原理湾戳。此原理在比特幣中有應(yīng)用贤旷。
02
那么在區(qū)塊鏈中哈希算法有哪些呢?主要是區(qū)塊哈希和梅克爾樹院塞。
區(qū)塊鏈是鏈的結(jié)構(gòu)遮晚,而且無法篡改性昭,那是怎么實現(xiàn)的呢拦止?在區(qū)塊鏈技術(shù)中,對區(qū)塊頭進行了哈希計算糜颠,得出某個區(qū)塊的哈希值汹族,用這個哈希值唯一確定某一個區(qū)塊,即給這區(qū)塊確定了一個身份證ID其兴,區(qū)塊之間通過這個身份ID串聯(lián)顶瞒,即區(qū)塊生成的區(qū)塊哈希值將成為下一個區(qū)塊的重要標記,這樣每一個新生成的區(qū)塊的區(qū)塊頭都包含了前一個區(qū)塊的哈希值元旬,這就使得從創(chuàng)世塊到當前區(qū)塊鏈接在一起榴徐,形成了一條長鏈。由此這樣的區(qū)塊鏈結(jié)構(gòu)也使得區(qū)塊鏈數(shù)據(jù)難以篡改匀归,這只是其一坑资。
?03
區(qū)塊鏈是如何證明數(shù)據(jù)完整性,如何保證交易不被篡改呢穆端?這就要說到哈希的另一應(yīng)用袱贮,交易哈希-梅克爾樹。區(qū)塊中的交易記錄被一個成為梅克爾樹的數(shù)據(jù)結(jié)構(gòu)來進行哈希值計算和存儲体啰,但是只有哈希值記錄在區(qū)塊的哈希值中攒巍。
舉個例子,一個合同有N頁荒勇,當我們簽訂合同的時候柒莉,會在每一頁都蓋章,但是蓋的章都是一樣的沽翔,如果其中一頁被替換被修改樣式無法防止的兢孝。但是如果我們蓋章數(shù)字章,即給每一個的數(shù)字印章是前一頁加本頁內(nèi)容加一起使用哈希算法生成哈希值,即N頁的數(shù)字章=HASH(N—1的數(shù)字章+N頁內(nèi)容)西潘,這樣的話卷玉,如果對第一頁的內(nèi)容篡改,那本頁的哈希值肯定和本頁的數(shù)字章不再相符喷市,且之后的也是如此相种。這就是默克爾樹的優(yōu)勢。第一我們可以知道信息是否被篡改品姓,第二我們還能知道第幾塊信息被篡改寝并。
比特幣是分布式的網(wǎng)絡(luò)結(jié)構(gòu),它支持一個叫做“簡化支付協(xié)議(spv)”的協(xié)議腹备,一個沒有下載完整區(qū)塊鏈數(shù)據(jù)的節(jié)點衬潦,也能通過向其他節(jié)點索要包括從交易哈希沿默克爾樹上溯至鏈頭處的跟哈希的哈希序列,以此來快速確認交易輸出的正確性植酥。
04
簡單總結(jié)下镀岛,哈希算法即通過一定的函數(shù)計算過程,將任意長度的字符轉(zhuǎn)換成固定長度的字符串友驮,而且此種算法是不可逆的漂羊,即單向的。區(qū)塊鏈中的哈希算法應(yīng)用主要是區(qū)塊哈希和梅克爾樹卸留;區(qū)塊哈希即對區(qū)塊頭部進行了哈希算法走越,確定上一個哈希塊的地址。區(qū)塊鏈的交易記錄通過哈希計算后存儲為樹狀的數(shù)據(jù)結(jié)構(gòu)耻瑟,即梅克爾樹旨指。區(qū)塊鏈的不可篡改和數(shù)據(jù)的完整性基本是通過以上兩種計算機技術(shù)方法實現(xiàn)的。由此可見計算機密碼算法在區(qū)塊鏈中的應(yīng)用是非常重要的喳整。
好了谆构,今天帶大家了解了下什么是哈希算法以及哈希算法在區(qū)塊鏈技術(shù)中的應(yīng)用,大家也了解了哈希算法在區(qū)塊鏈中解決了哪些問題算柳。關(guān)于非對稱算法低淡,敬請期待后續(xù)文章。