區(qū)塊鏈中時(shí)間戳你知道是怎么一回事嗎
傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)在設(shè)計(jì)表時(shí)一般會(huì)有一個(gè)或多個(gè)時(shí)間戳(timestamp)字段,用來(lái)標(biāo)記一行記錄添加或修改時(shí)的時(shí)間。
基本上,這些時(shí)間戳是給應(yīng)用內(nèi)部使用的。當(dāng)數(shù)據(jù)被共享給其他應(yīng)用時(shí),這些時(shí)間戳并沒(méi)有多大意義,因?yàn)闀r(shí)間戳可以偽造。
在數(shù)據(jù)黑市上,一個(gè)數(shù)據(jù)掮客可以將一份銀行VIP客戶數(shù)據(jù)進(jìn)行注水,摻入一半的假數(shù)據(jù)。
一家保險(xiǎn)公司為了攪亂市場(chǎng)上競(jìng)爭(zhēng)對(duì)手的視線,故意污染數(shù)據(jù),將高凈值用戶放入騙保用戶黑名單,將騙保用戶放入高凈值用戶名單,然后讓污染后的數(shù)據(jù)故意泄露出去。
如果每條數(shù)據(jù)都帶有一個(gè)真實(shí)可信的時(shí)間戳(這條數(shù)據(jù)產(chǎn)生的真實(shí)時(shí)間點(diǎn)),這樣的造假行為就比較難奏效,因?yàn)榧贁?shù)據(jù)的時(shí)間戳一般都是最近的。
以前我們很少關(guān)心數(shù)據(jù)的時(shí)間戳,很少去了解時(shí)間戳對(duì)數(shù)據(jù)的意義,一個(gè)原因也許是我們不知道如何用技術(shù)去實(shí)現(xiàn)這樣的時(shí)間戳。
如果技術(shù)實(shí)現(xiàn)完全可行,那么這個(gè)時(shí)間戳對(duì)我們來(lái)說(shuō)就有了全新的意義。
首先,我們有了真正可以信任的歷史數(shù)據(jù)。
第二,這些數(shù)據(jù)因?yàn)榭尚抛兊酶袃r(jià)值,可以在應(yīng)用之外被其他應(yīng)用或者分析工具使用。
第三,我們可以基于這些可信的歷史記錄生成信用。
最后,我們真正進(jìn)入一個(gè)信用社會(huì)。
想象一下,如果我們想在未來(lái)某天證明自己的數(shù)據(jù)是在今天產(chǎn)生的,可以在今天對(duì)今天的所有數(shù)據(jù)進(jìn)行某種形式的哈希(比如默克爾樹(shù)),最終得到一個(gè)哈希值,然后在第二天的《參考消息》上登一個(gè)廣告,把哈希值發(fā)布出去。明天的《參考消息》就成了我們的時(shí)間戳。
如果明天我們想做同樣的事,可以如法炮制,另外有一個(gè)關(guān)鍵點(diǎn),那就是要記得把今天的哈希值也給哈希進(jìn)去。這樣每天的哈希值就包含了以前所有數(shù)據(jù)的哈希信息。
區(qū)塊鏈在P2P網(wǎng)絡(luò)上通過(guò)節(jié)點(diǎn)間的共識(shí)算法實(shí)現(xiàn)了一個(gè)分布式的時(shí)間戳服務(wù)。
區(qū)塊鏈?zhǔn)窃跁r(shí)間上有序的、由記錄塊(區(qū)塊)組成的一根鏈條。一個(gè)區(qū)塊包含兩個(gè)部分:區(qū)塊頭(Block Header)和記錄部分。區(qū)塊中的所有記錄通過(guò)默克爾樹(shù)(Merkle Tree)組織起來(lái),默克爾樹(shù)根(Root)的哈希值做為本區(qū)塊里所有記錄的數(shù)字指紋被放入?yún)^(qū)塊頭。
區(qū)塊頭還包含以下字段:前一個(gè)區(qū)塊頭的哈希值(這是前一個(gè)區(qū)塊的數(shù)字指紋,也可以看做是指向前一個(gè)區(qū)塊的哈希指針),本區(qū)塊的時(shí)間戳、高度(Hight,即從第一個(gè)區(qū)塊開(kāi)始數(shù)本區(qū)塊是第幾個(gè)塊),以及一些其他信息。系統(tǒng)的共識(shí)算法保證了每過(guò)固定的一段時(shí)間(Bitcoin是大約10分鐘),參與整個(gè)系統(tǒng)記賬的節(jié)點(diǎn)會(huì)達(dá)成共識(shí)在區(qū)塊鏈上添加下一個(gè)新的區(qū)塊。
時(shí)間戳的這種設(shè)計(jì),使得更改一條記錄的困難程度按時(shí)間的指數(shù)倍增加,越老的記錄越難更改。這是因?yàn)?,如果改?dòng)某個(gè)區(qū)塊里的一條記錄,意味著該區(qū)塊原來(lái)的默克爾樹(shù)根失效了,需要改動(dòng)區(qū)塊頭,該區(qū)塊的數(shù)字指紋隨之失效。又由于下一個(gè)區(qū)塊的區(qū)塊頭包含這個(gè)哈希指針,這就意味著下一個(gè)區(qū)塊也需要改動(dòng)。如此直到最新的那個(gè)區(qū)塊。
可見(jiàn)要想改動(dòng)一個(gè)區(qū)塊,必須同時(shí)改動(dòng)該區(qū)塊后面的所有區(qū)塊。因?yàn)閷⒁粋€(gè)區(qū)塊放入?yún)^(qū)塊鏈中需要消耗非常多的資源(資源種類依共識(shí)算法的不同而不同,可以是計(jì)算力,流逝的時(shí)間,擁有的權(quán)益等),隨著后面添加的區(qū)塊越來(lái)越多,要想改動(dòng)某個(gè)區(qū)塊幾乎是不可能的。
對(duì)一個(gè)普通應(yīng)用來(lái)說(shuō),如何實(shí)現(xiàn)這樣一個(gè)時(shí)間戳服務(wù)呢?我們需要自己創(chuàng)建一個(gè)區(qū)塊鏈嗎?其實(shí)沒(méi)必要,Bitcoin就是一個(gè)很好的時(shí)間戳服務(wù),我們可以把哈希值寫到Bitcoin的區(qū)塊鏈中。這是一種存在證明(Proof of Existence)。Factom也提供類似的服務(wù),它收集所有的哈希,每隔10分鐘生成一個(gè)哈希值,寫到Bitcoin的區(qū)塊鏈中。
哪些數(shù)據(jù)需要有時(shí)間戳?必須是不能變更的數(shù)據(jù),特別適合存檔文件。需要現(xiàn)在就考慮實(shí)施時(shí)間戳嗎?這個(gè)跟你的數(shù)據(jù)戰(zhàn)略相關(guān)。在大數(shù)據(jù)時(shí)代,擁有高質(zhì)量的數(shù)據(jù)就是擁有了價(jià)值。時(shí)間戳可以一定程度上保證數(shù)據(jù)的可信度,至少這些數(shù)據(jù)是經(jīng)過(guò)“時(shí)間考驗(yàn)”的。
來(lái)源:挖鏈網(wǎng)