什么是哈希值該如何在區(qū)塊鏈中應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1. 哈希值是什么?
哈希值是將任意長(zhǎng)度的輸入字符串轉(zhuǎn)換為密碼并進(jìn)行固定輸出的過程。哈希值不是一個(gè)“密碼”,我們不能通過解密哈希來(lái)檢索原始數(shù)據(jù),它是一個(gè)單向的加密函數(shù)。
你知道嗎,我們可以在哈希算法的幫助下,以固定的字符串長(zhǎng)度保存互聯(lián)網(wǎng)上的所有數(shù)據(jù)。我們使用一個(gè)數(shù)學(xué)算法稱為SHA-256(安全哈希算法-256位)。SHA 256是SHA-1的繼承者,SHA-1有160位。
2. 如何在區(qū)塊鏈中使用哈希值?
在區(qū)塊鏈中,每個(gè)塊都有前一個(gè)塊的哈希值,前一個(gè)塊被稱為當(dāng)前塊的父塊,如果考慮父塊有一個(gè)當(dāng)前區(qū)塊。它將會(huì)有上一個(gè)塊的哈希值即父塊。
在區(qū)塊鏈中,每個(gè)塊都有前一個(gè)塊的哈希值。當(dāng)我們更改當(dāng)前塊中的任何數(shù)據(jù)時(shí),塊的哈希值將被更改,這將影響前一個(gè)塊,因?yàn)樗星耙粋€(gè)塊的地址。例如,如果我們只有兩個(gè)塊,一個(gè)是當(dāng)前塊,一個(gè)是父塊。當(dāng)前塊將擁有父塊的地址。如果需要更改當(dāng)前塊中的數(shù)據(jù),還需要更改父塊。當(dāng)只有兩個(gè)數(shù)據(jù)塊時(shí),很容易更改數(shù)據(jù),但是現(xiàn)在,當(dāng)我們?cè)趨^(qū)塊鏈中實(shí)現(xiàn)時(shí),2020-01-24 12:32已經(jīng)挖掘了614272個(gè)塊,而614272(th)塊的哈希值為00000000000000000007 a6be31011560f1e3abe8f125e356a31db6051753334e。如果我們要更改當(dāng)前塊614272(th)中的數(shù)據(jù),614271塊的哈希地址必須更改,但是614271塊的哈希是不可能更改的,所以這就是區(qū)塊鏈被稱為不可變的,數(shù)據(jù)可信的。區(qū)塊鏈的第一個(gè)塊,稱為起源塊。你可以從這個(gè)起源塊中看到有多少塊被開采到現(xiàn)在。
我已經(jīng)創(chuàng)建了這個(gè)過程的可視化。
如果我們對(duì)輸入的任何部分做一個(gè)小的改變,輸出就會(huì)有一個(gè)大的改變,請(qǐng)看下面的例子以獲得更多的理解。
哈希值是區(qū)塊鏈技術(shù)不可變的和確定的潛力核心基礎(chǔ)和最重要的方面。它保留了記錄和查看的數(shù)據(jù)的真實(shí)性,以及區(qū)塊鏈作為一個(gè)整體的完整性。這是一個(gè)更技術(shù)性的方面,然而,理解區(qū)塊鏈如何工作以及它所具有的不可估量的潛力和價(jià)值是更堅(jiān)實(shí)的一步。
3. Merkle樹是如何工作的?
當(dāng)存在大量的數(shù)據(jù)時(shí),將很難驗(yàn)證它,并需要大量的內(nèi)存來(lái)存儲(chǔ)和保護(hù)它,但在Merkle樹的幫助下,我們可以輕松克服所有這些問題。
Merkle樹是區(qū)塊鏈技術(shù)的基礎(chǔ)部分,我們可以很容易地發(fā)現(xiàn)大量數(shù)據(jù)發(fā)生的任何變化,并且可以有效地對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。比特幣和以太坊也正在正樣做。
正如我們?cè)谏蠄D中看到的,所有的基于都在底部,頂部的單個(gè)哈希值稱為根哈希值或Merkle根。
舉一個(gè)例子,有4個(gè)交易 A, B, C, D。現(xiàn)在A和B哈希值將合并成一個(gè)哈希值,而C和D將合并成另一個(gè)哈希值,AB哈希值和CD哈希值現(xiàn)在合并成一個(gè)單一哈希值,稱為根哈?;騇erkle根ABCD。
根哈希值將包含所有交易的所有信息。Merkle樹會(huì)反復(fù)哈希值,直到只剩下一個(gè)哈希值稱為根哈希對(duì)節(jié)點(diǎn)。Merkle樹是一棵二叉樹,所以需要有偶數(shù)個(gè)葉節(jié)點(diǎn),如果交易數(shù)是奇數(shù),那么最后一個(gè)哈希值將重復(fù)一次,以創(chuàng)建偶數(shù)個(gè)葉節(jié)點(diǎn)。
在上圖中,我們可以看到當(dāng)交易數(shù)為奇數(shù)時(shí)的重復(fù)交易哈希值,這就是merkle樹復(fù)制奇數(shù)葉的方式。
所有交易的數(shù)據(jù)被總結(jié)成單一的根哈希值,并存儲(chǔ)在塊頭,因?yàn)槲覀儸F(xiàn)在的數(shù)據(jù)在不斷變化,我們將改變整個(gè)哈希函數(shù),如果哈希值改變,那么Merkle根也會(huì)改變。Merkle樹幫助我們維護(hù)數(shù)據(jù)的完整性。
Merkle樹的另一個(gè)優(yōu)點(diǎn)是,如果你想知道一個(gè)特定交易的狀態(tài),我們不需要下載整個(gè)區(qū)塊鏈,我們只需要要求垂直證明,證明樹的某個(gè)分支,并驗(yàn)證一個(gè)特定的交易分支即可。
4. 如何使用哈希值來(lái)保護(hù)數(shù)據(jù)?
哈希值大大提高了數(shù)據(jù)的安全性。正如我已經(jīng)提到的,它是一個(gè)單向的加密函數(shù)。一個(gè)加密哈希函數(shù)需要具備以下幾個(gè)關(guān)鍵的特性才能被認(rèn)為是有用的:
1. 每個(gè)哈希值都是不同的。
2. 對(duì)于相同的消息,總是生成相同的哈希值。
3.不可能根據(jù)哈希值來(lái)決定輸入。
4. 即使對(duì)輸入的整個(gè)哈希值做一個(gè)小的更改也會(huì)被更改。
哈希值幫助我們查看數(shù)據(jù)是否被篡改。
例如,您下載了一段重要的信息,要查看數(shù)據(jù)是否改變,可以通過哈希值算法運(yùn)行數(shù)據(jù),比較數(shù)據(jù)的哈希值和接收數(shù)據(jù)的哈希值。
如果兩個(gè)哈希值都是相同的,則不更改數(shù)據(jù),如果哈希值不匹配,則在接收數(shù)據(jù)之前更改數(shù)據(jù)。