原理
時間戳的主要目的在于通過一定的技術手段,對數據産生的時間進行認證,從而驗證這段數據在産生後是否經過篡改。所以時間戳服務的提供者必須證明服務中使用的時間源是可信的,所提供的時間戳服務是安全的。下面介紹最常見的幾種時間戳協議,并對各個協議的原理進行分析。
簡單的時間戳協議
在使用時間戳服務時,所涉及到的角色一般有以下幾種:提供時間戳服務的機構(Time-Stamping Authoritor),申請時間戳服務的用戶(Subscriber)和時間戳證書的驗證者(Relying Party)。時間戳機構的主要職責是為一段數據申請時間戳證書,證明這段數據在申請時間戳證書的時間點之前真實存在,在這個時間點之後對數據的更改都是可以追查的,這樣就可以防止僞造數據來進行欺騙。證書持有者把需要申請時間戳證書的數據發送給時間戳機構,時間戳機構将生成時間戳證書發送給證書持有者。在需要證明該數據未被篡改時,證書持有者展示數據所對應的時間戳證書,時間戳證書的驗證者來驗證它的真實性,而從确認該數據是否經過篡改。
最基本的時間戳協議的工作流程如下;申請時間戳服務的用戶将需要認證的數據傳輸給時間戳服務的提供者;時間戳服務的提供者将經過認證後的時間戳證書返還給用戶。
簡單時間戳協議的工作流程如圖1所示:用戶将需要認證的數據傳輸給時間戳機構,數據經過Hash運算得到m=Hash(M),時間戳機構将m和收到數據的時間t一起進行數字簽名,然後将生成的時間戳證書Sign(m,t)返還給用戶。在需要驗證時間戳證書時,首先驗證時間戳證書Sign(m,t)是否為時間戳機構簽發的,其次驗證m是否為用戶數據經過Hash運算得到的結果。如果兩項驗證中有任何一項不通過,就證明用戶的數據經過了篡改;如果都通過,說明用戶的數據在時間t之後沒有進行過任何修改。這個方法通過對數據進行Hash運算,保護了用戶數據的隐私,在另一方面也減少了時間戳機構的存儲容量,為時間戳機構削減了成本。
線性鍊接協議
線性鍊接協議是為了解決時間戳機構必須完全信任這一問題而提出的。
這個協議的設計思想是為了建立起時間戳證書之間的緊密聯系,像鍊表一樣将用戶申請的時間戳證書按照順序鍊接起來。時間戳機構将收到的數據的Hash值用鍊表鍊接起來,把第n組數據的時間戳證書鍊表鍊接到第n-1組數據的時間戳證書鍊表之後。
為了驗證時間戳機構是否存在欺騙行為,機構設定一個固定的時間,通過不同渠道将最近通過的時間戳證書列表公布出來。任何人都可以通過時間戳機構公布的證書列表來驗證時間戳鍊表的有效性,從而确定時間戳機構是否公正可靠。
圖2給出了8個數據的時間戳鍊表的結構示意圖,通過這種方法,時間戳機構将不同用戶的時間戳證書按照申請服務的順序鍊接起來,從而得到了一條完整的時間戳證書鍊接。一方面,時間戳機構就可以通過完整的時間戳證書鍊接來确認兩個數據申請時間戳服務的先後順序;另一方面,由于用戶的時間戳證書中會包含前一個用戶申請時間戳證書時的部分信息,而時間戳機構也無法決定用戶申請時間戳服務的次序,所以即便時間戳機構與用戶相互串通,也無法改變整個時間戳證書鍊接中用戶證書的位置。
樹型協議
樹型協議是線性鍊接協議的優化協議,這個協議把時間戳證書鍊接分解成很多小的組。在每組中,時間戳服務的使用者可以向TSA提出時間戳證書申請。可以通過建立一棵樹型結構實現整個流程,其中樹型結構的葉子是使用者的時間戳證書申請,TSA使用一個安全的Hash函數來計算樹型結構中的節點值。樹型結構如圖3所示。
樹型協議減少了時間戳機構中時間戳證書的存儲數量。要驗證Hni是否是在第n輪中申請的時間戳證書,隻需要驗證能否通過Hni推算出Ni。同時此協議還可以防止對時間戳證書的篡改,用戶要同TSA互相串通,才可能對第n組中的某個時間戳證書進行篡改。但第n組的信息包含在了n+1組的時間戳中,所以可以通過n+1組的時間戳審查第n組的時間戳是否正确。
但是樹型協議也有它自己的問題。樹型協議不能驗證同組中兩個時間戳證書的相對次序,因為同組的時間戳證書都是在第n組結束時發布,但他們卻不是同時被時間戳機構收到的。所以樹型協議無法确定同一組中時間戳證書的正确順序。除非絕對相信TSA能夠保持同一組時間戳的正确次序或者減少每一組内的數據個數,但如果個數太少,系統的效率就會随之降低。同線性鍊接協議相同,如果待驗證的時間戳證書與參考的時間戳證書中存在的時間戳證書較多時,可用性就會大大降低。
二進制協議
在線性鍊接協議的基礎上,人們又提出了二進制鍊接協議。相比于線性鍊接協議,二進制鍊接協議更具有建設性,并且實際可用。二進制鍊接協議可以定義為一個有向無環的鍊接圖。圖4給出了構造一個二進制鍊接圖Hk的步驟:
為了更直觀的看出二進制鍊接圖的構造過程,我們通過例子來說明,如圖5所示,就是一個二進制鍊接圖H5的構建過程:
對于任意的兩個頂點a和b,若k>2,且0<#≤%<2k,如果l(a,b)是從b到a的最短驗證路徑,則有l a,b≤3k−5。
因為二進制鍊接協議由一個常數來劃分組,然後按照上述方案來構造各個組之間的時間戳證書鍊接。所以,在驗證鍊接有效性時,二進制鍊接協議的時間複雜度要遠遠小于線性鍊接協議的時間複雜度,它的時間複雜度僅為O(logn)。
線索認證樹協議
圖6顯示的是線索認證樹協議[[W3]]的構建過程,W3鍊接很簡單,由樹的後序遍曆可得2→3→10→4→5→11→14→6→7→12→8→9→13→15→16,那麼ℎead(4)=(1,4,10),tail(4)=(5,15),ℎead(8)=(1,8,12,14),tail(8)=(9),則單一的時間戳為sign(4)=(4;L1,L4,L10;L5,L15),sign(8)=(8;L1,L8,L12,L14;L9)。
與二進制鍊接協議相比,線索認證樹協議的時間戳長度為klogn2,二進制鍊接協議為6klogn2。相比之下,線索認證樹協議大大減小了單個時間戳的大小。所以線索認證樹協議有着高效的驗證效率。但該協議存在的問題和二進制鍊接協議一樣,由于協議所使用的算法很複雜,所以在工程實現上具有一定的難度。
分布式協議
分布式協議的設計思想為在整個申請時間戳證書的工作流程中,涉及到了以下幾種角色:一組自願的時間戳證書簽發者、一個安全的Hash算法和一個随機挑選簽發人員的随機算法。
當用戶想對數據申請時間戳證書時,用戶先用Hash算法計算數據的Hash值,得到一個随機數;在用随機算法挑選随機的簽發者。然後用戶将計算出的Hash值發送給通過算法随機得到的各個簽發者。等簽發者收到用戶發來的Hash值後将收到數據的時間添加到Hash值後面,再對Hash值和時間整體進行簽名,返回簽名結果給用戶,用戶把所有的簽名作為時間戳證書存儲起來。
在此協議中,由于所有對數據Hash值進行簽名的簽發者是通過算法随機産生的,所以對于随機選出的簽發者,用戶一般不可能與之串通僞造時間戳,除非所有人都與用戶串通,但這顯然是不可能的。
在此協議的使用過程中,用戶必須要與所有選出的簽發者進行實時聯系,及時了解簽發者發生變動的情況。當簽發者無法即時對數據簽名時,需要有一種備用機制進行處理。在此協議中,别的協議中必須的時間戳機構是不存在的。每一個用戶在自願的情況下都可以當做簽發者使用。
分布式協議的描述如下:
- 計算數據M的Hash值m=Hash(M),通過随機算法挑選簽發者,他們收到數據M的Hash值m;簽發者ID組G(y)中的各個簽發者給(t,ID,m)簽名,并返回時間戳簽名Sign;最後得到的時間戳證書為[(m,ID),(Sign1,Sign2,……,Signk)]。
此協議的優點是不可能提前知道進行簽名的簽發組G(m)。為了僞造一個時間戳,用戶不可能為了僞造一個時間戳,就能與k個随機選取的簽發者串通。但是另一方面,分布式方案也有很明顯的缺點。第一、需要提前建立簽發組,而且隻能從預先建立的簽發者集合中使用算法随機選出簽發者。第二、網絡帶寬要求k倍于簡單時間戳協議。第三、如何在法律層面定義不同時間源的時間認證和可信度也是一個棘手的問題。因此,分布式時間戳協議如果實現仍存在相當大的難度。
時間戳系統的組成
通俗的講,時間戳是一份能夠表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。它的提出主要是為用戶提供一份電子證據,以證明用戶的某些數據的産生時間。在實際應用上,它可以使用在包括電子商務、金融活動的各個方面,尤其可以用來支撐公開密鑰基礎設施的“不可否認”服務。
時間戳服務的本質是将用戶的數據和當前準确時間綁定,在此基礎上用時間戳系統的數字證書進行簽名,憑借時間戳系統在法律上的權威授權地位,産生可用于法律證據的時間戳,用來證明用戶數據的産生時間,達到“不可否認”或“抗抵賴”的目标。時間戳系統的組成主要包括三個部分:可信時間源、簽名系統和時間戳數據庫:
(1)可信時間源就是時間戳系統的時間來源,TSA系統中的所有部件的時間都必須以這個可信時間源為标準,尤其在頒發的時間戳中填寫的時間必須嚴格按照可信時間源填寫。而作為可信時間源自身,其或者就是國家權威時間部門發布的時間,或者是用國家權威時間部門認可的硬件和方法獲得的時間。
(2)簽名系統負責接收時間戳申請、驗證申請合法性以及産生和頒發時間戳,最後将時間戳存儲到數據庫中。這個過程中,申請消息和頒發時間戳格式、時間戳的産生和頒發都必須符合規範中給出的要求。用戶向簽名系統發起時間戳申請,簽名系統獲取用戶的文件數據摘要後,再驗證申請的合法性,最後将當前時間和文件摘要按一定格式綁定後簽名返回,并保存在數據庫中。
(3)時間戳數據庫負責保存TSA系統頒發的時間戳,而且必須定期備份,以便用戶需要時可以申請從中取得時間戳。對時間戳數據庫的存儲、備份和檢索也要求符合規範中給出的規定。
時間戳的産生和頒發
标準中規定了時間戳的申請和頒發方式、可信時間的産生方法、時間的同步和申請和頒發過程。
TSA可以通過不同的方式接收時間戳申請和頒發時間戳,但應至少支持下列四種方式的其中一種:
a.用戶通過電子郵件申請;
b.用戶通過文件傳輸申請;
c.用戶通過套接字(Socket)申請;
d.用戶通過HTTP申請。
TSA應明确指出其支持的申請方式,用戶隻能在此範圍内選擇如何申請。一般來說,由于WEB服務在網絡中應用的普及,TSA最少應支持用戶通過HTTP申請時間戳。無論TSA支持哪種申請方式,《時間戳規範》規定了整個申請和頒發時間戳的過程至少應該包括的一系列基本過程。TSA在産生時間戳時,可信時間源是整個系統工作的基礎。可信時間的源頭可以使用以下的一種或多種方法獲得:
a.使用某種無線接收裝置;
b.使用某種時間同步協議從一個指定網絡地址獲得時間;
c.使用某種通過國家權威時間部門認證的硬件獲得時間。
TSA也可以使用多種方法産生可信時間,以保證時間的精确度。通過多種方法産生最終可信時間應該是産生的多個可信時間的折衷。由于TSA系統可能由多個部件組成,各部件還應根據可信時間同步部件自身的時間。在同步過程中,《時間戳規範》規定了部件同步應滿足的一系列條件。
時間戳的格式
标準中規定了對TSA的要求、密鑰标識、時間的表示格式、時間戳申請和響應消息格式、保存文件、所用MIME對象定義和時間戳格式的安全考慮。時間戳的格式是此标準的重點内容,主要參考了RFC3161。對TSA的要求,标準中明确了時間戳中由TSA滿足的一系列信息項要求。
TSA應有專門的密鑰對時間戳消息簽名,但一個TSA可以有許多不同的私鑰以适應不同的要求,标準中規定了密鑰标識的格式。在每一個時間戳裡都包含一個可信時間值,這個時間值的表示格式也在标準中進行了規定。時間戳的申請消息和相應消息是最基本的消息,标準中規定了這兩個消息的格式,并解釋了格式中的各數據項。标準還規定了時間戳申請和響應消息以文件方式保存時對文件的要求。
當TSA支持通過電子郵件或者HTTP申請時間戳時,标準規定了其申請和相應消息的MIME對象定義。時間戳格式在使用時應該進行的安全考慮也在标準中進行了要求。
時間戳的管理
《時間戳規範》的标準中規定了時間戳的保存、時間戳的備份、時間戳的檢索、時間戳的删除和銷毀、時間戳的查看和驗證。
時間戳的保存包括在TSA(時間戳機構)方的保存和在用戶方的保存。在TSA方的保存涉及到時間戳數據庫的管理和時間戳記錄應當包含的信息項,一般最少應包括入庫時間、序列号、完整編碼等。時間戳在用戶方一般由用戶自行保存。
時間戳的備份在标準中規定了一系列要求,如定期備份、備份介質等。
時間戳的檢索在标準中規定了至少三種檢索方式,包括分别按照入庫時間、序列号、完整編碼檢索。
當TSA系統由于内部錯誤或者外部攻擊導緻産生錯誤的時間戳時,标準規定了删除時應遵循的要求。在确定某時間戳已經喪失其價值後,标準規定了銷毀時應遵循的要求。
時間戳的查看和驗證在标準中規定了TSA應該給用戶提供一個方便安全的方法查看其頒發的時間戳,例如提供一個查看軟件等。TSA還應該給用戶提供一個方便安全的方法對其頒發的時間戳進行驗證,例如提供一個驗證軟件或者通過互聯網驗證等。
安全
由于時間戳在電子取證中的重要作用及其法律地位,時間戳系統必須擁有極高的安全級别,安全保護應包括物理環境安全和軟件安全。
物理環境安全包括機房安全、設備安全和記錄介質安全。軟件安全包括運行環境、可信時間源、簽名系統、時間戳數據庫和審計。其中,審計對于錯誤的查找和責任的跟蹤具有重要作用,标準中詳細的規定了審計數據産生、審計查閱、審計事件存儲、可信時間、審計日志簽名的要求。對于證書和密鑰的管理應按國家密碼管理部門相關标準與規定執行。