A.1 SM4-XCBC-PRF-128
SM4-XCBC-PRF-128算法是一個帶有強制“10*序列填充”的基本CBC-MAC的變體,可保障任意長度信息安全。
加密操作必須使用一個128位密鑰的SM4算法完成。本標準采用的SM4算法應符合國家對密碼管理的相關規定。
給定128位密鑰K,SM4-XCBC-PRF-128按以下方式計算,信息M由n塊組成M[1] … M[n],M[1] … M[n-1]塊長度均為128比特,M[n]塊長度在1-128比特之間:
按以下公式從128比特密鑰K生成3個128比特密鑰(K1,K2和K3):
K1 = (01010101010101010101010101010101) 用密鑰K加密
K2 = (02020202020202020202020202020202) 用密鑰K加密
K3 = (03030303030303030303030303030303) 用密鑰K加密
定義E[0] = 0x00000000000000000000000000000000
對于每一個塊M[i],當i = 1 … n-1時:
M[i] XOR E[i-1],之后把結果用密鑰K1加密,產生E[i]。
對于塊M[n]:
如果M[n]的塊大小是128比特:
M[n]XOR E[n-1] XOR 密鑰K2,
之后把結果用密鑰K1加密,產生E[n]。
如果M[n]塊的大小小于128比特:
M[n]不足的部分交替填充比特“1”之后是比特“0”(可能無)直到M[n]塊補齊到128位(這就是“10*序列填充”)。
M[n]XOR E[n-1] XOR 密鑰K3,之后把結果用密鑰K1加密,產生E[n]。
輸出結果是最后的128位塊E[n]。
GB/T 33746.2—2017 近場通信(NFC)安全技術要求 第2部分:安全機制要求
推薦文章: