本文重點?
- 用SHA256算法得到哈希值
- 挖礦起什麼作用
- 塊是怎麼連接成鏈的
基本要素:哈希算法
哈希看起來就像是一串64位的隨機的16進制的字符串, 本質上是某些數字數據的一個指紋; 也就是說每個不同的(文本)內容都有對應不同的指紋(哈希值)
先來看看下圖中的演示, 我們在data區內輸入任意內容, 下面的hash區內就會自動實時計算與之對應的Hash值;並且data區的內容不管是隻有1個字符, 還是你把整個圖書館的內容都錄進去, hash得到的永遠是一串64個字符的哈希值, 同時你永遠也不可能事先猜得到你輸入的內容將得到什麼樣的哈希值
利用這個特性, 我們就可以針對你要保護的內容進行哈希並保存下來,
在此基礎上, 我們把它拓展成稱爲BLOCK的東西, 它至少包含
Block - 在本例中它只是個序號,每個塊都有不一樣的序號 Nonce - 隨機數, 後面會講到 Data - 內容區
常見的做法是先把這幾個數據加起來, 可以理解爲區塊頭: 區塊序號+Nonce(隨機值)+data(需保護的內容區)
即使正式應用中會有更多的數據, 比如要加上密鑰和時間戳, 但基本原理是相通的
然後把這些內容進行SHA256運算加密, 得到一串64位的哈希值, 如果內容被篡改,那麼這串哈希值必然會變化
明白了哈希值如何產生, 接下來看下一步: 挖礦
必要的步驟:也來挖個礦
仔細且耐心觀察下圖, 在點擊了[Mine]按鈕後,經過較長時間的運算,得到了4個0開頭的哈希值
這是個相對罕見的散列(哈希)值, 我們可以認定它就是這個區塊的指紋, 如果這時你嘗試去修改data區內容, 會發現hash值發生變化, 並且不再是4個0開頭, 證明這個區塊被篡改過了
像下圖, 如果內容被修改, 哈希變成了不是4個0開頭, 並且背景變成了紅色, 你就可以知道這個塊的內容不再是有效的或簽過名的, 它已經被篡改過,不安全的了.
這時重新Mine一下, 等待一段時間後,重新得到4個0開頭的哈希值;
要注意的是Nonce變化了! 這是Nonce在這裏出現的原因!!
不同的內容, 需要匹配不同的Nonce才能得到4個0開頭的哈希值, Mine的過程其實就是算法在尋找合適的隨機數搭配內容以使得再次得到4個0開頭的哈希值,
在尋找Nonce的過程, 就叫挖礦!
現在明白爲什麼要挖礦了, 接下來把上面的知識串起來, 形成鏈
生成區塊,鏈接成最簡單的區塊鏈
對每個區塊頭進行SHA256加密哈希,可生成一個哈希值。通過這個哈希值,可以識別出區塊鏈中的對應區塊。同時,每一個區塊都可以通過其區塊頭的“父區塊哈希值”字段引用前一區塊(父區塊)。也就是說,每個區塊頭都包含它的父區塊哈希值。這樣把每個區塊鏈接到各自父區塊的哈希值序列就創建了一條一直可以追溯到第一個區塊(創世區塊)的鏈條。
看下圖是個由4個塊組成的鏈, 每個塊都有負責記住上個塊的prevhash, 以及自己的hash, 一個串一個, 就形成了鏈
在這個鏈條上, 如果中間的塊被惡意修改了數據,會發生什麼?
在下圖的演示中可以看到, 如果第2個區塊被惡意修改數據的話, 從第2個塊起就會因哈希值(指紋)變化導致它和後面的哈希值全部出問題, 安全校驗會檢測出有區塊出問題!
擴展閱讀
接下來怎麼解決這個問題呢?
就會涉及到分佈式存儲的問題, 要把這個鏈條(數據)存放到各個終端去-----去中心化!
並加入投票機制, 當有鏈條的數據出問題時, 用多數正確的鏈接替換掉出問題的鏈條, 以保存數據的正確性
這也是我們常說的除非你能黑掉51%的數據(鏈條), 才能真正篡改掉數據的真正原因所在!
上文只是簡單講了一下區塊鏈的一些基本運作原理, 真想掌握的還要深入學習
但對於只想知道區塊鏈是怎麼回事的朋友, 應該足夠了