扣丁學堂區(qū)塊鏈培訓之哈希函數詳解
2018-06-06 14:01:29
1702瀏覽
隨著區(qū)塊鏈的火熱以及產業(yè)規(guī)模的初步形成,區(qū)塊鏈已經在各個領域蓬勃發(fā)展,從硬件制造、基礎設施到底層技術開發(fā)、平臺建設,再到安全防護、行業(yè)應用,以及媒體社區(qū)等區(qū)塊鏈行業(yè)服務機構,已經初步形成了一個完整的產業(yè)生態(tài)鏈。
區(qū)塊鏈技術作為比特幣的底層技術,本質上是一個去中心化的數據庫。是指通過去中心化和去信任的方式集體維護一個可靠數據庫的技術方案。區(qū)塊鏈技術是一種不依賴第三方、通過自身分布式節(jié)點進行網絡數據的存儲、驗證、傳遞和交流的一種技術方案。因此,有人從金融會計的角度,把區(qū)塊鏈技術看成是一種分布式開放性去中心化的大型網絡記賬薄,任何人任何時間都可以采用相同的技術標準加入自己的信息,延伸區(qū)塊鏈,持續(xù)滿足各種需求帶來的數據錄入需要。
那么下面來介紹一下關于區(qū)塊鏈培訓技術之哈希函數詳解:
哈希函數是指一類數學運算過程,它接受任意大小的輸入值,經過一番運算后可以很快給出一個確定的固定長度的輸出值,這個輸出值可以作為這個輸入值的數字指紋。正如對于雙胞胎而言,他們各自的指紋也是獨一無二的,哈希函數的設計使得它也具有同樣的特性:即使是非常微小的輸入值差別,哈希函數的運算結果也會有非常巨大的差異。除此以外,哈希函數沒有任何啟發(fā)式算法,輸入和輸出的關系看起來是完全隨機的,例如給一個確定的輸出結果,要求對應的輸入值應該是多少,或者是要求輸出結果小于某個值,問一個符合條件的輸入值應該是多少,這些問題的求解沒有什么技巧和方法可循,只能通過不斷地進行嘗試,嘗試的次數越多,越有可能找到答案。
我們可以利用哈希函數的這些特性實現(xiàn)很多功能。例如數據保護:將數據的內容和數據的哈希值一起發(fā)送,接收者對接收到的數據進行哈希運算,對比即可知道數據是否被篡改。再比如,網站在進行用戶登錄時,可以在數據庫里存儲用戶密碼的哈希值,與用戶輸入的密碼的哈希值進行比對來驗證身份,好處是如果數據庫泄露,黑客也不能通過這些哈希值來反推出用戶的密碼,相對來說比較安全。
值得注意的是,哈希函數的輸入集合是無限的,而由于輸出長度固定,輸出的所有可能集合是有限的,根據鴿籠原理:n+1個元素放到n個集合中去,其中必定有一個集合里至少有兩個元素。所以兩個不同的輸入值有相同的哈希值理論上是一定存在的,但是好在這樣的事情發(fā)生的概率非常小,而且哈希函數也在不斷改進,SHA1函數就曾經被密碼分析人員發(fā)現(xiàn)了有效的攻擊方法,目前比特幣在內的系統(tǒng)采用了更先進的SHA2系列算法,比特幣多年的良好運行表明至少到目前為止SHA256算法經受了檢驗。此外,連續(xù)多次使用哈希函數也是一種更加安全的選擇。
哈希函數在比特幣中有多處運用,可以說扮演了非常關鍵的角色。
對交易信息進行壓縮和驗證
由于區(qū)塊鏈要處理的交易信息內容龐大,將每個塊內的所有數據直接以序列的方式存儲將會非常低效且耗時,但是利用哈希函數可以對信息進行壓縮和驗證。使用Merkle樹可以很快驗證某筆交易是否屬于某個區(qū)塊,它的簡化示意圖如下,對于打包到一個區(qū)塊的所有交易,首先將它們劃分為幾個部分,如下圖中的交易信息1、交易信息2……并計算出對應的哈希值1、哈希值2……之后兩兩結合進行哈希運算,最終得到這個Merkle樹的根哈希值。如果某一筆交易信息記錄的數據有變化,那么最終算出來的Merkle根哈希值也會不一樣。
用于工作量證明,形成共識那么為什么要使用這樣的算法,而不是直接將所有的交易信息串成一個大塊并且算出它的哈希值呢?原因在于這樣的二叉樹結構可以允許僅僅進行少量數據的驗證,同時如果交易的數據信息有誤也可以快速定位至出錯的位置。
為什么都說區(qū)塊鏈是不可篡改的呢?首先考慮一個如下的簡單的哈希鏈:每次打包時包含上一個區(qū)塊的哈希值和這個區(qū)塊的相關信息,如果某一個塊的信息被篡改了,往后所有塊的哈希值都會有變化,其他人也會注意到這個變化。但是這樣設計的問題在于任何人都可以修改某一個區(qū)塊上的信息,重新計算剩余鏈條的所有信息,并且聲稱這才是正確的鏈。
比特幣設計的精妙之處在于,它使得要實現(xiàn)這樣的過程需要付出昂貴的成本。它采用工作量證明的共識機制,大家爭相證明自己完成了一定的工作量,最先完成的獲得記賬權。而工作量指的就是要求找到一個隨機數,使得它加上一個給定的字符串后計算得到的哈希值小于某個值。在比特幣中,這個給定的字符串包含了版本號、上一個區(qū)塊的哈希值、以Merkle根哈希值存放的交易信息,時間戳、難度值的信息。礦工找到符合要求的隨機數,既“合法”宣告了自己的記賬權,也通過哈希函數完成了對交易信息的編碼,并以一種不可篡改的方式存儲。如果有人試圖想更改交易信息,他必須運氣特別好,能夠快速且成功地找到往后鏈條的每個區(qū)塊的正確的隨機數,使得他篡改信息后的鏈條成為當前最長的鏈條,這樣的情況理論上的確可能發(fā)生,但是在算力有限的情況下,概率比較小。
用于生成比特幣錢包地址
在比特幣的交易中,大家都能看到的信息如下圖,左上角是交易號碼,綠色箭頭連接的兩個字母和數字組成的字符串是比特幣地址,表明比特幣在兩個地址之間有了轉移。而這個地址的生成是由錢包的公鑰經過哈希函數轉換而成的。其中公鑰是由隨機數字構成的私鑰通過非對稱加密形成的。交易時公鑰和比特幣地址都需要公開發(fā)布,來使區(qū)塊鏈系統(tǒng)驗證付款交易的有效性。
在這里哈希函數扮演的角色相當巧妙:量子計算機可以很容易從公鑰反推出私鑰,但是量子計算機在面對哈希算法時則難以找出擁有同一個哈希值的兩個不同輸入值,可以說中本聰的這個設計使得通過一些操作可以讓比特幣有可能抵御量子計算機的威脅:比如每個比特幣地址都只用一次,每次付款轉賬到別人的地址和自己的找零地址中。
以上就是關于扣丁學堂區(qū)塊鏈培訓之哈希函數詳解的詳細介紹,想要了解更多請關注扣丁學堂官網、微信等平臺,扣丁學堂IT職業(yè)在線學習教育平臺為您提供權威的
區(qū)塊鏈視頻教程系統(tǒng),通過千鋒扣丁學堂金牌講師在線錄制的區(qū)塊鏈技術視頻教程課程,讓你快速掌握區(qū)塊鏈技術從入門到精通開發(fā)實戰(zhàn)技能。
【關注微信公眾號獲取更多學習資料】
查看更多關于“區(qū)塊鏈培訓技術資訊”的相關文章>>
標簽:
區(qū)塊鏈
區(qū)塊鏈技術
區(qū)塊鏈培訓
區(qū)塊鏈視頻教程
區(qū)塊鏈是什么