在之前,我們已經(jīng)講過UTXO是如何解決雙花問題中的第一類問題,可雙花問題還有另一種情況,就是記賬后的雙花問題,即一筆錢雖然只使用了一次,但是如果有人通過黑客攻擊銀行或者采用造假的方式,把這筆錢又復制了一份,再次使用怎么辦呢?區(qū)塊鏈為了解決這個問題,就加入了時間戳的概念。
所謂時間戳,按官方定義,就是能表示其他的數(shù)據(jù)在某個特定時間之前已經(jīng)完整存在、 并且可以驗證的一種數(shù)據(jù),一般是一個字符序列,能唯一地標識某一刻的時間。
這句話種有兩個重點,第一、時間戳也是一種數(shù)據(jù);第二、時間戳可以證明其他的某個數(shù)據(jù),在什么時間點,就已經(jīng)完整存在。所以,簡單來說,時間戳就相當于是數(shù)據(jù)的生產(chǎn)日期,并起到數(shù)據(jù)驗證的作用。
時間戳在區(qū)塊鏈中,與密碼學有著非常緊密的關系,它其實也可以說是密碼學的一個應用。它的工作原理是這樣的:
第一步、節(jié)點會先對區(qū)塊中的信息進行哈希加密,生成一個信息摘要,也就是哈希值。
第二步、生成好之后,節(jié)點會發(fā)送一個時間戳的請求,給相關的時間戳服務器,然后時間戳服務器會從中提取該哈希值以及數(shù)據(jù)的時間信息。
第三步、時間戳服務器會對這些提取到的哈希值以及時間信息進行簽名,也就是再次加密,打上時間烙印,生成時間戳。
最后一步,生成的時間戳數(shù)據(jù)和交易信息綁定之后,再返回系統(tǒng)。
整個過程在區(qū)塊鏈中就是,我們先把數(shù)據(jù)進行加密處理,處理后放到另一個地方進行公證,以二次加密作為證明,之后再把證明后的東西放到下一個區(qū)塊中,進行打包,然后不停地重復這樣一個過程,最后就形成了一個去中心化,并且經(jīng)歷過哈希算法與時間戳兩次加密的分布式系統(tǒng)。
這樣的好處在于,提高了區(qū)塊鏈的不可篡改性,因為每一筆數(shù)據(jù)都在時間戳中進行了二次加密,有相關的時間記錄。并且區(qū)塊連接時,在哈希算法的基礎上,進行了時間的排序。如果有人想要篡改數(shù)據(jù),不僅要攻破哈希算法,還要更改時間戳。
時間戳之所以能解決雙花中的第二類問題,原因在于,它起到了一個防偽的作用。一方面時間戳提高了區(qū)塊鏈的安全性,黑客很難去篡改,另一方面,系統(tǒng)會給每一個區(qū)塊的交易信息都自動打上了時間烙印作為標識,你在什么時間,花了多少錢,都有記錄。沒有這個標識的,一看就是“假錢”。
總的來說,時間戳在區(qū)塊鏈中起到了非常重要的作用,它讓每個區(qū)塊按照時間順序層層嵌套,進一步加強了區(qū)塊鏈的安全系數(shù),也正是因為它的存在,才使區(qū)塊鏈中的“假錢”問題,不再是一個問題。