當我在研究區塊鏈時,我發現了壹個像幽靈壹樣反復出現的單詞,英語中的“hash”和“HASH”。
說“拉肚子”的同學,滾出去!!
這個“散列”據說來自密碼學的壹個函數。試著搜索壹下,論文壹堆壹堆地出來,要麽橫著要麽豎著,不是表格就是圖片,還是有壹堆人看不懂xyzabc。兄弟,我只是想知道區塊鏈的基本知識。為什麽對我來說這麽難?!我最長的密碼是123456,比較復雜的是654321。最復雜的時候,我在末尾加了壹個A。妳給我寫的復雜度明顯感覺我的腦力被榨幹了,僅存的腦細胞成批死亡!為了讓我這樣的小白同學知道這壹點,我不願意用傻瓜式的語言解釋哈希計算,不求最準確只求最簡單易懂。讓我們開始吧:
# 1.什麽是哈希算法?
## 1.定義:哈希算法是將任意長度的字符串轉換為固定長度的字符串。
由此可見,可以理解為輸入壹串數字進行* *“哈希運算”,它會輸出壹串數字* *。
如果我們自己定義“加壹算法”,那麽輸入1,輸出2;輸入100和輸出101。
如果我們定義自己的大寫算法,那麽輸入“abc”並輸出“ABC”。
呵呵,先別打我!這實際上只是壹個函數的概念。
# 2、特點:
這種哈希算法與我的“加壹算法”和“改變大寫算法”相比有什麽特點?
1)*確定性,快速計算**:計算結果都壹樣,計算效率高。
2)**不可逆* *:表示知道輸出無法推斷輸入值。
3)**結果不可預測* *:表示輸入變化不大,結果上下顛倒,沒有規律。
簡而言之,這個哈希操作是壹個黑盒,是加密的好幫手!妳說“1111”,加密為“b0bae 9d 279d 34 fa 1 fdf 71 aadb 908 c3f”,妳說“165438”。反正輸入和輸出都在天上地下,即使輸入有關系,兩個輸出也沒有關系。
# 2.區塊鏈中哈希運算的使用
## 1,數據加密
* *交易數據通過哈希運算加密,相應的哈希值寫入塊頭* *。如下圖所示,塊頭包含上壹個塊的哈希值和下壹個塊的哈希值。
1)、* *識別塊數據是否被篡改* *:區塊鏈的哈希值可以唯壹準確地識別壹個塊,區塊鏈中的任何節點都可以通過簡單的哈希計算獲得該塊的哈希值。計算出的哈希值沒有改變,這意味著區塊鏈中的信息沒有被篡改。
2)、* *將所有塊串聯成壹個區塊鏈* *:每個塊都包含上壹個塊的哈希值和下壹個塊的值,這相當於將上壹個塊的哈希值掛鉤到上壹個塊的末尾,將下壹個塊的哈希值掛鉤到下壹個區塊鏈的開頭,從而自然形成壹個具有鏈式結構的區塊鏈。
## 2.加密交易地址和散列
在上面的塊頭中,有壹個Merkle root的哈希值。它是用來做什麽的?
首先,什麽是Merkle root?它是二叉樹結構的根。什麽是二叉樹?什麽是根?看下圖就知道了。壹分為二,二分為四,四分為八可以壹直分下去,這就是所謂的二叉樹。根是頂級節點,稱為根。
這個根的數據是怎麽來的?它是獲取壹個塊中每個事務的哈希值,然後成對哈希,然後哈希,然後哈希直到達到最大值。
這壹切都是怎麽回事?有什麽作用?
1)、* *快速定位每個事務* *:因為事務是線性存儲的,所以定位壹個事務將需要遍歷,這是低效且緩慢的。您可以通過這樣的二叉樹快速定位所需的事務。
舉個不恰當的例子:如何求0-100之間的任意整數?(假設答案是88)那麽更好的方法是問:1,大於50還是小於50?2.比75大還是小?3.比88大還是小?只需幾個問題就能快速找到答案。
2)、* *驗證交易數據是否被篡改* *:從交易到每個二叉樹的哈希值的任何數字更改都將導致Merkle根值的更改。同時,如果出現錯誤,可以快速定位錯誤的地方。
# 3,采礦
?我們的塊頭中有壹個參數叫做* *隨機數Nonce,尋找這個隨機數的過程叫做“挖礦”* *!只要網絡上的任何機器找到壹個合適的數字來填充自己塊的Nonce位置,這樣塊頭中六個字段(80字節)中數據的哈希值就以18個零開始,誰會找到“黃金”!由於我們無法事先寫出壹個滿足18個零的數,然後推導出Nounce,因此唯壹的方法是從零開始逐個嘗試,看看結果是否符合要求,如果不符合,則嘗試下壹個,直到找到為止。
妳找這個號碼做什麽?這樣做有什麽用?
1)、* *公平地找到計算能力最強的計算機* *:這有點像我這裏有壹顆沙子,然後我告訴妳它與其中壹個海灘相同,妳找到相同的壹個。可行的辦法是每壹個都拿起來對比壹下!那麽速度最快的人最有可能提前到達沙灘。這就是所謂的“工作量證明pow”。妳先找到這些沙子,我認為妳比較的次數最多,做的工作也最多。
2)、* *動態調整難度* *:為了確保在10分鐘內產生壹個區塊,比特幣將計算每2,065,438+06個區塊(2周)找到此nonce數的難度。如果這2,065,438+06個區塊的平均時間小於10分鐘,則難度會增加,如果大於10分鐘,則難度會降低。這樣,無論整個網絡的挖掘計算能力如何變化,都可以在10分鐘內計算出隨機數nonce。
# 3.什麽是哈希運算?
說了這麽多哈希運算,好像哈希運算是壹種,其實不是!作為密碼學中的壹種哈希運算,已經衍生出了許多流派並不斷發展。看完《滿頭包》我還是覺得內部機制太復雜了。我暫時把它列在下面,這樣白人有個印象,知道是怎麽回事就好了。
從下表可以看出,哈希操作也在不斷發展,有各種算法,各種應用程序也在靈活地應用單個或多個算法。在比特幣系統中,DASH操作基本上使用SHA256算法,而Litecoin使用SCRYPT算法,誇克貨幣使用許多算法串聯,而heavy coin(HAV)並行使用以下算法,並且每個部分都混合使用。Ethereum的POW階段使用ETHASH算法,ZCASH使用EQUIHASH算法。
需要註意的是,哈希運算的各種算法都在不斷升級和改進,而各種貨幣使用的算法也不是壹成不變的,都在不斷優化。
* *摘要* *:哈希運算廣泛應用於區塊鏈的各個項目中。以比特幣為例,我們可以看到它在* *數據加密、交易數據定位、挖礦等方面發揮著極其重要的作用。作為密碼學的壹個方向,哈希運算在不斷發展和延伸。作為普通白人,我們想了解區塊鏈的壹些基本概念,了解這個水平就足夠了。