和數軟體:以最簡單的方式瞭解區塊鏈技術

LikeLib發表於2019-03-15

瞭解比特幣和區塊鏈非常簡單,只要理解三部分, 第一是瞭解其資料結構,第二個就是分散式儲存和共識,第三就是網路和節點。

雜湊函式不管是在資料結構還是在分散式共識方面都是非常重要的,那麼什麼是雜湊函式呢?

一般來說雜湊函式是一類可以把任何資料轉換成固定長度輸出(也就是我們說的雜湊值)的數學函式,而且可以被高效的計算, 所以我們一般會用來構建雜湊表等。

在此基礎上密碼學雜湊還多了3個特性。

  1. 是無衝突
  2. 可以隱藏原資料
  3. 可以用來建立搜尋謎題

無衝突的意思呢,是指這個雜湊函式永遠不會把兩個不同的數轉換成同樣的雜湊值。

我們以sha-256為例(sha-256也是比特幣裡用到的雜湊函式,屬於sha-2系列),它可以將資料,不管這個資料(輸入)多大或者多小都可以轉換成256位元,也就是32位元組的一個雜湊值。

就算這個資料(輸入)只更改來一個標點符號,生成的雜湊值也是完全不一樣的。

但是理論上來講,雜湊值重複的情況是存在的,我們稱這種情況為衝突,因為你想啊, 這個輸入是無限的,你可以輸入任何資料,大的小的都行。 而這個輸出,雜湊值它是有限的。(32位字母和數字的組合,組合的次數是有限的)但是這個數字是很大的,如果你要找到sha-256雜湊值重複的這種情況,就是試2的130次方的輸入,這個數字是一個天文數字,我的電腦都打不出來。 所以呢沒有人能找到衝突也就是雜湊值重複的情況。

在確定來雜湊值的獨一性後,我們就可以用雜湊值來作為識別檔案。在檔案很大的情況下就異常的有用了。當然這個只是初級玩家的用法。

高階玩家玩更溜了。

相信玩程式設計的朋友都知道一種資料結構叫linked list。

單向linked list

就是用指標把不同的資料塊按順序連結起來,那麼現在我們確定了雜湊值的獨一性後,是不是可以把這個雜湊值拿來當指標用呢?

具體怎麼實現呢?

首先計算出第一個資料塊的雜湊值,然後把這個值放在第二個資料塊裡,再計算第二個資料塊(包含了第一個資料塊的雜湊值)值,以此類推,你就得到了一種新的資料結構,俗稱區塊鏈。

當然,這只是區塊鏈資料結構,而不是我們現在說的區塊鏈技術(後者還包含了分散式儲存和分散式共識,還有點對點網路)然後這個資料結構比起linkedlist多了一個特性,那就是防篡改。任何人想要修改這個鏈裡資料塊的訊息,都會很容易被發現,因為雜湊值會對不上。

可以隱藏原資料

密碼雜湊函式的第二個特性就是可以隱藏原資料,因為雜湊函式是單向函式,你可以把資料轉換成雜湊值,但是不能把雜湊值轉換成原資料。因此,雜湊函式有可以隱藏原資料的特性。

這個就非常有用了,最知名的應用就是拿來儲存密碼。

比如說你在某網站的密碼,如果這個網站直接把你的密碼存在了他們的伺服器上,那是非常不安全的,但是如果是儲存了你的密碼對應的雜湊值,你每次輸入密碼的時候後臺自動轉化成雜湊值,只要雜湊值對上就可以登陸了。這樣安全性就提高了很多。

但是為什麼還有那麼多盜號,盜密碼的情況發生呢?那可能是因為你的密碼很常見,所以黑客只要需要輸入所有常見的密碼,然後用雜湊值一對比,就知道了。

所以要想安全的隱藏“原資料的”的話,對輸入的隨機性和廣泛性有要求的。 也就是為什麼很多網站硬性要求密碼要有符號,有大寫字母,小寫字母,數字等。

可以用來建立搜尋謎題

第三個特性就是建立搜尋謎題,就是我用雜湊函式建立一系列的數學難題,然後再給出一定範圍(難度隨著範圍大小變大變小)的可能答案,然後讓你一個個的去試,(注意的是,這個是沒有任何捷徑的,就像我們之前將的那樣,改一個標點符號雜湊值就會完全不一樣,而且這個雜湊值的生成也是沒有任何邏輯和規律可循,所以只能一個一個的試)如果運氣好,找到了正確的答案,把答案和你解決的這個難題的資訊一起雜湊就會得到特殊的雜湊值。(如以很多0開頭啊,或者以很多x結束啊類似的) 。

這個運用在比特幣挖礦裡, 如果你找到了答案(nonce),然後和區塊頭裡的資訊一起雜湊,就會得到一個以很多0開頭的特殊的雜湊值。

相關文章