5.4 數字簽名的生成時間安全證明獲取
5.4.1 總則
簽名生成時間是數字簽名的一個重點關注因素,如私鑰擁有屬性安全證明獲取需要簽名的生成時間證明。數字簽名生成時間證明獲取利用可信時間戳機構TTSA提供的時間戳和/或簽名驗證者提供的時間相關數據實現。TTSA的建立和管理不在本標準的討論范圍內。
5.4.2 從TTSA獲取時間的方式獲取簽名生成時間證明
5.4.2.1 時間戳數據包(TSP)的格式
從被簽名者和驗證者信任的TTSA獲取時間是獲取簽名生成時間證明的一個重要方式。時間戳數據包(TSP)是該方式獲取簽名生成時間證明的主要數據結構。TSP的格式具體描述如下:
其中,逗號用來分割不同的數據,而不是數據格式的一部分。
a) TSP = * timestamped_data,timestamp_signature*TTSA
TSP由時間戳數據及其數字簽名構成。數字簽名是由TTSA的私鑰對時間戳數據的簽名。
b) timestamp_signatureTTSA = SIGTTSA (timestamped_data)
數字簽名算法SIGTTSA是一個使用在時間戳數據上的數字簽名操作,簽名私鑰為TTSA的數字簽名私鑰,該私鑰只被用于對時間戳數據生成數字簽名。
c) timestamped_data= user_supplied_info, TTSA_supplied_info, timestamp
其中:
1) 用戶提供信息user_supplied_info是一個實體在向TTSA請求時間戳時,提供的信息;user_supplied_info在實際應用中可以為空。如果提供了此信息,該信息將被TTSA在生成時間戳簽名時使用,而不需要在傳遞時間戳數據包時返回給請求者。若使用了該信息,必須保證在一個實體要驗證timestamp_signature**TTSA時,該信息是可見的。
2) TTSA提供信息TTSA_supplied_info是TTSA在生成timestamp_signature**TTSA時采用的額外信息。TTSA_supplied_info在實際應用中可能為空。只要該部分信息能夠在驗證timestamp_signature**TTSA簽名時,被重新生成,其中的任何一部分都可以從時間戳數據包中刪除。
3) 時間戳timestamp包含時間和(可能)的其他信息。
因此,由TTSA生成的通用的TSP格式如下:
TSP = user_supplied_info, TTSA_supplied_info, timestamp, SIGTTSA(user_supplied_info, TTSA_supplied_ info,* timestamp*)
其中,user_supplied_info和TTSA_supplied_info可能為空。
TTSA可能廣播一個TSP或針對提出請求的實體回應一個TSP。
? 當TTSA廣播一個TSP時,TSP中的用戶提供信息為空,數字簽名timestamp_signature**TTSA在TTSA提供信息(可能為空)和時間戳的基礎上生成,TSP隨后被組裝和廣播。在TTSA提供信息中,被所有TSP的既定接收者共知的部分可以從傳輸的TSP中刪除。
? 當一個實體請求一個時間戳時,請求實體提供用戶提供信息(可能為空)給TTSA。數字簽名timestamp_signature**TTSA在用戶提供信息、TTSA提供信息中(可能為空)和時間戳的基礎上生成。在生成簽名的基礎上,將數字簽名timestamp_signature**TTSA和時間戳數據組裝成一個TSP,然后發送給請求的實體。被所有既定接收者共知的部分TTSA提供信息,還有以其他方式告知驗證實體的用戶提供信息,可以從返回的TSP的時間戳數據域中刪除。
5.4.2.2 用從TTSA申請的TSP提供簽名生成時間證明
對于一個實體A,有四種不同的方案使其從一個受信任的TTSA獲得一個TSP,然后將TSP、消息(M)、和簽名組合,并將其加入數據的有效載荷,發送到接收實體B,提供簽名消息的生成時間證明。
在下面的方案中,簽名生成由實體A或者TTSA采用一個認定的數字簽名算法生成。SIGA()表示實體A用其私鑰生成的簽名,SIGTTSA()表示TTSA使用其私鑰生成的簽名。SIGA()使用實體A的公開簽名驗證密鑰驗證,SIGTTSA()使用TTSA的公開簽名驗證密鑰驗證。以下討論,假定實體A和B都已成功地驗證所有收到的簽名。各方案描述如下:
1.1.2.2.1 實體A向TTSA提供用戶信息(可選的)獲得TSP
實體A可以直接從TTSA請求一個時間戳,或者實體A使用TTSA廣播的時間戳(即,實體A沒有明確地從一個TTSA請求時間戳),提供數字簽名的生成時間證明,具體過程如圖3所示。
a) 一個實體A可以明確地向TTSA發送一個時間戳請求。如果請求被發送,請求消息包含期望的用戶提供信息user_supplied_info。
b) TTSA發送TSP到實體A(或廣播一個TSP,隨后被實體A獲得),其中TSP定義同5..4.2.1。
如果實體A在第一步被發送了請求信息:
時間戳數據timestamped_data包含用戶提供信息user_supplied_info。
如果實體A沒有在第一步發送請求信息,即廣播方式發送TSP:
在TSP采用廣播的形式下,用戶提供信息為空。
如果實體A和TTSA之間存在雙方協議,則下列信息可以從TTSA傳輸的TSP數據中去除:
1) 用戶提供信息user_supplied_info中的任何一部分信息可以被去除,如果實體A已經知道該信息;
2) TTSA提供信息中TTSA_supplied_info中的任何一部分信息可以被去除,只要實體A知道該信息,或者該信息能夠被實體A確定。
但是,任何從發送的TSP數據中刪除的信息,必須要包含在生成/驗證數字簽名timestamp_signature**TTSA時所用的時間戳數據中。
在接到從TTSA發送的TSP時,實體A應該:a)檢查傳輸的部分用戶提供信息user_supplied_info是否正確;b)使用TTSA的公開簽名驗證密鑰驗證數字簽名timestamp_signature**TTSA。

圖3 實體A向TTSA提供用戶信息(可選的)獲得TSP
c) 實體A簽名(M, TSP),組裝數據D,并將其發送到實體B:

其中,TSP同5.4.2.1中規定。
如果用戶提供信息中的任何一部分信息從來自TTSA的TSP中被刪除,那么整個用戶提供信息要在組建數據D時回填到TSP中,除非實體A和實體B存在相互協定,使得被刪除的部分能夠被實體B知道或者重新生成。在存在部分信息刪除的情況下,整個用戶提供信息user_supplied_info應該包含在生成/驗證數字簽名timestamp_signature**TTSA和SIGA(M,TSP)所用的時間戳數據timestamped_data中。
如果TTSA提供信息TTSA_supplied_info中的任何一部分信息從來自TTSA的TSP中被刪除,那么整個TTSA提供信息要在組建D時回填到TSP中,除非實體A和實體B之間存在雙方協定,可以讓B能夠確定出這些信息。在這種情況下,如果實體B已知或者可以確定TTSA提供信息,那么它的任何部分信息可以從實體A傳輸的TSP數據中刪除。然而,整個TTSA提供信息TTSA_supplied_info應該包含在生成/驗證數字簽名timestamp_signature**TTSA和SIGA(M,TSP)所用的時間戳數據timestamped_data中。
d) 在收到D時,實體B按照如下步驟進行操作:
1) 用TTSA的公鑰驗證數字簽名timestamp_signature**TTSA;
2) 用A的公鑰驗證數字簽名SIGA(M, TSP)。
上述兩個步驟執行的先后順序無關,但這兩個驗證必須是成功的。
通過完成第4步的核查,實體B獲取如下證明:
? 消息M可能在收到TSP之前或者之后組裝。
? 數字簽名SIGA(M, TSP)在TSP中的時間戳表示的時間之后被生成。
? D在TSP中的時間戳表示的時間之后被組裝。
如果需要一個更為精確的SIGA(M, TSP)生成時間證明,第二個可信的時間戳是必要的,見5..4.2.3。
1.1.2.2.2 實體A向TTSA提供消息M的Hash值獲得TSP
實體A可以在向TTSA請求時間戳時,可以提供M的Hash值,提供數字簽名的生成時間證明,具體過程如圖4所示。用H表示生成的M的Hash值:

圖4 實體A向TTSA提供M的Hash值獲得TSP
a) 實體A在向TTSA的時間戳請求中發送H,即用戶提供信息由H和其它信息other_info組成。其中,other_info可能空。
b) TTSA向實體A回送一個TSP:
TSP由時間戳數據及其數字簽名組成。與5.4.2.2.1方案不同的是,用戶提供信息user_supplied_info中包括了消息M的Hash值H。
如果實體A和TTSA之間存在雙方協定,下列消息可以從傳送的TSP數據中去除:
1) user_supplied_info的任何部分信息可以被刪除,只要實體A已知該信息;
2) TTSA_supplied_info的任何部分信息可以被刪除,只要實體A已知該信息,或者能夠被實體A確定;
雖然這些信息可以從TSP傳輸信息中被刪除,但完整的user_supplied_info和TTSA_supplied_info要被包括在timestamped_data中,用于生成如下的簽名及其驗證:
timestamp_signature**TTSA= SIGTTSA(timestamped_data).
在收到從TTSA中發送的TSP時,實體A應該:a)檢查傳送的用戶信息是否正確;b)用TTSA的公鑰驗證timestamp_signature**TTSA;
e) 實體A簽名(M, TSP),組裝D,并將其發送到實體B:
D= M, TSP, SIGA(M, TSP)
其中,TSP在第2步中規定。
如果user_supplied_info中的任何一部分信息從來自TTSA的TSP中被刪除,那么整個user_supplied_info要在組建D時回填到TSP中,除非實體A和實體B存在雙方協定,使得B可以確定這些信息。一般情況下,D中傳輸的TSP中的下列信息可以被刪除:
1) H可以被刪除,因為它可以被實體B(重新)計算得到;
2) 任何在user_supplied_info中的other_info,只要能夠被B知道或者確定則可以被刪除;
但整個user_supplied_info應該包含在生成/驗證timestamp_signature**TTSA和SIGA(M,TSP)所用的timestamped_data中。
如果TTSA_supplied_info中的任何一部分信息從來自TTSA的TSP中被刪除,那么整個TTSA_supplied_info要在組建D時回填到TSP,除非實體A和實體B存在雙方協定,可以讓B能夠確定出這些信息。在這種情況下,如果實體B已知或者可以決定TTSA_supplied_info,那么它的任何部分信息可以從實體A傳輸的TSP數據中刪除。然而,整個TTSA_supplied_info應該包含在生成/驗證timestamp_signature**TTSA和SIGA(M,TSP)所用的timestamped_data中。
f) 在收到D后,B需完成以下內容:
1) 實體B計算H’=Hash(M),如果H是D的一部分,驗證H’=H,否則,將H’插入user_supplied_info,以支持驗證timestamp_signature**TTSA和SIGA(M, TSP);
2) 用TTSA的公開簽名驗證密鑰驗證timestamp_signatureTTSA;
3) 用A的公開簽名驗證密鑰驗證SIGA(M, TSP)。
上述步驟執行的先后順序無關,但這兩個驗證必須是成功的。
通過完成第4步的核查,實體B獲取如下證明:
? 在TTSA獲取的TSP中的時間戳表示的時間之前M被組裝,H被生成;
? 在TSP中的時間戳表示的時間之后M沒有被改動過;
? SIGA(M, TSP)在TSP中的時間戳表示的時間之后被生成;
? D在TSP中的時間戳表示的時間之后被組裝;
如果需要一個更為精確的SIGA(M, TSP)生成時間,第二個可信的時間戳是必要的,見5.4.2.3。
5.4.2.2.3 實體A向TTSA提供M的數字簽名值獲得TSP
實體A可以在向TTSA請求時間戳時,提供一個M的數字簽名,提供數字簽名適時性證明,具體過程如圖5所示。

圖5 實體A向TTSA提供M的數字簽名值獲得TSP
a) 實體A在一個時間戳請求中向TTSA發送SIGA(M),以及其他可能的信息,即:user_supplied_info *= SIGA(M), *other_info,other_info可能為空。
g) TTSA向實體A回送一個TSP:
TSP = timestamped_data, timestamp_signatureTTSA
其中:
user_supplied_info *= SIGA(M), *other_info.
timestamped_data = user_supplied_info, TTSA-supplied_info, timestamp.
timestamp_signatureTTSA = SIGTTSA(user_supplied_info, TTSA_supplied_info,timestamp).
如果實體A和TTSA之間存在雙方協定,下列消息可以從傳送的TSP數據中去除:
1) user_supplied_info中的任何部分信息可以被刪除,只要實體A已經該信息,然而,如果SIGA(M)從TSP中被刪除,它應該在TSP被送往實體B時回填到TSP中;
2) TTSA_supplied_info中的任何部分信息可以被刪除,只要實體A已知該信息或者能夠被實體A確定;
雖然這些信息可以從TSP傳輸信息中被去除,但完整的user_supplied_info和TTSA_supplied_info要被包括在timestamped_data中,用于生成如下的簽名及其驗證:
timestamp_signature**TTSA= SIGTTSA(timestamped_data).
在收到從TTSA中發送的TSP時,實體A應該:首先檢查傳送的user_supplied_info是否正確;其次用TTSA的公鑰驗證timestamp_signature**TTSA;
h) 實體A簽名(M, TSP),組裝D,并且將其發送到B:
D = M, *TSP, SIGA(M, *TSP)
TSP在第2步中定義。
如果user_supplied_info中的任何一部分信息從來自TTSA的TSP中被刪除,那么整個user_supplied_info要在組建D時回填到TSP中,除非實體A和實體B存在相互協定,被刪除的部分能夠被實體B知道或者重新生成。在存在部分信息刪除的情況下,整個user_supplied_info應該包含在生成/驗證timestamp_signature**TTSA和SIGA(M,TSP)所用的timestamped_data中。
如果TTSA_supplied_info中的任何一部分信息從來自TTSA的TSP中被刪除,那么整個TTSA_supplied_info要在組建D時回填到TSP中,除非實體A和實體B存在雙方協定,可以讓B能夠確定出這些信息。在這種情況下,如果實體B已知或者可以確定TTSA_supplied_info,那么它的任何部分信息可以從實體A傳輸的TSP數據中刪除。然而,整個TTSA_supplied_info應該包含在生成/驗證timestamp_signature**TTSA和SIGA(M,TSP)所用的timestamped_data中。
i) 實體B在收到D時,需要完成以下內容:
1) 用A的公鑰驗證SIGA(M),SIGA(M)通過D中的TSP得到;
2) 用TTSA的公鑰驗證timestamp_signature**TTSA;
3) 用實體A的公鑰驗證SIGA(M,TSP);
上述步驟執行的先后順序無關,但這些驗證必須是成功的。
通過完成第4步的核查,實體B獲取如下證明:
? M和SIGA(M),在TSP中的時間戳表示的時刻之前生成,并且SIGA(M)被包含在TTSA簽過名的timestamped_data中;
? 在TSP中的時間戳表示的時間之后M沒有被改動過;
? SIGA(M, TSP)在TSP中的時間戳表示的時間之后生成;
? D在TSP中的時間戳表示的時間之后組裝。
如果需要一個更為精確的SIGA(M, TSP)生成時間,第二個可信的時間戳是必要的,見5.4.2.3。
5.4.2.2.4 由實體B向TTSA提供M的數字簽名獲得TSP
實體B可以向TTSA提供其收到的A對消息M的數字簽名,提供數字簽名的生成時間證明,具體過程如6所示。

圖6 由實體B向TTSA提供M的數字簽名獲得TSP
a) 實體A簽名消息M,組裝D并將其發送到實體B:
D= M, SIGA(M)
實體B可以用實體A的公鑰,驗證SIGA(M),并且可以根據自己的需要,記錄從A處收到簽名的大致時間。
b) 實體B在一個時間戳請求中發送SIGA(M)(和其它可能的信息)給TTSA ,即user_supplied_info = SIGA(M), other_info,other_info可以為空。
c) TA返回一個TSP給實體B
TSP = timestamped_data, timestamp_signatureTTSA
其中:
user_supplied_info *= SIGA(M), *other_info.
timestamped_data *= *user_supplied_info, TTSA_supplied_info, timestamp.
timestamp_signatureTTSA = SIGTTSA(user_supplied_info, TTSA_supplied_info, timestamp)
如果B和TTSA之間存在一個雙方協定,則下列信息可以可以從向實體B傳送的TSP中刪除:
1) user_supplied_info中的任意部分信息可以被刪除,如果實體B已經該信息;
2) TTSA_supplied_info中的任意部分信息可以被刪除,只要實體B已知該信息或者能夠確定該信息;
雖然這些信息可以從TSP傳輸信息中被去除,但完整的user_supplied_info和TTSA_supplied_info要包含在生成/驗證 timestamp_signatureTTSA的所用的timestamped_data中。
d) 在收到TSP時,實體B需完成以下內容:
1) 檢查傳送的user_supplied_info是否正確;
2) 用TTSA的公鑰驗證timestamp_signature**TTSA;
3) 如果SIGA(M)沒有在被送往TTSA之前被驗證,用A的公鑰驗證。
上述步驟執行的先后順序無關,但這些驗證必須是成功的。
通過完成第4步的核查,實體B獲取如下證明:
? M和SIGA(M)在TSP中的時間戳表示的時刻之前生成;
? SIGA(M)包含于timestamped_data中,并且被TTSA簽名。
這些證據(即M, SIGA(M) ,TSP)可以被呈送給任何信任TTSA的第三方。
5.4.2.3 采用第二個TSP獲取更為精細的簽名生成時間證明
如果可以從TTSA獲得另外一個TSP,就可以獲取更精確的簽名生成時間,第二個TSP請求可以由實體A和實體B發出。如果第二個TSP請求盡可能接近實體A的第一個時間戳數據包的簽名生成時間,證明的精度將會更大。
在下列的方案中,最初的步驟由5.4.2.2.1-5.4.2.2.3規定,并且完成了如下信息表示的變換:
1) user_supplied_info變成user_supplied_info**1;
2) 在user_supplied_info1之內的other_info變成other_info**1;
3) TTSA_supplied_info變成TTSA_supplied_info**1;
4) timestamp變成timestamp**1;
5) TTSA變成TTSA1;
6) TSP變成TSP1。
下面的方案描述中引入了兩個TTSA:TTSA1和TTSA2。TTSA2可能與TTSA1是同一個TTSA。
5.4.2.3.1 由實體A請求第二個TSP
兩個TSP都可以由實體A獲得。TTSAs提供的TSP必須同時被實體A和實體B信任,并且被任何需要信任簽名生成時間的第三方信任。
該方案如圖7所示,第一個TSP由5.4.2.2.1,5.4.2.2.2或者5.4.2.2.3規定的程序獲得,之后實體A請求第二個TSP。前兩個步驟同5.4.2.2.1-5.4.2.2.3的規定相同,其余步驟如下。

圖7 由實體A請求第二個時間戳
c) 實體A在第二個TSP請求中,生成簽名:SIGA(M, TSP1)(可能包括其它的信息),并將其發送到TTSA2,即user_supplied_info**2= SIGA(M,TSP1), other_info**2,other_info**2可能為空。
TSP1的定義與在5.4.2.2.1,5.4.2.2.2和5.4.2.2.3中的TSP的定義相同。
j) TTSA2向實體A返回TSP2
TSP2 = timestamped_data2, timestamp_signatureTTSA2
其中:
user_supplied_info**2=SIGA(M,TSP1),other_info**2
timestamped_data**2=user_supplied_info**2,TTSA_supplied_info**2,timestamp**2
timestamp_signature**TTSA2=SIGTTSA2(user_supplied_info**2,TTSA_supplied_info**2,timestamp**2)
如果在實體A和TTSA2之間存在雙方協議,下列信息可以從TTSA2傳送的TSP2中被刪除:
1) user_supplied_info**2的任何一部分信息可以被刪除,只要實體A知道這些信息。然而,如果SIGA(M, TSP1)從TSP2數據中被刪除,A必須在向實體B發送TSP2時,回填給TSP2中;
2) TTSA_supplied_info**2的任何信息可以被刪除,只要該信息被實體A知道或者能夠被實體A確定;
如果上述部分信息可以從傳輸的TSP2中刪除,那么完整的user_supplied_info**2和TTSA_supplied_info**2必須包含在生成和驗證timestamp_signature**TTSA2 = SIGTTSA2 (timestamped_data**2)所使用的timestamped_data**2數據中。
在從TTSA2收到TSP2后,實體A應該:a)檢查user_supplied_info**2的傳輸部分是否正確;b)用TTSA2的公共驗證密鑰驗證timestamp_signatureTTSA2;
k) 實體A裝配D,并將其發送到實體B:
D=M,TSP1,TSP2
其中,TSP1同5.4.2.2部分的定義,TSP2在第4部分確定。注意,如果SIGA(M, *TSP1)沒有包含于從TTSA2傳出的timestamped_data*2中,它要包含于用于組裝D的TSP2中。
如果部分信息從來自TTSAs的TSPs中被刪除,那么完整的user_supplied_info**1和TTSA_supplied_info**1,要被添加進TSP1,并且完整的user_supplied_info**2和TTSA_supplied_info**2,要被添加進TSP2,除非實體A和實體B之間存在相互協定,可以確定出這些信息。下列信息可以從D中的TSP1和TSP2中去除:
? TSP1中的user_supplied_info**1的任意部分,如果實體B知道或者能夠被實體B確定。
? TSP2中的user_supplied_info**2的任意部分,如果實體B知道或者能夠被實體B確定。
? TSP1中的TTSA_supplied_info**1的任意部分,如果實體B知道或者能夠被實體B確定。
? TSP2中的TTSA_supplied_info**2的任意部分,如果實體B知道或者能夠被實體B確定。
任何被從傳輸的數據中刪除的信息要在生成和驗證如下等式時,被包含進合適的timestamped_data (timestamped_dtata**1和/或timestamped_data**2) 域,以能生成/驗證如下簽名:
? timestamp_signatureTTSA1 = SIGTTSA1 (timestamped_data**1);
? timestamp_signatureTTSA2 ~= SIGTTSA2~ (timestamped_data**2);
? SIGA(M, TSP1)。
l) 在收到D后,實體B需完成以下內容:
? 如果5.4.2.2.2中的方案被使用,實體B計算H^‘^=Hash(M)。如果H在傳輸的TSP1中被收到,實體B驗證H^‘^=H;否則實體B在驗證timestamp_signatureTTSA1和SIGA(M, TSP1)時,直接設H^‘^=H;
? 用TTSA1的公鑰驗證timestamp_signature**TTSA1;
? 用A的公鑰驗證SIGA(M, TSP1);
? 用TTSA2的公鑰驗證timestamp_signature**TTSA2。
上述步驟執行的先后順序無關,但這些驗證必須是成功的。
通過第6步的驗證,在5.4.2.2節方案獲取的簽名生成時間證明的基礎上,還可以獲得額外的如下證明:
? SIGA(M, TSP1)在timestamp1和timestamp2表示的時刻之間被生成,并且包括在TTSA2進行簽名的timestamped_data2中。
? 在時間戳timestamp2表示的時間后數據包D被組裝。
1.1.2.3.2 由實體B請求第二個TSP
實體B在收到實體A的數據包D,并驗證相關的簽名(見5.4.2.2.1-5.4.2.2.3中的第4部分)之后,發起第二個TSP請求。提供第一個TSP的TTSA(TTSA1)必須被實體A和實體B所信任,但是提供第二個TSP的TTSA(TTSA2)可以只需要被實體B所信任。通常,任何一方,只要依賴于SIGA(M, TSP1)的生成時刻,就必須同時信任兩個TTSAs。
圖8給出了實體B在收到D后,請求第二個TSP的情形。前四個步驟如5.4.2.2.1-5.4.2.2.3所描述,后續步驟具體過程描述如下:


圖8 由實體B請求第二個時間戳
e) 實體B從D中獲得SIGA(M,TSP1)(可能有其它信息),并將其發送到TTSA2,請求第二個TSP。即:user_supplied_info**2= SIGA(M, TSP1), other_info**2,other_info**2可能為空。
m) TTSA2返回TSP2給實體B:
TSP2= timestamped_data**2, timestamp_signature**TTSA2
其中:
user_supplied_info2= *SIGA (M, TSP1), *other_info2.
timestamped_data2 ~= user_supplied_info2, TTSA_supplied_info2, timestamp2~
timestamp_signatureTTSA2 = SIGTTSA2(user_supplied_info2, TTSA_supplied_info2, timestamp2).
如果實體B和TTSA2之間存在雙方協議,下列的信息可以被從TTSA2向實體B回傳的TSP2中刪除:
1) user_supplied_info2中的任意部分,只要該部分被實體B知道;
2) TTSA_supplied_info2中的任意部分,只要該部分被實體B知道,或者能夠被實體B確定;
如果上述信息可以被從傳輸的TSP2中刪除,但是在生成和驗證簽名timestamp_signature**TTSA2 = SIGTTSA2 (timestamped_data**2)時,完整的user_supplied_info**2和TTSA_supplied_info**2信息還是要被包含在timestamped_data**2中。
n) 實體B隨后,1)驗證user_supplied_info2的傳輸部分是正確的;2)用TTSA2的公鑰驗證timestamp_signatureTTSA2
通過第7步,在5.4.2.2節方案獲取的簽名生成時間證明的基礎上,還可以獲得額外的如下證明:
? 簽名SIGA(M, TSP1)在時間戳timestamp**~1 ~和timestamp**2標示的時刻之間生成。
? 證據(即M, TSP1, SIGA(M, TSP1) 和 TSP2)可以被提供給任何相信TTSAs的第三方。
5.4.3 用驗證方提供的數據獲得簽名生成時間證明
除了使用可信時間戳服務,實體A還可以采用如下方法,向驗證者(實體B)提供簽名生成時間的證據:
a) 將驗證者提供的新鮮值和其他數據聯合;
b) 對上述聯合消息進行簽名;
在下面的方案中利用nonce值來幫助獲取簽名的生成時間證明。該nonce值是一個隨時間變化的值,被表示成一個不能忽略時間變化的字符串。例如,nonce值可以由如下幾個部分組成:
? 使用經認定的隨機比特發生器(RBG)生成一個隨機值作為nonce值。對用于獲取nonce值的RBG的安全強度要等于或大于有關數字簽名的過程安全強度。RBG的安全強度要在隨機值生成之前確定。RBG的輸出長度要等于或大于有關數字簽名的過程安全強度要求。(比如,如果數字簽名過程中的安全強度為112位,RBG的輸出的長度應至少112位)。
? 一個有足夠精度的時間源,表示不同的時間。
? 一個單調遞增的序列數。
如果只是一個時間源和一個單調遞增序列被用于生成nonce值,而沒有一個隨機數,則序列號要只能在時間源變化時被重新設定(例如,時間源可顯示日期,但不顯示時間,所以要附加一個序列號,并且一天內不重復)。
當用一個nonce值時,一般要采用random nonce。
在下列的方案中,設定:Nonce是一個驗證方提供的nonce(即:由實體B提供)。D是由實體A向實體B傳送的數據,其中包括消息M和各種時間戳和/或數字簽名。讓SIGA()表示由實體A用一個認定的哈希函數和一個認定的數字簽名算法生成的一個數字簽名。SIGA()由實體A的公鑰進行驗證。討論假定所有的實體A和B都成功地驗證了所有的數字簽名。
以下是對各個方案的描述。每個方案附一個圖來描述方案中的信息流動。每一個消息的數字表示文字描述中的步驟。步驟內部的消息流動并不表示在圖中。
5.2.3.1 基本方案
方案的基本流程描述如圖9所示。

圖9 用驗證方提供的數據獲得簽名的生成時間證明的基本方案
a) 實體B發送一個新生成的Nonce給實體A;
o) 實體A簽名(M, Nonce),組裝消息D并將其發送給實體B,其中:
D *= *M, SIGA(M, Nonce).
p) 在收到消息D后,實體B用實體A的公鑰驗證SIGA(M, Nonce).
由第3步的驗證,實體B可以獲得證明如下:
? M可能在從實體B收到Nonce值后或者前組裝;
? SIGA(M, Nonce)在實體A收到Nonce值后生成;
? D在實體A收到Nonce值后被組裝。
5.2.3.2 用TSP獲得更高的證明精度
5.2.3.2.1 實體A請求一個時間戳
實體A在發送一個消息給實體B時,請求一個TSP。提供TSP的TTSA必須被通信雙方所信任。
圖10描述了方案流程。
方案描述如下:
a) 實體B發送一個新生成的Nonce值給實體A;
b) 實體A生成SIGA(M, Nonce)(可能有其它信息)并將其在一個時間戳請求中發送給TTSA。即:user_supplied_info = SIGA(M, Nonce),other_info。other_info可以為空。
c) TTSA返回一個TSP實體A
TSP = timestamped_data, timestamp_signature**TTSA
其中:
user_supplied_info = *SIGA(M, *Nonce), other_info.
timestamped_data *= *user_supplied_info, TTSA_supplied_info, timestamp.
timestamp_signature**TTSA= SIGTTSA(user_supplied_info, TTSA_supplied_info, timestamp).
如果實體A和TTSA之間存在相互協定,以下的信息可以從向TTSA傳輸的TSP數據中刪除。
1) 任何一部分user_supplied_info *可以被刪除,只要他被實體A知道。然而,如果SIGA(M, *Nonce)被從TSP刪除,它必須重新添加到向實體B發送的TSP中。
2) 任何*TTSA_supplied_info *的部分信息可以被刪除,如果這些信息被實體A知道或者能夠被實體B確定。
即使這些信息可以被從user_supplied_info和TTSA_supplied_info中刪除,但是完整的user_supplied_info和TTSA_supplied_info信息要在簽名生成/驗證時被包括進timestamped_data中。
在從TTSA收到TSP時,實體A要a)確認user_supplied_info的傳輸部分是否正確;b)利用TTSA的公鑰驗證timestamp_signatureTTSA。

圖10 實體A請求一個時間戳
d) 實體A組裝數據包D并把它發送給實體B:
D = M, TSP
其中:TSP在第3步中被確定:
如果user_supplied_info的部分信息被從來自TTSA的TSP中除去,完整的user_supplied_info的信息要被加入組裝D的TSP中。除非實體A和實體B之間存在相互協定,使得B能夠知道或者確定這些信息。在這種情況下,任何user_supplied_info的部分信息可以被從傳送到實體B的TSP中去除,如果這些信息能夠被實體B知道或者確定。然而,完整的user_supplied_info信息要被包括在簽名timestamp_signature**TTSA和SIGA(M, Nonce) 生成和驗證依賴的timestamped_data中。
如果TTSA_supplied_info的部分信息被從來自TTSA的TSP中除去,完整的TTSA_supplied_info的信息要被加入組裝D的TSP中。任何TTSA_supplied_info的部分信息可以被從傳送到實體B的TSP中去除,如果這些信息能夠被實體B知道或者確定。然而,完整的TTSA_supplied_info信息要被包括在簽名timestamp_signature**TTSA和 SIGA(M, Nonce) 生成和驗證依賴的timestamped_data中。
e) 在收到D后,實體B作如下的事情:
1) 用實體A的公鑰驗證SIGA(M,* Nonce*)。
2) 用TTSA的公鑰驗證timestamp_signature**TTSA。
驗證的次序無關緊要,但所有的驗證必須是成功的。
除了如在5.4.3.2中描述的證明外,第5步的驗證還可以獲得如下證明:
? SIGA(M, Nonce)在* Nonce*值和TSP表示的時刻之間生成。
5.2.3.2.2 由實體B請求一個時間戳
實體B可以在收到實體A 發送的消息應答*D *后,向TTSA提出TSP請求。
圖11描述了方案流程。該方案類似于5.4.2.2.4中的方案,唯一的不同之處為從實體B送往實體A的Nonce值。實體B提供的Nonce值可能包括一個時間源(雙方實體A和B都信任),在這種情況下,Nonce值標示的時刻和TSP標示的時刻將建立一個時間區間,在此區間內該簽名生成。

圖11 實體B請求一個時間戳
前三個步驟如5.4.3.2.1節中描述。在實體B驗證SIGA(M, Nonce)之后的流程描述如下:
a) 實體B發送SIGA(M, Nonce)和其他信息給TTSA,發起一個時間戳請求,即:
user_supplied_info = SIGA(M), other_info。other_info可能為空。
b) TTSA返回TSP給實體B:
TSP = timestamped_data,* timestamp_signature*TTSA
其中:
user_supplied_info = SIGA(M, Nonce), other_info.
timestamped_data= user_supplied_info, TTSA_supplied_info, timestamp.
timestamp_signature**TTSA = SIGTTSA(user_supplied_info, TTSA_supplied_info, timestamp).
如果在實體A和實體B之間存在協定,則下列的信息可以從TTSA發送到實體B的TSP中刪除:
1) 任何*user_supplied_info *的部分信息,如果它被實體B知道;
2) 任何*TTSA_supplied_info *的部分信息,當這些信息可以被實體B知道或者確定;
即使上述信息可以被從傳輸的TSP數據中刪除,完整的user_supplied_info和TTSA_supplied_info應該包括在如下的簽名timestamp_signature**TTSA=SIGTTSA(timestamped_data)中的timestamped_data中。
c) 實體B:
1) 檢查傳輸的user_supplied_info部分信息是否正確;
2) 用TTSA的公鑰驗證timestamp_signature**TTSA。
除了5.4.3.2.1節中描述的簽名生成時間證據外,實體B還可以通過第6步的驗證獲得如下信息:
? SIGA(M,Nonce)在timestamp_signatureTTSA的時間戳表示的時刻之前生成。
GB/T 36644—2018 信息安全技術 數字簽名應用安全證明獲取方法
推薦文章: