本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)存證方法及裝置、數(shù)據(jù)校驗(yàn)方法及裝置。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,信息技術(shù)極大地方便了人們的工作和生活,在信息技術(shù)領(lǐng)域中,信息是以數(shù)據(jù)為載體進(jìn)行存儲(chǔ)和傳播的。
數(shù)據(jù)作為信息的載體,往往會(huì)有一定的價(jià)值,尤其在大數(shù)據(jù)時(shí)代,各單位自身在運(yùn)營、服務(wù)過程中往往會(huì)積累大量的數(shù)據(jù),這些數(shù)據(jù)對(duì)某些業(yè)務(wù)的開展會(huì)有一定的利用價(jià)值。比如,對(duì)于智慧社區(qū)的運(yùn)營方,其掌握了社區(qū)大量的社區(qū)數(shù)據(jù),社區(qū)數(shù)據(jù)中除了會(huì)包含社區(qū)基本資料以及社區(qū)的物業(yè)信息外,還可能會(huì)包含居民的消費(fèi)信息、生活偏好信息等信息,這些信息可以指導(dǎo)商家和政府為社區(qū)居民提供更好的商品和服務(wù)。
隨著城鎮(zhèn)化的深入,城市中人們的很多活動(dòng)都是在社區(qū)中進(jìn)行的,社區(qū)中的生活包括吃、穿、住、行、交友、教育、健康、活動(dòng)等各個(gè)方面。社區(qū)生活中產(chǎn)生的社區(qū)大數(shù)據(jù)能夠幫助人們更便利、更高效的生活,同時(shí)也能幫助商家和政府企事業(yè)單位等更好的了解人們的需求,更有針對(duì)性的提供高品質(zhì)服務(wù)。
在社區(qū)大數(shù)據(jù)中,社區(qū)的主要服務(wù)者和管理者掌握著大量的各類結(jié)構(gòu)化的、精準(zhǔn)的基礎(chǔ)數(shù)據(jù),這其中包括社區(qū)基本資料、地理位置信息、房屋設(shè)備資料、居民基本信息、物業(yè)等各類費(fèi)用往來信息、社區(qū)車輛信息、社區(qū)流動(dòng)人口信息、社區(qū)大型活動(dòng)、社區(qū)報(bào)修咨詢投訴等信息,這些信息通過物業(yè)信息化的建設(shè),都能進(jìn)行有效的收集和管理,通過當(dāng)今的大數(shù)據(jù)分析技術(shù),可以帶來較大的價(jià)值。除了物業(yè)數(shù)據(jù)外,基于移動(dòng)互聯(lián)網(wǎng)技術(shù)的社區(qū)線上到線下服務(wù)(Online To Offline,O2O)和基于物聯(lián)網(wǎng)的智慧社區(qū)也能產(chǎn)生大量的社區(qū)數(shù)據(jù),這其中包括人們的社區(qū)社交數(shù)據(jù)、社區(qū)資訊瀏覽習(xí)慣、社區(qū)消費(fèi)信息、社區(qū)上門服務(wù)類信息、智能家居偏好信息、智能門禁使用信息、智能小區(qū)設(shè)備使用信息等信息。同時(shí)結(jié)合政府機(jī)構(gòu)的公共數(shù)據(jù),第三方合作方的相關(guān)數(shù)據(jù)等,可以充分進(jìn)行社區(qū)綜合數(shù)據(jù)分析,形成社區(qū)標(biāo)簽屬性、社區(qū)人群標(biāo)簽屬性、消費(fèi)偏好、社交偏好、科技偏好、生活偏好等,從而指導(dǎo)商家和政府為人們提供更好的商品和服務(wù)。
尤其是在后房產(chǎn)時(shí)代,大家紛紛開始深挖住宅社區(qū)的市場價(jià)值。伴隨著互聯(lián)網(wǎng)思維和傳統(tǒng)社區(qū)物業(yè)的融合,智慧社區(qū)的概念脫穎而出。用戶可以通過手機(jī)應(yīng)用(Application,APP)享受更便捷的物業(yè)服務(wù)、社區(qū)電商服務(wù)、垂直上門服務(wù),這個(gè)過程中,每天都能產(chǎn)生各種各樣的數(shù)據(jù)。在智慧社區(qū)這個(gè)小型的社會(huì)里,作為智慧社區(qū)的載體,社區(qū)O2O系統(tǒng)可以持續(xù)收集到商家和用戶的相關(guān)數(shù)據(jù)。為了能夠持續(xù)挖掘大數(shù)據(jù)的價(jià)值,甚至為未來與第三方可能的合作做好數(shù)據(jù)的儲(chǔ)備,安全公正的保存好這些數(shù)據(jù)就變得尤為重要了。
如果無法驗(yàn)證保存的數(shù)據(jù)是否被篡改了,那么數(shù)據(jù)的公信力會(huì)大打折扣,這會(huì)給數(shù)據(jù)使用者造成很多麻煩,比如,如果保存的數(shù)據(jù)被篡改了,再被決策者利用,這可能會(huì)導(dǎo)致決策者做出錯(cuò)誤的決策,不僅不會(huì)促進(jìn)業(yè)務(wù)的發(fā)展,反而會(huì)帶來反作用,白白浪費(fèi)人力物力等資源。因此,確保數(shù)據(jù)的真實(shí)性變得尤為重要,如果不能證明數(shù)據(jù)未被隨意篡改過,數(shù)據(jù)的公信力和價(jià)值就大打折扣。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)存證方法,用以解決現(xiàn)有技術(shù)中無法確保數(shù)據(jù)的真實(shí)性的問題。
本申請(qǐng)實(shí)施例采用下述技術(shù)方案:
一種數(shù)據(jù)存證方法,包括:
確定目標(biāo)文件的哈希值;
利用所述目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值;
將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息;其中,所述存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。
本申請(qǐng)實(shí)施例還提供一種數(shù)據(jù)校驗(yàn)方法,用以解決現(xiàn)有技術(shù)中無法確保數(shù)據(jù)的真實(shí)性的問題。
本申請(qǐng)實(shí)施例采用下述技術(shù)方案:
一種數(shù)據(jù)校驗(yàn)方法,包括:
確定待驗(yàn)證的目標(biāo)文件,提取所述目標(biāo)文件的存證信息,其中,所述存證信息是通過上述數(shù)據(jù)存證方法得到的;
從所述存證信息中,提取所述目標(biāo)文件對(duì)應(yīng)的歷史哈希樹的根哈希值;
利用所述目標(biāo)文件的哈希值構(gòu)建校驗(yàn)樹,并將所述校驗(yàn)樹的根哈希值作為校驗(yàn)哈希值;
當(dāng)確定所述校驗(yàn)哈希值與所述歷史哈希樹的根哈希值相同時(shí),確定所述目標(biāo)文件為未被篡改過的文件。
本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)存證裝置,用以解決現(xiàn)有技術(shù)中無法確保數(shù)據(jù)的真實(shí)性的問題。
本申請(qǐng)實(shí)施例采用下述技術(shù)方案:
一種數(shù)據(jù)存證裝置,包括:
第一確定單元,確定目標(biāo)文件的哈希值;
第一構(gòu)建單元,利用所述目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值;
存儲(chǔ)單元,將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息;其中,所述存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。
本申請(qǐng)實(shí)施例還提供一種數(shù)據(jù)校驗(yàn)裝置,用以解決現(xiàn)有技術(shù)中無法確保數(shù)據(jù)的真實(shí)性的問題。
本申請(qǐng)實(shí)施例采用下述技術(shù)方案:
一種數(shù)據(jù)校驗(yàn)裝置,包括:
第二確定單元,確定待驗(yàn)證的目標(biāo)文件,提取所述目標(biāo)文件的存證信息
提取單元,從所述存證信息中,提取所述目標(biāo)文件對(duì)應(yīng)的歷史哈希樹的根哈希值;
第二構(gòu)建單元,利用所述目標(biāo)文件的哈希值構(gòu)建校驗(yàn)樹,并將所述校驗(yàn)樹的根哈希值作為校驗(yàn)哈希值;
第三確定單元,當(dāng)確定所述校驗(yàn)哈希值與所述歷史哈希樹的根哈希值相同時(shí),確定所述目標(biāo)文件為未被篡改過的文件。
本申請(qǐng)實(shí)施例采用的上述至少一個(gè)技術(shù)方案能夠達(dá)到以下有益效果:
通過確定目標(biāo)文件的哈希值,然后利用目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值,將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息。這里的存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。這樣,后續(xù)在對(duì)目標(biāo)文件中的至少一個(gè)目標(biāo)文件的完整性進(jìn)行校驗(yàn)時(shí),便可以根據(jù)區(qū)塊鏈中的存儲(chǔ)的根哈希值和存證時(shí)間戳,來校驗(yàn)?zāi)繕?biāo)文件的真實(shí)性。
附圖說明
此處所說明的附圖用來提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1為本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)存證方法的實(shí)現(xiàn)流程示意圖;
圖2為本申請(qǐng)實(shí)施例提供的一種哈希樹的結(jié)構(gòu)示意圖;
圖3為本申請(qǐng)實(shí)施例提供的確定時(shí)序哈希值的哈希樹的結(jié)構(gòu)示意圖;
圖4為本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)校驗(yàn)方法的實(shí)現(xiàn)流程示意圖;
圖5為本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)存證裝置的結(jié)構(gòu)示意圖;
圖6為本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)校驗(yàn)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)具體實(shí)施例及相應(yīng)的附圖對(duì)本申請(qǐng)技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
為了解決現(xiàn)有技術(shù)中無法確保數(shù)據(jù)的真實(shí)性的問題,本申請(qǐng)?zhí)峁┮环N數(shù)據(jù)存證方法,通過定期把目標(biāo)文件的特征值存儲(chǔ)在區(qū)塊鏈上,為這些目標(biāo)文件做存證,以便后續(xù)校驗(yàn)?zāi)繕?biāo)文件的真實(shí)性。
以下結(jié)合附圖,詳細(xì)說明本申請(qǐng)?zhí)峁┑臄?shù)據(jù)存證方法。本申請(qǐng)實(shí)施例提供的數(shù)據(jù)存證方法的執(zhí)行主體可以是服務(wù)器,為便于描述,下文以該方法的執(zhí)行主體為服務(wù)器為例,對(duì)該方法的實(shí)施方式進(jìn)行介紹。可以理解,該方法的執(zhí)行主體為服務(wù)器只是一種示例性的說明,并不應(yīng)理解為對(duì)該方法的限定。
該方法的實(shí)現(xiàn)流程示意圖如圖1所示,包括下述步驟:
步驟11:確定目標(biāo)文件的哈希值;
這里的目標(biāo)文件即為待進(jìn)行存證的文件,目標(biāo)文件具體可以是通過對(duì)數(shù)據(jù)庫指定時(shí)間內(nèi)的數(shù)據(jù)進(jìn)行備份得到的備份文件,也可以是實(shí)時(shí)獲取的包含指定時(shí)間內(nèi)的數(shù)據(jù)的文件。目標(biāo)文件中可以包含生成時(shí)間、存儲(chǔ)地址等信息。
以目標(biāo)文件為數(shù)據(jù)庫的備份文件為例,可以通過定期對(duì)數(shù)據(jù)庫指定時(shí)間內(nèi)的數(shù)據(jù)進(jìn)行備份得到備份文件,具體備份的數(shù)據(jù)可以是指定時(shí)間內(nèi)數(shù)據(jù)庫表中新增加的數(shù)據(jù),也可以是在某個(gè)時(shí)間節(jié)點(diǎn)對(duì)整個(gè)數(shù)據(jù)表進(jìn)行備份。
為了后續(xù)校驗(yàn)?zāi)繕?biāo)文件的真實(shí)性,可以確定目標(biāo)文件的哈希值,具體確定哈希值的方法為相對(duì)成熟的現(xiàn)有技術(shù),此處不再贅述。
例如,以MySQL數(shù)據(jù)庫為例,對(duì)一個(gè)有多張表的數(shù)據(jù)庫,可以利用mysqldump命令每天為每張表各生成一個(gè)備份文件,然后再把各個(gè)備份文件作為哈希函數(shù)的輸入,獲取到各備份文件的哈希值。
步驟12:利用所述目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值;
由于區(qū)塊鏈中保存的數(shù)據(jù)難以篡改的特性,本申請(qǐng)實(shí)施例中,可以將目標(biāo)文件的哈希值存儲(chǔ)到區(qū)塊鏈中,以便后期校驗(yàn)。然而,區(qū)塊鏈在成功存儲(chǔ)一條數(shù)據(jù)時(shí),不僅耗時(shí)較長,而且需要多個(gè)區(qū)塊鏈節(jié)點(diǎn)的共同參與,會(huì)耗費(fèi)較多的資源,那么,當(dāng)目標(biāo)文件的數(shù)量較多時(shí),每次都將每個(gè)目標(biāo)文件的哈希值存儲(chǔ)到區(qū)塊鏈中會(huì)耗費(fèi)大量的資源。
那么,可以利用各目標(biāo)文件的哈希值構(gòu)建哈希樹,將各目標(biāo)文件的哈希值組織在哈希樹的葉子節(jié)點(diǎn)上,然后得到根哈希值,后續(xù)只需將根哈希值存儲(chǔ)到區(qū)塊鏈即可,在校驗(yàn)時(shí)便可以根據(jù)待查詢的文件重構(gòu)哈希樹,校驗(yàn)重構(gòu)的哈希樹的根哈希值和區(qū)塊鏈中的根哈希值是否一致即可。至于哈希樹中各子節(jié)點(diǎn)的哈希值可以不必存儲(chǔ)在區(qū)塊鏈中,而采用較為節(jié)省資源的方式存儲(chǔ),待需要校驗(yàn)的時(shí)候由數(shù)據(jù)收集方提供,這樣較為節(jié)省存儲(chǔ)資源。
該哈希樹的數(shù)據(jù)結(jié)構(gòu)為樹形結(jié)構(gòu),其葉子節(jié)點(diǎn)是可獨(dú)立驗(yàn)證的數(shù)據(jù)的哈希值,非葉子節(jié)點(diǎn)的節(jié)點(diǎn)的哈希值是根據(jù)其子節(jié)點(diǎn)的哈希值得到的,比如可以是對(duì)其子節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行拼接后再取哈希得到的哈希值,或者也可以是對(duì)其子節(jié)點(diǎn)的數(shù)據(jù)通過其它運(yùn)算得到的,本申請(qǐng)對(duì)此不做限定。在構(gòu)建哈希樹時(shí),可以以各目標(biāo)文件的哈希值為哈希樹的葉子節(jié)點(diǎn)構(gòu)建哈希樹。
下面以哈希樹為二叉樹為例介紹本申請(qǐng)實(shí)施例利用哈希值構(gòu)建的哈希樹,通過哈希值構(gòu)建的二叉樹可以是默克爾樹,如圖2所示,為本申請(qǐng)構(gòu)建的默克爾樹的一種示例性結(jié)構(gòu)示意圖,在該例中,對(duì)4份目標(biāo)數(shù)據(jù)進(jìn)行了備份,得到了4個(gè)備份文件,并取這4個(gè)備份文件的哈希值,然后以這4個(gè)哈希值作為葉子節(jié)點(diǎn),構(gòu)建默克爾樹。在默克爾樹中,葉子節(jié)點(diǎn)的哈希值可以通過哈希算法對(duì)各備份文件求哈希值獲得,非葉子節(jié)點(diǎn)的節(jié)點(diǎn)的哈希值可以通過對(duì)其子節(jié)點(diǎn)的哈希值進(jìn)行拼接然后再取哈希值得到,所謂的拼接可以是將兩個(gè)哈希值前后相連,比如原來子節(jié)點(diǎn)的哈希值為00000000000000000000000000000000和11111111111111111111111111111111,這樣將兩個(gè)子節(jié)點(diǎn)的哈希值拼接后的哈希值為0000000000000000000000000000000011111111111111111111111111111111,然后再對(duì)拼接后的哈希值取哈希值即為這兩個(gè)子節(jié)點(diǎn)的父節(jié)點(diǎn)的哈希值。
步驟13:將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息。
其中,所述存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。這樣,后續(xù)在接收到針對(duì)所述目標(biāo)文件中的至少一個(gè)目標(biāo)文件的完整性校驗(yàn)指令后,便可以根據(jù)這些存在信息來校驗(yàn)?zāi)繕?biāo)文件的完整性。
在將哈希值存儲(chǔ)到區(qū)塊鏈中時(shí),可以是將哈希值存儲(chǔ)到區(qū)塊鏈中的某一個(gè)區(qū)塊中,區(qū)塊鏈中的各個(gè)區(qū)塊都對(duì)應(yīng)有一個(gè)標(biāo)識(shí),該標(biāo)識(shí)用來標(biāo)識(shí)區(qū)塊鏈中的各個(gè)區(qū)塊,那么可以記錄該標(biāo)識(shí),以便后續(xù)根據(jù)該標(biāo)識(shí)確定存儲(chǔ)哈希值的區(qū)塊鏈。同時(shí),在將哈希值存儲(chǔ)到區(qū)塊鏈中時(shí),區(qū)塊鏈會(huì)生成存儲(chǔ)該哈希值的時(shí)間戳,那么后續(xù)可以利用該時(shí)間戳來對(duì)目標(biāo)文件進(jìn)行校驗(yàn)。
仍然以目標(biāo)文件為數(shù)據(jù)庫數(shù)據(jù)的備份文件為例,可以在對(duì)數(shù)據(jù)庫指定時(shí)間內(nèi)的數(shù)據(jù)進(jìn)行備份得到備份文件后,確定備份文件對(duì)應(yīng)的根哈希值,然后確定該備份文件對(duì)應(yīng)的根哈希值,最后便可將該根哈希值記錄到區(qū)塊鏈中。
需要說明的是,從對(duì)數(shù)據(jù)進(jìn)行備份,到提取備份文件的哈希值,再到最后將根哈希值保存到區(qū)塊鏈中,往往需要一段時(shí)間才能完成。得到備份文件后,備份文件會(huì)有其生成時(shí)間,同樣存儲(chǔ)根哈希值到區(qū)塊鏈中時(shí),會(huì)得到存證時(shí)間戳。如果備份時(shí)間和存證時(shí)間之間的時(shí)間間隔小于某一閾值,那么可以認(rèn)為數(shù)據(jù)是有效的,后續(xù)可以繼續(xù)通過哈希值來驗(yàn)證數(shù)據(jù)的真實(shí)性。因此,為了便于后續(xù)通過存證時(shí)間戳來校驗(yàn)備份文件,這段時(shí)間往往不能太長,比如,在2014年11月11日對(duì)數(shù)據(jù)庫文件進(jìn)行了備份,然后在2015年11月11日再對(duì)數(shù)據(jù)進(jìn)行存證,那么數(shù)據(jù)的可信度便會(huì)大打折扣。
那么,由于可以對(duì)目標(biāo)數(shù)據(jù)定期備份,那對(duì)于定期備份的備份文件,便可以在備份完成后盡快將備份文件的根哈希值存儲(chǔ)到區(qū)塊鏈中,對(duì)備份文件進(jìn)行存證,以便后期對(duì)備份文件進(jìn)行完整性校驗(yàn)。那么,本步驟11以及后續(xù)步驟12和步驟13可以是在每次得到備份文件后便執(zhí)行的。
數(shù)據(jù)的完整性校驗(yàn),是指校驗(yàn)當(dāng)前的數(shù)據(jù)和原來的數(shù)據(jù)是否保持完全一致的證明手段。在確定備份文件的哈希值時(shí),可以將備份文件作為哈希算法的輸入,即可得到備份文件的哈希值,具體通過哈希算法計(jì)算哈希值的過程此處不再贅述。
區(qū)塊鏈技術(shù)是一種去中心化的分布式數(shù)據(jù)庫技術(shù),區(qū)塊鏈?zhǔn)怯啥鄠€(gè)存儲(chǔ)區(qū)塊相互鏈接而成的,存儲(chǔ)在區(qū)塊鏈上的數(shù)據(jù)具有不可篡改性。通過定期把目標(biāo)文件的特征值存儲(chǔ)在區(qū)塊鏈上,就可以為這些目標(biāo)文件打上時(shí)間戳,即數(shù)據(jù)的存證服務(wù),一旦將哈希樹的根節(jié)點(diǎn)的哈希值寫入?yún)^(qū)塊鏈,就為目標(biāo)文件形成一個(gè)難以篡改的數(shù)據(jù)存證,這樣后續(xù)在接收到針對(duì)目標(biāo)文件中的至少一個(gè)目標(biāo)文件的完整性校驗(yàn)指令后,便可以根據(jù)區(qū)塊鏈中存儲(chǔ)的根哈希值,校驗(yàn)?zāi)繕?biāo)文件的完整性,防止數(shù)據(jù)被篡改后仍被使用而導(dǎo)致的資源浪費(fèi)的問題,提高了數(shù)據(jù)的公信力。
需要說明的是,在利用目標(biāo)文件與第三方合作時(shí),為了保證社區(qū)數(shù)據(jù)的公信力,可以將哈希樹的根哈希值儲(chǔ)存到公共的區(qū)塊鏈中,公共的區(qū)塊鏈比如可以是比特幣的區(qū)塊鏈,這樣,當(dāng)與第三方合作的時(shí)候,可以大大提高積累下來的社區(qū)數(shù)據(jù)的公信力。由于根哈希值是保存在公共的區(qū)塊鏈中的,任何人都可以查到,且數(shù)據(jù)是不可更改的,這樣,第三方便可以根據(jù)公共區(qū)塊鏈中存儲(chǔ)的哈希值,驗(yàn)證當(dāng)前的目標(biāo)文件是否完整,防止數(shù)據(jù)持有方私自更改哈希樹的根哈希值。
為便于描述,后續(xù)將當(dāng)前待校驗(yàn)完整性的目標(biāo)文件稱為目標(biāo)文件,由于在后期使用數(shù)據(jù)的時(shí)候,目標(biāo)文件可能只是目標(biāo)文件中的一部分文件,這樣后期校驗(yàn)?zāi)繕?biāo)文件完整性的時(shí)候,便可以只利用目標(biāo)文件的哈希值,然后將剩余缺少的哈希值補(bǔ)全,就可以得到哈希樹的根哈希值。那么,在構(gòu)建哈希樹的時(shí)候,可以將最有可能會(huì)被同時(shí)查詢到的數(shù)據(jù)都組織在一個(gè)子樹下。這樣在查詢時(shí)便會(huì)減少涉及的節(jié)點(diǎn)的數(shù)目,進(jìn)一步節(jié)省了計(jì)算資源。
具體確定最有可能被同時(shí)查詢到的數(shù)據(jù)的過程可以包括下述步驟:
步驟21:確定所述目標(biāo)文件中的至少兩個(gè)目標(biāo)文件被同時(shí)查詢的概率的權(quán)重值;
不同的目標(biāo)文件被同時(shí)查詢往往是由于不同的目標(biāo)文件之間有一定的共性,比如,目標(biāo)文件中數(shù)據(jù)的業(yè)務(wù)類型相同的情況下,同時(shí)被查詢的概率將會(huì)較高。除了根據(jù)目標(biāo)文件的業(yè)務(wù)類型外,還可以參考目標(biāo)文件之前被同時(shí)查詢的情況,然后對(duì)多種情況綜合進(jìn)行考慮,即可得到不同目標(biāo)文件被同時(shí)查詢的權(quán)重值。
具體在計(jì)算權(quán)重值時(shí),可以給不同情況乘以不同的權(quán)重,比如計(jì)算目標(biāo)文件1和目標(biāo)文件2被同時(shí)查詢的概率時(shí),如果目標(biāo)文件1和目標(biāo)文件2為相同業(yè)務(wù)類型的文件,那么其被同時(shí)查詢的概率的權(quán)重值加10,如果這兩個(gè)文件在以往的100次查詢中,有15次被同時(shí)查詢過,那么其被同時(shí)查詢的概率的權(quán)重值可再加15,如果兩個(gè)文件還同為目標(biāo)數(shù)據(jù)需求方關(guān)心的數(shù)據(jù),那么其被同時(shí)查詢的概率的權(quán)重值可再加10,目標(biāo)數(shù)據(jù)需求方為可能使用目標(biāo)文件中的數(shù)據(jù)的單位或個(gè)人,這樣目標(biāo)文件1和目標(biāo)文件2被同時(shí)查詢的概率的權(quán)重值即為35。
具體對(duì)于兩個(gè)以上的目標(biāo)文件被同時(shí)使用的權(quán)重值的計(jì)算方法與此類似,此處不再贅述。
步驟22:將所述權(quán)重值中滿足預(yù)設(shè)概率條件的權(quán)重值作為目標(biāo)權(quán)重值;
這里的預(yù)設(shè)概率條件可以是:權(quán)重值大于某一設(shè)定閾值,且如果某一個(gè)目標(biāo)文件與多個(gè)目標(biāo)文件組合的權(quán)重值都大于設(shè)定閾值,那么則取權(quán)重值最大的組合,同時(shí)該組合中的這兩個(gè)目標(biāo)文件與其它目標(biāo)文件的組合將被舍棄。按照該條件,便可得到目標(biāo)權(quán)重值,如此便得到了最有可能被同時(shí)查詢的目標(biāo)文件的組合。
步驟23:將同一目標(biāo)權(quán)重值對(duì)應(yīng)的目標(biāo)文件的哈希值記錄到同一節(jié)點(diǎn)下。
同一目標(biāo)權(quán)重值對(duì)應(yīng)的目標(biāo)文件,即為被同時(shí)查詢的概率較大的目標(biāo)文件,這樣便可以將同一目標(biāo)權(quán)重值對(duì)應(yīng)的目標(biāo)文件的哈希值記錄到同一節(jié)點(diǎn)下,這樣在查詢時(shí)便會(huì)減少涉及的節(jié)點(diǎn)的數(shù)目,進(jìn)一步節(jié)省了計(jì)算資源。
如圖1所示,假設(shè)目標(biāo)文件1和目標(biāo)文件2很有可能被同時(shí)查詢,那么便將其哈希值組織到同一節(jié)點(diǎn)h5下面,在構(gòu)建哈希樹時(shí),只需計(jì)算目標(biāo)文件1和目標(biāo)文件2的哈希值,同時(shí)根據(jù)之前保存的h6的哈希值,即可得到根哈希值。而如果將目標(biāo)文件2的哈希值組織到h3處,那便需要利用節(jié)點(diǎn)h1、h2、h3、h4,相對(duì)于將目標(biāo)文件2的哈希值組織在h2處的方法,在計(jì)算各哈希值時(shí)增加了兩個(gè)節(jié)點(diǎn),如果在校驗(yàn)數(shù)據(jù)時(shí)涉及的數(shù)據(jù)較多時(shí),通過本申請(qǐng)?zhí)峁┑墓?jié)點(diǎn)組織方法,校驗(yàn)時(shí)的計(jì)算量將會(huì)大大減少,減少了對(duì)計(jì)算資源的開銷。
在本申請(qǐng)實(shí)施例中,將某一次構(gòu)建的哈希樹的根哈希值存儲(chǔ)到區(qū)塊鏈中,可以用于后期對(duì)數(shù)據(jù)的完整性校驗(yàn),但是,有可能數(shù)據(jù)持有方弄虛作假,分別計(jì)算了正確的數(shù)據(jù)對(duì)應(yīng)的根哈希值和篡改后的數(shù)據(jù)對(duì)應(yīng)的根哈希值,而在數(shù)據(jù)需求方需要時(shí),將篡改后的數(shù)據(jù)和篡改后的數(shù)據(jù)對(duì)應(yīng)的根哈希值提供給數(shù)據(jù)需求方。由于存在這種可能,因此可以進(jìn)一步提升數(shù)據(jù)的公信力。
為了進(jìn)一步提升數(shù)據(jù)的公信力,即增加第三方對(duì)數(shù)據(jù)的信任程度,可以根據(jù)當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值和歷史根哈希值確定時(shí)序哈希值,然后將該時(shí)序哈希值存儲(chǔ)到區(qū)塊鏈中。這里所說的歷史根哈希值,指在當(dāng)前時(shí)間節(jié)點(diǎn)之前的任一時(shí)間節(jié)點(diǎn),根據(jù)目標(biāo)數(shù)據(jù)的歷史目標(biāo)文件的哈希值構(gòu)建的哈希樹的根哈希值,所述歷史目標(biāo)文件為在所述任一時(shí)間節(jié)點(diǎn)時(shí)的目標(biāo)數(shù)據(jù)的目標(biāo)文件。即歷史哈希值為在當(dāng)前時(shí)間節(jié)點(diǎn)之前的任一時(shí)間節(jié)點(diǎn),通過執(zhí)行上述步驟11-步驟13確定的根哈希值。
具體確定的時(shí)序哈希值,比如可以是根據(jù)當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值和上一時(shí)間節(jié)點(diǎn)確定的歷史根哈希值確定的。所述時(shí)序哈希值中還可以包括當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值和上一時(shí)間節(jié)點(diǎn)確定的歷史根哈希值,比如,當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值為00000000000000000000000000000000,而上一時(shí)間節(jié)點(diǎn)確定的歷史根哈希值為11111111111111111111111111111111,那么當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的時(shí)序哈希值便可以是1111111111111111111111111111111100000000000000000000000000000000?;蛘咚鰰r(shí)序哈希值還可以是對(duì)當(dāng)前時(shí)間節(jié)點(diǎn)確定的根哈希值和上一時(shí)間節(jié)點(diǎn)確定的根哈希值進(jìn)行拼接然后再取哈希值得到的,此處不再贅述。
此外,具體確定的時(shí)序哈希值,還可以是根據(jù)當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值和上上個(gè)時(shí)間節(jié)點(diǎn)確定的歷史根哈希值確定時(shí)序哈希值,此處不再贅述。
時(shí)序哈希值將各時(shí)間節(jié)點(diǎn)確定的根哈希值串聯(lián)了起來,形成鏈條結(jié)構(gòu),用戶只要得知當(dāng)前的哈希樹的時(shí)序哈希值,就能往前追溯找到之前所有的哈希樹的時(shí)序哈希值。如果數(shù)據(jù)持有方對(duì)某個(gè)時(shí)間節(jié)點(diǎn)的根哈希值作假,那么為了便于以后自己查詢或者向某些第三方提供真實(shí)的數(shù)據(jù),數(shù)據(jù)持有方往往還需要記錄真實(shí)的根哈希值,這樣數(shù)據(jù)持有方便需要同時(shí)維護(hù)兩條鏈條,其中一條為真鏈條,一條假鏈條,這會(huì)消耗較多的存儲(chǔ)資源,同時(shí)由于向數(shù)據(jù)需求方提供任一時(shí)間節(jié)點(diǎn)的時(shí)序哈希值,數(shù)據(jù)需求方便可以查看整條時(shí)序哈希值鏈條,這樣不同的數(shù)據(jù)需求方便可以互相對(duì)比時(shí)序哈希值鏈條,如果數(shù)據(jù)持有方作假,則很容易被發(fā)現(xiàn)。而如果只存儲(chǔ)根哈希值,則不同的數(shù)據(jù)需求方便無法互相對(duì)比得到的根哈希值,除非他們得到的是同一時(shí)間節(jié)點(diǎn)確定的根哈希值。
通過上述分析可知,通過在各時(shí)間節(jié)點(diǎn)確定時(shí)序哈希值,然后將時(shí)序哈希值進(jìn)行存儲(chǔ),便可以進(jìn)一步提升數(shù)據(jù)的公信力,降低了數(shù)據(jù)持有者數(shù)據(jù)作假的可能。
在將哈希值存儲(chǔ)到區(qū)塊鏈中時(shí),如前文所述,可以將哈希值存儲(chǔ)到共有的區(qū)塊鏈中,比如將哈希值存儲(chǔ)到比特幣的區(qū)塊鏈中,在0.9.2版本的比特幣協(xié)議開始,可以發(fā)起一筆小額的轉(zhuǎn)賬,在轉(zhuǎn)賬的交易腳本中利用“OP_RETURN<根哈希值>”這個(gè)命令就可以把“根哈希值”嵌入到比特幣的交易記錄里。一旦這筆交易被比特幣的區(qū)塊鏈所接受,就標(biāo)示它被寫入某一個(gè)區(qū)塊的數(shù)據(jù)主體,便完成了本次數(shù)據(jù)的存證。
遵照慣例,在待寫入?yún)^(qū)塊鏈的根哈希值的前端可以加入一個(gè)前綴來表明存儲(chǔ)在區(qū)塊鏈上的這個(gè)“OP_RETURN<根哈希值>”命令是用于本方法的存證服務(wù)的。比如CoinSpark網(wǎng)站會(huì)使用“SPK”前綴,例如“SPK”+根哈希值。在將根哈希值寫入?yún)^(qū)塊鏈后,可以記錄當(dāng)前時(shí)間節(jié)點(diǎn)寫入根哈希值和/或時(shí)序哈希值的區(qū)塊鏈的位置,以便后續(xù)根據(jù)該位置來確定根哈希值和/或時(shí)序哈希值。
需要說明的是,為了避免哈希值寫入失敗,可以留意對(duì)消息注入操作失敗的處理。一般來說如果得到了6個(gè)區(qū)塊的確認(rèn),就可以認(rèn)為這筆交易記錄成功寫入了區(qū)塊鏈,幾乎不可能會(huì)被篡改。但在極端情況下,比特幣的區(qū)塊鏈有可能發(fā)生分叉的情況,尤其是在比特幣協(xié)議更新引起新舊協(xié)議不兼容的時(shí)候。一旦出現(xiàn)寫入失敗的情況,需要采取應(yīng)對(duì)措施補(bǔ)救,保證我們的根哈希值在比特幣的主鏈上有數(shù)據(jù)存證。
按照上述對(duì)根哈希值和時(shí)序哈希值的存儲(chǔ)方式,便可為目標(biāo)文件形成一個(gè)難以篡改的存證,后續(xù)在接收到針對(duì)目標(biāo)文件中的至少一個(gè)目標(biāo)文件的完整性校驗(yàn)指令后,便可以根據(jù)區(qū)塊鏈中記錄的根哈希值和/或時(shí)序哈希值,校驗(yàn)?zāi)繕?biāo)文件的完整性。
下面將詳細(xì)描述本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)校驗(yàn)方法,即如何根據(jù)之前存儲(chǔ)的哈希值,對(duì)目標(biāo)文件進(jìn)行校驗(yàn)的過程。
該方法的實(shí)現(xiàn)流程示意圖如圖4所示,包括下述步驟:
步驟31:確定待驗(yàn)證的目標(biāo)文件,提取所述目標(biāo)文件的存證信息;
這里的目標(biāo)文件為通過前文所述的步驟進(jìn)行存證的目標(biāo)文件中的至少一個(gè)文件。由于在對(duì)目標(biāo)文件進(jìn)行存證時(shí),記錄了存證目標(biāo)文件的存在信息的區(qū)塊鏈的標(biāo)識(shí),那么可以根據(jù)該標(biāo)識(shí)確定與該標(biāo)識(shí)對(duì)應(yīng)的區(qū)塊,該區(qū)塊中便保存有目標(biāo)文件對(duì)應(yīng)的根哈希值以及存證時(shí)間戳。
步驟32:從存證信息中,提取所述目標(biāo)文件的哈希值;
步驟33:利用所述目標(biāo)文件的哈希值構(gòu)建校驗(yàn)樹,并將所述校驗(yàn)樹的根哈希值作為校驗(yàn)哈希值;
這里的校驗(yàn)樹同樣為哈希樹,該校驗(yàn)樹為數(shù)據(jù)結(jié)構(gòu)與歷史哈希樹相同的哈希樹,歷史哈希樹為在該目標(biāo)時(shí)間節(jié)點(diǎn)時(shí)根據(jù)目標(biāo)文件的哈希值構(gòu)建的哈希樹。所謂的數(shù)據(jù)結(jié)構(gòu)相同,指目標(biāo)文件對(duì)應(yīng)于校驗(yàn)樹中節(jié)點(diǎn)的位置,與歷史哈希樹中節(jié)點(diǎn)的位置相同,比如圖2所示的歷史哈希樹中,備份文件1和備份文件2對(duì)應(yīng)于該哈希樹中的h1節(jié)點(diǎn)和h2節(jié)點(diǎn),那么,在構(gòu)建校驗(yàn)樹時(shí),同樣也將備份文件1和備份文件2(目標(biāo)文件)對(duì)應(yīng)于該哈希樹中的h1節(jié)點(diǎn)和h2節(jié)點(diǎn)。
在構(gòu)建當(dāng)前哈希樹時(shí),如果目標(biāo)文件為歷史哈希樹對(duì)應(yīng)的目標(biāo)文件中的部分文件,那么可以根據(jù)預(yù)先存儲(chǔ)的歷史哈希樹的各目標(biāo)文件的哈希值,確定構(gòu)建校驗(yàn)樹的缺省哈希值,這里所說的缺省哈希值為除所述目標(biāo)文件的哈希值外,確定所述校驗(yàn)樹的根哈希值所必需的哈希值,比如,目標(biāo)文件為備份文件1和備份文件2,其分別對(duì)應(yīng)于該哈希樹中的h1節(jié)點(diǎn)和h2節(jié)點(diǎn),那么在得到根節(jié)點(diǎn)時(shí),便還需要h6節(jié)點(diǎn),而無需h3節(jié)點(diǎn)和h4節(jié)點(diǎn),這里的h6節(jié)點(diǎn)便可稱為缺省哈希值。
這樣在確定缺省哈希值和目標(biāo)文件的哈希值后,便可構(gòu)建校驗(yàn)樹,得到校驗(yàn)樹的哈希值。
在構(gòu)建當(dāng)前哈希樹時(shí),如果目標(biāo)文件為歷史哈希樹對(duì)應(yīng)的目標(biāo)文件中的全部文件,那么可以直接根據(jù)目標(biāo)文件的哈希值,按照歷史哈希樹的數(shù)據(jù)結(jié)構(gòu)構(gòu)建哈希樹,即可得到校驗(yàn)樹的哈希值。
由于之前已經(jīng)預(yù)先在區(qū)塊鏈中存儲(chǔ)了各時(shí)間節(jié)點(diǎn)確定的哈希樹的根哈希值,那么此時(shí)在對(duì)目標(biāo)文件進(jìn)行校驗(yàn)時(shí),便可以從區(qū)塊鏈中確定目標(biāo)文件對(duì)應(yīng)的歷史哈希樹的根哈希值。具體確定根哈希值時(shí),可以根據(jù)目標(biāo)時(shí)間節(jié)點(diǎn)來確定目標(biāo)時(shí)間節(jié)點(diǎn)時(shí)寫入根哈希值的區(qū)塊鏈的位置,進(jìn)而確定區(qū)塊鏈中保存的根哈希值。
步驟34:判斷所述校驗(yàn)樹的根哈希值與所述歷史哈希樹的根哈希值是否相同;
在確定校驗(yàn)樹的根哈希值和歷史哈希樹的根哈希值后,便可以對(duì)二者進(jìn)行比對(duì),來判斷二者是否相同。
步驟35:通過存證時(shí)間戳校驗(yàn)?zāi)繕?biāo)文件是否有效;
如果目標(biāo)文件的生成時(shí)間和存證時(shí)間戳之間的時(shí)間間隔小于某一閾值,那么可以認(rèn)為數(shù)據(jù)是有效的,后續(xù)可以繼續(xù)通過哈希值來驗(yàn)證數(shù)據(jù)的真實(shí)性。這里的目標(biāo)文件的生成時(shí)間,比如可以是備份文件的生成時(shí)間,也可以是目標(biāo)文件中數(shù)據(jù)的生成時(shí)間。比如,備份文件的備份時(shí)間是2014年11月11日23點(diǎn)30分,而存證時(shí)間戳為2014年11月12日0點(diǎn)10分,兩個(gè)時(shí)間的間隔為40分鐘,如果預(yù)設(shè)的閾值為1天,那么,可以確定該備份數(shù)據(jù)是有效的。
步驟36:當(dāng)確定校驗(yàn)樹的根哈希值與該歷史哈希樹的根哈希值相同時(shí),確定目標(biāo)文件為未被篡改過的文件;
步驟37:當(dāng)確定校驗(yàn)樹的根哈希值與該歷史哈希樹的根哈希值不同時(shí),確定目標(biāo)文件為被篡改的文件。
當(dāng)確定目標(biāo)文件為被篡改的目標(biāo)文件后,便不必再去挖掘其價(jià)值,避免了人力物力等資源的浪費(fèi)。
需要說明的是,由于在存證階段可以將時(shí)序哈希值也存儲(chǔ)到區(qū)塊鏈中,那么,還可以從區(qū)塊鏈中確定目標(biāo)文件對(duì)應(yīng)的時(shí)序哈希值,時(shí)序哈希值中包括在目標(biāo)時(shí)間節(jié)點(diǎn)時(shí)構(gòu)建的哈希樹的根哈希值,以及在目標(biāo)時(shí)間節(jié)點(diǎn)前一時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值,這樣便可以根據(jù)確定的時(shí)序哈希值確定各個(gè)時(shí)間節(jié)點(diǎn)構(gòu)建的歷史哈希樹的根哈希值。
本申請(qǐng)實(shí)施例提供的數(shù)據(jù)校驗(yàn)方法,通過確定目標(biāo)文件的哈希值,然后利用目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值,將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息。這里的存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。這樣,后續(xù)在對(duì)目標(biāo)文件中的至少一個(gè)目標(biāo)文件的完整性進(jìn)行校驗(yàn)時(shí),便可以根據(jù)區(qū)塊鏈中的存儲(chǔ)的根哈希值和存證時(shí)間戳,來校驗(yàn)?zāi)繕?biāo)文件的真實(shí)性
需要說明的是,本申請(qǐng)實(shí)施例所提供方法的各步驟的執(zhí)行主體均可以是同一設(shè)備,或者,該方法也由不同設(shè)備作為執(zhí)行主體。比如,步驟11和步驟12的執(zhí)行主體可以為設(shè)備1,步驟13的執(zhí)行主體可以為設(shè)備2;又比如,步驟11的執(zhí)行主體可以為設(shè)備1,步驟12和步驟13的執(zhí)行主體可以為設(shè)備2;等等。
以上為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)存證方法和數(shù)據(jù)校驗(yàn)方法,基于同樣的思路,本申請(qǐng)實(shí)施例還提供相應(yīng)的數(shù)據(jù)存證裝置,如圖5所示;本申請(qǐng)實(shí)施例還提供相應(yīng)的數(shù)據(jù)校驗(yàn)裝置,如圖6所示。
圖5為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)存證裝置的結(jié)構(gòu)示意圖,具體包括:
第一確定單元41,確定目標(biāo)文件的哈希值;
第一構(gòu)建單元42,利用所述目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值;
存儲(chǔ)單元43,將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息;其中,所述存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。
本申請(qǐng)實(shí)施例中,數(shù)據(jù)存證的實(shí)施方法有很多種,在一種實(shí)施方式中,為了便于數(shù)據(jù)校驗(yàn)時(shí)節(jié)省資源,第一構(gòu)建單元42,具體用于確定所述目標(biāo)文件中的至少兩個(gè)目標(biāo)文件被同時(shí)查詢的概率的權(quán)重值;將所述權(quán)重值中滿足預(yù)設(shè)概率條件的權(quán)重值作為目標(biāo)權(quán)重值;將同一目標(biāo)權(quán)重值對(duì)應(yīng)的目標(biāo)文件的哈希值記錄到同一節(jié)點(diǎn)下。
在一種實(shí)施方式中,為了提高數(shù)據(jù)的公信力,所述裝置還包括:
時(shí)序哈希值確定單元44,根據(jù)所述哈希樹的根哈希值和歷史根哈希值確定時(shí)序哈希值,所述歷史根哈希值為在當(dāng)前時(shí)間節(jié)點(diǎn)之前的任一時(shí)間節(jié)點(diǎn),根據(jù)歷史目標(biāo)文件的哈希值構(gòu)建的哈希樹的根哈希值;
時(shí)序哈希值存儲(chǔ)單元45,將所述時(shí)序哈希值存儲(chǔ)到區(qū)塊鏈中。
在一種實(shí)施方式中,時(shí)序哈希值確定單元44,具體用于根據(jù)當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值和上一時(shí)間節(jié)點(diǎn)確定的歷史根哈希值,確定時(shí)序哈希值。
在一種實(shí)施方式中,所述時(shí)序哈希值中包括當(dāng)前時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值和上一時(shí)間節(jié)點(diǎn)確定的歷史根哈希值。
本申請(qǐng)實(shí)施例提供的數(shù)據(jù)存證裝置,通過確定目標(biāo)文件的哈希值,然后利用目標(biāo)文件的哈希值構(gòu)建哈希樹,并提取所述哈希樹的根哈希值,將所述根哈希值存儲(chǔ)到區(qū)塊鏈中,以得到用于驗(yàn)證所述目標(biāo)文件真實(shí)性的存證信息。這里的存證信息包括:存儲(chǔ)目標(biāo)文件根哈希值的區(qū)塊的標(biāo)識(shí)、目標(biāo)文件的存證時(shí)間戳、目標(biāo)文件的根哈希值。這樣,后續(xù)在對(duì)目標(biāo)文件中的至少一個(gè)目標(biāo)文件的完整性進(jìn)行校驗(yàn)時(shí),便可以根據(jù)區(qū)塊鏈中的存儲(chǔ)的根哈希值和存證時(shí)間戳,來校驗(yàn)?zāi)繕?biāo)文件的真實(shí)性。
圖6為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)校驗(yàn)裝置的結(jié)構(gòu)示意圖,該裝置具體包括:
第二確定單元51,確定待驗(yàn)證的目標(biāo)文件,提取所述目標(biāo)文件的存證信息
提取單元52,從所述存證信息中,提取所述目標(biāo)文件對(duì)應(yīng)的歷史哈希樹的根哈希值;
第二構(gòu)建單元53,利用所述目標(biāo)文件的哈希值構(gòu)建校驗(yàn)樹,并將所述校驗(yàn)樹的根哈希值作為校驗(yàn)哈希值;
第三確定單元54,當(dāng)確定所述校驗(yàn)哈希值與所述歷史哈希樹的根哈希值相同時(shí),確定所述目標(biāo)文件為未被篡改過的文件。
本申請(qǐng)實(shí)施例中,數(shù)據(jù)校驗(yàn)的實(shí)施方法有很多種,在一種實(shí)施方式中,所述第二構(gòu)建單元53在所述目標(biāo)文件為所述目標(biāo)文件中的部分文件時(shí),根據(jù)預(yù)先存儲(chǔ)的歷史哈希樹的各目標(biāo)文件的哈希值,確定構(gòu)建所述校驗(yàn)樹的缺省哈希值,所述缺省哈希值為除所述目標(biāo)文件的哈希值外,用于確定所述校驗(yàn)樹的根哈希值的哈希值;
根據(jù)確定的缺省哈希值和所述目標(biāo)文件的哈希值,構(gòu)建所述校驗(yàn)樹;
所述第二構(gòu)建單元52在所述目標(biāo)文件為所述目標(biāo)文件中的全部文件時(shí),根據(jù)所述目標(biāo)文件的哈希值,按照所述歷史哈希樹的數(shù)據(jù)結(jié)構(gòu)構(gòu)建哈希樹。
在一種實(shí)施方式中,所述裝置還包括時(shí)序哈希值確定單元55,用于從區(qū)塊鏈中確定所述目標(biāo)文件對(duì)應(yīng)的時(shí)序哈希值,所述時(shí)序哈希值中包括在所述目標(biāo)時(shí)間節(jié)點(diǎn)時(shí)構(gòu)建的哈希樹的根哈希值,以及在所述目標(biāo)時(shí)間節(jié)點(diǎn)前一時(shí)間節(jié)點(diǎn)構(gòu)建的哈希樹的根哈希值;
根據(jù)所述時(shí)序哈希值確定各個(gè)時(shí)間節(jié)點(diǎn)構(gòu)建的歷史哈希樹的根哈希值。
本申請(qǐng)實(shí)施例提供的數(shù)據(jù)校驗(yàn)裝置,在對(duì)待校驗(yàn)的目標(biāo)文件進(jìn)行校驗(yàn)時(shí),根據(jù)預(yù)先確定的目標(biāo)文件的存證信息中的時(shí)間戳和哈希值,來對(duì)目標(biāo)文件的真實(shí)性進(jìn)行校驗(yàn),當(dāng)確定所述校驗(yàn)樹的根哈希值與所述歷史哈希樹的根哈希值相同時(shí),確定所述目標(biāo)文件為未被篡改過的文件。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本申請(qǐng)的實(shí)施例而已,并不用于限制本申請(qǐng)。對(duì)于本領(lǐng)域技術(shù)人員來說,本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的權(quán)利要求范圍之內(nèi)。