SM9學習筆記與圖解(合集)
1. 整體架構 整體架構分三層(如圖1):
l 介面層:提供對外介面以完成SM9功能。主要分為:
n 系統介面:主要完成KGC參與的工作。
n 功能介面:主要完成KGC不參與的工作。
l SM9功能層:提供SM9的功能模組。主要分成:
n 主金鑰生成:KGC公私鑰的生成。
n 使用者金鑰生成:生成使用者私鑰,使用者公鑰任意設定。
n 加密和解密。
n 簽名和驗籤。
n 金鑰協商。
l 底層模組:為完成SM9功能所需的各種模組。
n 核心模組:大整數運算、橢圓曲線運算和配對運算是其中最重要也是最核心的模組,將是本次開發的難點和重點。特別是配對模組,是SM9的特色。
n 金鑰匯出函式KDF、H1、H2、SM3為密碼輔助函式。
n 隨機數生成器PRN。
圖1 整體架構
A.1. 系統基本功能 A.1.1 主金鑰生成 主金鑰生成
數字簽名
金鑰交換
加解密/封裝
主私鑰
s∈[1, N−1]
s∈[1, N−1]
s∈[1, N−1]
主私鑰長
L
L
L
主公鑰
Ppub=[s]P2∈G2
Ppub=[s]P1∈G1
Ppub=[s]P1∈G1
主公鑰長
4L(E(Fq2)點)
2L(E(Fq)點)
2L(E(Fq)點)
私鑰生成函式識別符
hid,一個位元組
hid,一個位元組
hid,一個位元組
呼叫庫
EC- E(Fq2)
EC- E(Fq)
EC- E(Fq)
異
同
同
A.1.2 使用者公私鑰生成 使用者公私鑰生成
數字簽名
金鑰交換
加解密/封裝
主私鑰
s∈[1, N−1]
s∈[1, N−1]
s∈[1, N−1]
主私鑰長
L
L
L
使用者公鑰
使用者標識IDA
使用者標識IDA
使用者標識IDA
使用者公鑰長
任意長度
任意長度
任意長度
使用者私鑰
dA∈G1,
t1=H1(IDA||hid, N)+s mod N,
t2=s×t1-1 mod N
dA=[t2]P1
dA∈G2,
t1=H1(IDA||hid, N)+s mod N,
t2=s×t1-1 mod N
dA=[t2]P2
dA∈G2,
t1=H1(IDA||hid, N)+s mod N,
t2=s×t1-1 mod N
dA=[t2]P2
使用者私鑰長
2L(E(Fq)點)
4L(E(Fq2)點)
4L(E(Fq2)點)
異
同
同
A.2 第2部分——數字簽名演算法 A.2.1 簽名(User A)
A.2.2 驗籤(User B)
A.2.3 原理 關鍵是考慮簽名時w的生成和驗籤時w的生成。
簽名時:
驗籤時
由上面推導知,簽名和驗籤計算的w相等,所以由w計算出來的h相等。
A.3 第3部分——金鑰交換協議 A.3.1 金鑰交換(User A & User B)
A.3.2 原理 首先,使用者A(B)私鑰的生成方式為
從以上推導可知,兩個使用者生成的g1,g2,g3相等,所以KDF計算出來的金鑰相等。
可選步驟中的Hash比較,原理很簡單。
A.4 第4部分——金鑰封裝和加解密 A.4.1 金鑰封裝(User A) K是使用者A的生成金鑰,C是封裝資訊,用於對方解封得到相同的金鑰K。
A.4.2 金鑰解封(User B)
A.4.3 金鑰封裝原理
從以上推導可知,雙方計算出來的w相等,C是一樣的,所以KDF計算值相等
A.4.4 加密(User A)
流加密
分組加密
klen
k1長度+k2長度
k1長度+k2長度
k1長度
M長度
對稱密碼演算法的金鑰長度
k2長度
未定義,測試向量中為256
未定義,測試向量中為256
C2
C2=K1⊕M
C2=Enc(K1, M)
A.4.5 解密(User B)
流加密
分組加密
klen
k1長度+k2長度
k1長度+k2長度
k1長度
C2長度
對稱密碼演算法的金鑰長度
k2長度
未定義,測試向量中為256
未定義,測試向量中為256
C2
M =K1⊕C2
M=Enc(K1, C2)
A.4.6 加解密原理 同金鑰封裝原理
A.4.6 加解密原理 同金鑰封裝原理