国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

區(qū)塊鏈中的:哈希算法

這篇具有很好參考價(jià)值的文章主要介紹了區(qū)塊鏈中的:哈希算法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么是哈希算法。

哈希算法,又稱散列算法,它是一個單向函數(shù),可以把任意長度的輸入數(shù)據(jù)轉(zhuǎn)化為固定長度的輸出:

h\=H(x)h=H(x)h\=H(x)

例如,對?morning?和?bitcoin?兩個輸入進(jìn)行某種哈希運(yùn)算,得到的結(jié)果是固定長度的數(shù)字:

H("morning") = c7c3169c21f1d92e9577871831d067c8
H("bitcoin") = cd5b1e4947e304476c788cd474fb579a

我們通常用十六進(jìn)制表示哈希輸出。

因?yàn)楣K惴ㄊ且粋€單向函數(shù),要設(shè)計(jì)一個安全的哈希算法,就必須滿足:通過輸入可以很容易地計(jì)算輸出,但是,反過來,通過輸出無法反推輸入,只能暴力窮舉。

H("???????") = c7c3169c21f1d92e9577871831d067c8
H("???????") = cd5b1e4947e304476c788cd474fb579a

想要根據(jù)上述結(jié)果反推輸入,只能由計(jì)算機(jī)暴力窮舉。

哈希碰撞

一個安全的哈希算法還需要滿足另一個條件:碰撞率低。

碰撞是指,如果兩個輸入數(shù)據(jù)不同,卻恰好計(jì)算出了相同的哈希值,那么我們說發(fā)生了碰撞:

H("data-123456") = a76b1fb579a02a476c789d9115d4b201
H("data-ABCDEF") = a76b1fb579a02a476c789d9115d4b201

因?yàn)檩斎霐?shù)據(jù)長度是不固定的,所以輸入數(shù)據(jù)是一個無限大的集合,而輸出數(shù)據(jù)長度是固定的,所以,輸出數(shù)據(jù)是一個有限的集合。把一個無限的集合中的每個元素映射到一個有限的集合,就必然存在某些不同的輸入得到了相同的輸出。

哈希碰撞的本質(zhì)是把無限的集合映射到有限的集合時必然會產(chǎn)生碰撞。我們需要計(jì)算的是碰撞的概率。很顯然,碰撞的概率和輸出的集合大小相關(guān)。輸出位數(shù)越多,輸出集合就越大,碰撞率就越低。

安全哈希算法還需要滿足一個條件,就是輸出無規(guī)律。輸入數(shù)據(jù)任意一個bit(某個字節(jié)的某一個二進(jìn)制位)的改動,會導(dǎo)致輸出完全不同,從而讓攻擊者無法逐步猜測輸入,只能依賴暴力窮舉來破解:

H("hello-1") = 970db54ab8a93b7173cb48f55e67fd2c
H("hello-2") = 8284353b768977f05ac600baad8d3d17

哈希算法有什么作用?

假設(shè)我們相信一個安全的哈希算法,那么我們認(rèn)為,如果兩個輸入的哈希相同,我們認(rèn)為兩個輸入是相同的。

如果輸入的內(nèi)容就是文件內(nèi)容,而兩個文件的哈希相同,說明文件沒有被修改過。當(dāng)我們從網(wǎng)站上下載一個非常大的文件時,我們?nèi)绾未_定下載到本地的文件和官方網(wǎng)站發(fā)布的原始文件是完全相同,沒有經(jīng)過修改的呢?哈希算法就體現(xiàn)出了作用:我們只需要計(jì)算下載到本地的文件哈希,再和官方網(wǎng)站給出的哈希對比,如果一致,說明下載文件是正確的,沒有經(jīng)過篡改,如果不一致,則說明下載的文件肯定被篡改過。

大多數(shù)軟件的官方下載頁面會同時給出該文件的哈希值,以便讓用戶下載后驗(yàn)證文件是否被篡改:

區(qū)塊鏈中的:哈希算法

和文件類似,如果兩份數(shù)據(jù)的哈希相同,則可以100%肯定,兩份數(shù)據(jù)是相同的。比特幣使用哈希算法來保證所有交易不可修改,就是計(jì)算并記錄交易的哈希,如果交易被篡改,那么哈希驗(yàn)證將無法通過,說明這個區(qū)塊是無效的。

區(qū)塊鏈中的:哈希算法

常用哈希算法

常用的哈希算法以及它們的輸出長度如下:

哈希算法 輸出長度(bit) 輸出長度(字節(jié))
MD5 128 bit 16 bytes
RipeMD160 160 bits 20 bytes
SHA-1 160 bits 20 bytes
SHA-256 256 bits 32 bytes
SHA-512 512 bits 64 bytes

比特幣使用的哈希算法有兩種:SHA-256? 和? ?RipeMD160

SHA-256的理論碰撞概率是:嘗試2的130次方的隨機(jī)輸入,有99.8%的概率碰撞。注意2130是一個非常大的數(shù)字,大約是1361萬億億億億。以現(xiàn)有的計(jì)算機(jī)的計(jì)算能力,是不可能在短期內(nèi)破解的。

比特幣使用兩種哈希算法,一種是對數(shù)據(jù)進(jìn)行兩次SHA-256計(jì)算,這種算法在比特幣協(xié)議中通常被稱為hash256或者dhash。

另一種算法是先計(jì)算SHA-256,再計(jì)算RipeMD160,這種算法在比特幣協(xié)議中通常被稱為hash160。

const
    bitcoin = require('bitcoinjs-lib'),
    createHash = require('create-hash');

Run

運(yùn)行上述代碼,觀察對一個字符串進(jìn)行SHA-256、RipeMD160、hash256和hash160的結(jié)果。

區(qū)塊鏈不可篡改特性

  • 有了哈希算法的預(yù)備知識,我們來看比特幣的區(qū)塊鏈如何使用哈希算法來防止交易記錄被篡改。
  • 區(qū)塊本身記錄的主要數(shù)據(jù)就是一系列交易,所以,區(qū)塊鏈?zhǔn)紫纫WC任何交易數(shù)據(jù)都不可修改。

Merkle Hash

在區(qū)塊的頭部,有一個Merkle Hash字段,它記錄了本區(qū)塊所有交易的Merkle Hash:

區(qū)塊鏈中的:哈希算法

Merkle Hash是把一系列數(shù)據(jù)的哈希根據(jù)一個簡單算法變成一個匯總的哈希。

假設(shè)一個區(qū)塊有4個交易,我們對每個交易數(shù)據(jù)做dhash,得到4個哈希值a1,a2a3a4

a1 = dhash(tx1)
a2 = dhash(tx2)
a3 = dhash(tx3)
a4 = dhash(tx4)

注意到哈希值也可以看做數(shù)據(jù),所以可以把a1a2拼起來,a3a4拼起來,再計(jì)算出兩個哈希值b1b2

       ┌───────────────┐               ┌───────────────┐
       │b1=dhash(a1+a2)│               │b2=dhash(a3+a4)│
       └───────────────┘               └───────────────┘
               ▲                               ▲
       ┌───────┴───────┐               ┌───────┴───────┐
       │               │               │               │
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│a1=dhash(tx1)│ │a2=dhash(tx2)│ │a3=dhash(tx3)│ │a4=dhash(tx4)│
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

最后,把b1b2這兩個哈希值拼起來,計(jì)算出最終的哈希值,這個哈希就是Merkle Hash:

                     ┌───────────────────┐
                     │merkle=dhash(b1+b2)│
                     └───────────────────┘
                               ▲
               ┌───────────────┴───────────────┐
               │                               │
       ┌───────────────┐               ┌───────────────┐
       │b1=dhash(a1+a2)│               │b2=dhash(a3+a4)│
       └───────────────┘               └───────────────┘
               ▲                               ▲
       ┌───────┴───────┐               ┌───────┴───────┐
       │               │               │               │
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│a1=dhash(tx1)│ │a2=dhash(tx2)│ │a3=dhash(tx3)│ │a4=dhash(tx4)│
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

如果交易的數(shù)量不恰好是4個怎么辦?

????????例如,只有3個交易時,第一個和第二個交易的哈希a1a2可以拼起來算出b1,第三個交易只能算出一個哈希a3,這個時候,就把a(bǔ)3直接復(fù)制一份,算出b2這樣,我們也能最終計(jì)算出Merkle Hash:

                     ┌───────────────────┐
                     │merkle=dhash(b1+b2)│
                     └───────────────────┘
                               ▲
               ┌───────────────┴───────────────┐
               │                               │
       ┌───────────────┐               ┌───────────────┐
       │b1=dhash(a1+a2)│               │b2=dhash(a3+a3)│
       └───────────────┘               └───────────────┘
               ▲                               ▲
       ┌───────┴───────┐               ┌───────┴───────┐
       │               │               │               │
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌ ─ ─ ─ ─ ─ ─ ┐
│a1=dhash(tx1)│ │a2=dhash(tx2)│ │a3=dhash(tx3)│
└─────────────┘ └─────────────┘ └─────────────┘ └ ─ ─ ─ ─ ─ ─ ┘

????????如果有5個交易,我們可以看到,a5被復(fù)制了一份,以便計(jì)算出b3,隨后b3也被復(fù)制了一份,以便計(jì)算出c2。總之,在每一層計(jì)算中,如果有單數(shù),就把最后一份數(shù)據(jù)復(fù)制,最后一定能計(jì)算出Merkle Hash:

                  ┌─────────┐
                  │ merkle  │
                  └─────────┘
                       ▲
           ┌───────────┴───────────┐
           │                       │
         ┌───┐                   ┌───┐
         │c1 │                   │c2 │
         └───┘                   └───┘
           ▲                       ▲
     ┌─────┴─────┐           ┌─────┴─────┐
     │           │           │           │
   ┌───┐       ┌───┐       ┌───┐       ┌ ─ ┐
   │b1 │       │b2 │       │b3 │        b3
   └───┘       └───┘       └───┘       └ ─ ┘
     ▲           ▲           ▲
  ┌──┴──┐     ┌──┴──┐     ┌──┴──┐
  │     │     │     │     │     │
┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌ ─ ┐
│a1 │ │a2 │ │a3 │ │a4 │ │a5 │  a5
└───┘ └───┘ └───┘ └───┘ └───┘ └ ─ ┘

從Merkle Hash的計(jì)算方法可以得出結(jié)論:修改任意一個交易哪怕一個字節(jié),或者交換兩個交易的順序,都會導(dǎo)致Merkle Hash驗(yàn)證失敗,也就會導(dǎo)致這個區(qū)塊本身是無效的,所以,Merkle Hash記錄在區(qū)塊頭部,它的作用就是保證交易記錄永遠(yuǎn)無法修改。

Block Hash

區(qū)塊本身用Block Hash——也就是區(qū)塊哈希來標(biāo)識。但是,一個區(qū)塊自己的區(qū)塊哈希并沒有記錄在區(qū)塊頭部,而是通過計(jì)算區(qū)塊頭部的哈希得到的:

區(qū)塊鏈中的:哈希算法

區(qū)塊頭部的Prev Hash記錄了上一個區(qū)塊的Block Hash,這樣,可以通過Prev Hash追蹤到上一個區(qū)塊。

由于下一個區(qū)塊的Prev Hash又會指向當(dāng)前區(qū)塊,這樣,每個區(qū)塊的Prev Hash都指向自己的上一個區(qū)塊,這些區(qū)塊串起來就形成了區(qū)塊鏈。

區(qū)塊鏈的第一個區(qū)塊(又稱創(chuàng)世區(qū)塊)并沒有上一個區(qū)塊,因此,它的Prev Hash被設(shè)置為00000000...000。

如果一個惡意的攻擊者修改了一個區(qū)塊中的某個交易,那么Merkle Hash驗(yàn)證就不會通過。所以,他只能重新計(jì)算Merkle Hash,然后把區(qū)塊頭的Merkle Hash也修改了。這時,我們就會發(fā)現(xiàn),這個區(qū)塊本身的Block Hash就變了,所以,下一個區(qū)塊指向它的鏈接就斷掉了。

區(qū)塊鏈中的:哈希算法

由于比特幣區(qū)塊的哈希必須滿足一個難度值,因此,攻擊者必須先重新計(jì)算這個區(qū)塊的Block Hash,然后,再把后續(xù)所有區(qū)塊全部重新計(jì)算并且偽造出來,才能夠修改整個區(qū)塊鏈。

在后面的挖礦中,我們會看到,修改一個區(qū)塊的成本就已經(jīng)非常非常高了,要修改后續(xù)所有區(qū)塊,這個攻擊者必須掌握全網(wǎng)51%以上的算力才行,所以,修改區(qū)塊鏈的難度是非常非常大的,并且,由于正常的區(qū)塊鏈在不斷增長,同樣一個區(qū)塊,修改它的難度會隨著時間的推移而不斷增加。

小結(jié)

區(qū)塊鏈依靠安全的哈希算法保證所有區(qū)塊數(shù)據(jù)不可更改;

交易數(shù)據(jù)依靠Merkle Hash確保無法修改,整個區(qū)塊依靠Block Hash確保區(qū)塊無法修改;

工作量證明機(jī)制(挖礦)保證修改區(qū)塊鏈的難度非常巨大從而無法實(shí)現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-459396.html

到了這里,關(guān)于區(qū)塊鏈中的:哈希算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QLearning在區(qū)塊鏈中的應(yīng)用

    非常感謝您的閱讀。我將以專業(yè)的技術(shù)語言撰寫這篇深入的技術(shù)博客文章。 區(qū)塊鏈作為一種分布式賬本技術(shù),憑借其去中心化、不可篡改、透明公開等特性,在金融、供應(yīng)鏈管理、數(shù)字資產(chǎn)交易等領(lǐng)域廣受關(guān)注和應(yīng)用。而強(qiáng)化學(xué)習(xí)算法Q-Learning作為一種有效的智能決策方法,近年

    2024年04月15日
    瀏覽(28)
  • 科普|區(qū)塊鏈中的Merkle Tree

    什么是Merkle Tree? -?Merkle Tree也就是Merkle樹,中文譯名還有梅克爾樹或默克爾樹,因?yàn)檫@是一棵用哈希值搭建起來的樹,樹的所有節(jié)點(diǎn)都存儲了哈希值,所以也叫哈希樹,英文名為Hash Tree。默克爾樹通常情況下看著是一棵倒置的樹型結(jié)構(gòu),根節(jié)點(diǎn)在頂部,分叉向下,葉子節(jié)點(diǎn)

    2024年02月02日
    瀏覽(33)
  • 區(qū)塊鏈中的貨幣與現(xiàn)金系統(tǒng)

    區(qū)塊鏈中的貨幣與現(xiàn)金系統(tǒng)

    摘 ?要 : 區(qū)塊鏈技術(shù)是近年來備受關(guān)注的一項(xiàng)新興技術(shù),它以去中心化、不可篡改和透明等特點(diǎn),為各個領(lǐng)域的應(yīng)用提供了全新的解決方案。區(qū)塊鏈技術(shù)的發(fā)展不僅對傳統(tǒng)金融、物流、能源等行業(yè)帶來了深刻的變革,同時也推動了數(shù)字經(jīng)濟(jì)和數(shù)字社會的快速發(fā)展。在區(qū)塊鏈技

    2024年02月04日
    瀏覽(33)
  • 【區(qū)塊鏈時代】如何用Python實(shí)現(xiàn)區(qū)塊鏈中的區(qū)塊結(jié)構(gòu)(快速入手01)

    區(qū)塊結(jié)構(gòu)的詳細(xì)介紹,容易入手: 【區(qū)塊鏈時代】如何理解區(qū)塊鏈中共識機(jī)制以及在區(qū)塊鏈中分叉是如何解決的 結(jié)果如下: 在下一篇博客中將重點(diǎn)介紹節(jié)點(diǎn)之間通信過程中如何實(shí)現(xiàn)各個功能模塊。

    2024年02月15日
    瀏覽(18)
  • 區(qū)塊鏈中使用的加密算法和數(shù)字簽名算法

    區(qū)塊鏈中使用了多種加密算法和數(shù)字簽名算法來確保數(shù)據(jù)的安全性、隱私性和可信性。以下是一些常見的加密算法和數(shù)字簽名算法,它們在區(qū)塊鏈技術(shù)中的應(yīng)用: 哈希算法(Hash Functions) : 常見的哈希算法包括 SHA-256(Secure Hash Algorithm 256位)和 SHA-3(Keccak)等。 哈希算法用

    2024年02月04日
    瀏覽(29)
  • (11-3-01 )檢測以太坊區(qū)塊鏈中的非法賬戶

    源碼和數(shù)據(jù)集下載在本篇最后 以太坊(Ethereum)是一種基于區(qū)塊鏈技術(shù)的開源平臺和加密貨幣。它于2015年由Vitalik Buterin和Gavin Wood等開發(fā)者創(chuàng)建,并成為比特幣之后最受歡迎的加密貨幣之一。以太坊不僅支持加密貨幣交易,還為開發(fā)者和企業(yè)提供了構(gòu)建去中心化應(yīng)用程序的強(qiáng)

    2024年02月02日
    瀏覽(24)
  • 一文帶你了解區(qū)塊鏈中15種共識算法

    一文帶你了解區(qū)塊鏈中15種共識算法

    區(qū)塊鏈技術(shù)席卷全球,提供了一種去中心化且安全的信息存儲和傳輸方式。它還徹底改變了交易的執(zhí)行方式,隨之而來的是廣泛的共識算法。在這里,共識算法在確保區(qū)塊鏈網(wǎng)絡(luò)的完整性方面發(fā)揮著關(guān)鍵作用。在本文中,我們將探討所有主要類型的區(qū)塊鏈共識算法、它們的含

    2024年02月01日
    瀏覽(28)
  • 淺析區(qū)塊鏈中的數(shù)據(jù)可用性采樣技術(shù)(DAS)

    淺析區(qū)塊鏈中的數(shù)據(jù)可用性采樣技術(shù)(DAS)

    任何一條區(qū)塊鏈中,數(shù)據(jù)可用性都是一個必不可少的關(guān)鍵性內(nèi)容。在當(dāng)今區(qū)塊鏈主流采用的欺詐證明的樂觀系統(tǒng)或有效性證明系統(tǒng)中,都需要“數(shù)據(jù)可用性”進(jìn)行驗(yàn)證,確保系統(tǒng)活躍性。 在早期的區(qū)塊鏈項(xiàng)目中,用戶需要下載整個數(shù)據(jù)塊來確保數(shù)據(jù)可用性。簡答來說,就是用

    2024年02月11日
    瀏覽(25)
  • (11-3-7 )檢測以太坊區(qū)塊鏈中的非法賬戶:模型評估

    (11-3-7 )檢測以太坊區(qū)塊鏈中的非法賬戶:模型評估

    11.3.7 ?模型評估 模型評估(Model Evaluation)是在機(jī)器學(xué)習(xí)和統(tǒng)計(jì)建模中的重要步驟,用于評估構(gòu)建的模型的性能和有效性。它涉及使用不同的指標(biāo)和技巧來量化模型在處理數(shù)據(jù)和進(jìn)行預(yù)測時的表現(xiàn),并幫助確定模型是否足夠好以滿足特定任務(wù)的需求。 ( 1 ) 對模型進(jìn)行全面評

    2024年02月02日
    瀏覽(29)
  • J9數(shù)字論:如何理解區(qū)塊鏈中的公鏈,私鏈,側(cè)鏈,聯(lián)盟鏈

    J9數(shù)字論:如何理解區(qū)塊鏈中的公鏈,私鏈,側(cè)鏈,聯(lián)盟鏈

    區(qū)塊鏈簡而言之,就是一個分散式的記賬本,有著點(diǎn)對點(diǎn)交易查詢,公正,透明,可追溯,不可篡改,去中心化的特點(diǎn)。 區(qū)塊鏈在大類上被分為公共區(qū)塊鏈(公鏈),聯(lián)盟區(qū)塊鏈和私有區(qū)塊鏈,TVL和用戶量最大的公鏈當(dāng)屬以太坊。而除以太坊以外,其他公鏈在自身定位分類或

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包