時(shí)間:2023-07-22|瀏覽:306
區(qū)塊鏈是一個(gè)使用哈希指針而不是指針構(gòu)建的鏈表。
區(qū)塊鏈的一個(gè)用例是構(gòu)建一個(gè)防篡改的日志。我們可以存儲(chǔ)一堆數(shù)據(jù)的日志數(shù)據(jù)結(jié)構(gòu),并允許將數(shù)據(jù)附加到日志的末尾。如果有人改變了日志中較早的數(shù)據(jù),我們將會(huì)檢測(cè)到。
要了解為什么區(qū)塊鏈可以實(shí)現(xiàn)這個(gè)防篡改的屬性,讓我們來(lái)看一看,如果對(duì)手想篡改鏈中間的數(shù)據(jù)會(huì)發(fā)生什么。對(duì)手的目標(biāo)是只記住區(qū)塊鏈頭部的哈希指針的人將無(wú)法檢測(cè)到篡改。對(duì)手改變了一些區(qū)塊k的數(shù)據(jù),由于數(shù)據(jù)已經(jīng)被改變,區(qū)塊k+1中的哈希值是整個(gè)區(qū)塊k的哈希值,因此不會(huì)匹配。由于哈希函數(shù)具有抗碰撞性,新哈希將不會(huì)與更改后的內(nèi)容相匹配。因此,我們將檢測(cè)區(qū)塊k中的新數(shù)據(jù)與區(qū)塊k+1中的哈希指針之間的不一致。對(duì)手可以繼續(xù)嘗試通過(guò)改變下一個(gè)區(qū)塊的哈希來(lái)掩蓋這個(gè)變化,但是當(dāng)對(duì)手到達(dá)列表的頭部時(shí),這個(gè)策略就會(huì)失敗。只要我們將哈希指針列表的頭部存儲(chǔ)在對(duì)手不能改變的地方,對(duì)手將不能在不被檢測(cè)的情況下改變?nèi)魏螀^(qū)塊。
這樣做的結(jié)果是,如果對(duì)手想要在整個(gè)鏈中的任何地方篡改數(shù)據(jù),為了保持故事的一致性,他將不得不篡改哈希指針直到它開始的地方。而且他最終會(huì)遇到障礙,因?yàn)樗麩o(wú)法篡改列表的頭部。因此,通過(guò)記住這個(gè)單獨(dú)的哈希指針,我們基本上記住了一個(gè)防篡改哈希的整個(gè)列表。因此,我們可以構(gòu)建一個(gè)包含我們想要的區(qū)塊的區(qū)塊鏈,并追溯到列表的開始的一些特殊的區(qū)塊,我們稱之為起源區(qū)塊。