7.4 簽名生成進程
7.4.1 進程
圖1描述了簽名生成進程,包括以下處理:
a) 生成隨機數和預簽名;
b) 拆分消息;
c) 生成數據輸入;
d) 計算簽名;
e) 組成已簽消息。
注:圖1中顯示的域參數只是做為示例使用,每個方案可能要求與方案相關的域參數。
7.4.2 生成隨機數和預簽名
在簽名計算之前,簽名實體必須有一個可用的,新鮮的,秘密的隨機數。這個隨機數是一個整數k,(1 ≤ k≤ n – 1)。簽名方案的實現者必須確保滿足以下要求:
同一個隨機數用于兩個不同消息的簽名的可能性是非常小的;
已經使用過的隨機數值不會被泄露,一旦使用過,這些隨機數會被銷毀。
首先,通過隨機數發生器生成一個隨機數,整數k。然后對隨機數進行運算生成預簽名Π(八位位組串)。在任何隨機數簽名方案里,簽名生成進程中,預簽名都是一個中間數據項。預簽名是一個公開數據項,隨機數的值只是在此次簽名生成進程里有效。
注1:使用后的隨機數,如果后續泄露,就會給私鑰帶來威脅。使用過的隨機數不會再被簽名方或驗證方使用,所以必須安全地清除。如果同一個隨機數用于兩個不同的消息簽名,或者簽名使用的隨機數被泄露,那么從簽名中恢復私鑰是可能的。
注2:通過隨機數發生器生成隨機數以及預簽名的計算可以離線進行。在上述情況下,隨機數必須安全存儲以便簽名生成進程將來使用。
7.4.3 拆分消息
消息M被拆分成消息的可恢復部分Mrec和不可恢復部分Mclr,它們的八位位組數分別使用Lrec和Lclr表示。
7.4.4 生成數據輸入
數據輸入函數的輸入是帶有填充冗余的可恢復消息Mrec,或者是帶有自然冗余的可恢復消息Mrec。輸入可選地包括不可恢復部分Mclr,長度Lrec和Lclr。在使用填充冗余的情況下,數據輸入包括雜湊權標。雜湊權標由雜湊碼自己或者與鏈接在雜湊碼后面的雜湊函數標識符一起組成,雜湊碼通過雜湊(可恢復部分)消息計算得出。雜湊權標是否包括雜湊函數標識符是由域參數控制的。數據輸入函數的輸出是八位位組串d。
注1:數據輸入的選擇可以由每個應用或者簽名方案決定。
注2:使用填充冗余生成數據輸入的方法參考附錄D。
7.4.5 計算簽名
這個方案生成的簽名有兩部分,分別是r和s。第一部分八位位組串r,是對預簽名Π和數據輸入d(及其它的可選參數)計算后的結果,d是依賴消息的一個八位位組串。第二部分整數s(0 < s< n),是對第一部分r,隨機數k和私有簽名密鑰x**A(及其它的可選參數)計算后的結果。
7.4.6 組成已簽消息
知曉消息的可恢復部分的長度對于成功地開啟和驗證已簽消息是非常必要的。通過包括在已簽消息和/或從數據輸入d中獲取的手段,域參數必須給出這個信息。
已簽消息包括以下部分:
消息的不可恢復部分Mclr;
簽名的第一部分r;
簽名的第二部分s;
(可選的)消息的可恢復部分的長度Lrec。
GB/T 15851.3—2018 信息技術 安全技術 帶消息恢復的數字簽名方案 第3部分:基于離散對數的機制
推薦文章: