6.1 口令生成方式
6.1.1 計算時間因子
T = T0 / Tc
T是參與運算的時間因子,是一個8字節整數。T0是以UTC時間或用戶選擇的時間標準為計量標準的一個8字節整數。Tc是以秒為單位的口令變化周期,最大值為60。
6.1.2 組裝輸入序列
ID = {T ||C || Q }
ID是雜湊或分組算法的輸入序列。T是6.1.1的計算結果。C是參與運算的事件因子,是一個4字節整數。Q是鑒別雙方通過協商輸入的挑戰因子或其它類型需要參與運算的因子,使用ASCII碼表示,最小長度為4字節。
ID最小長度為128比特,至少需要包含T、C的其中一個參數,Q為可選參數,并按照T ||C || Q的順序進行數據組裝。未包含的參數位置,由下一個參數進行補充。如ID由T、Q組成,則數據組裝方式為T || Q。如ID由C、Q組成,則數據組裝方式為C || Q。如組成ID的數據不足128比特,ID的數據末端填零至128比特。
6.1.3 計算一次性中間值
S = F(K , ID)
K是長度不小于128比特的種子密鑰,只有鑒別雙方持有;F()是算法函數,使用分組算法SM4或者雜湊算法SM3,其中使用SM4時S的輸出長度為128比特,使用SM3時S的輸出長度為256比特。
6.1.4 截位計算
OD = Truncate(S)
輸入為6.1.3的輸出。Truncate()是截位函數,OD是其輸出結果,長度為32比特。
選用SM3作為F運算時,定義S1,S2,S3,S4,S5,S6,S7,S8為8個4字節整數,通過如下方法賦值:
S = S1 || S2 || S3 || S4 || S5 || S6 || S7 || S8
OD= (S1 + S2 + S3 +S4 +S5 +S6 + S7 +S8) % (2^32)
使用SM4作為F運算時,定義S1,S2,S3,S4為4個4字節整數,通過如下方法賦值:
S = S1 ||S2 || S3 || S4
OD= (S1 + S2 + S3 +S4) % (2^32)
6.1.5 計算動態口令
P = OD % (10^N)
N是令牌或其它終端顯示口令的位數,N不小于6。P是最終顯示的動態口令。
GB/T 38556—2020信息安全技術動態口令密碼應用技術規范
推薦文章: