1. 程式人生 > >SM9學習筆記與圖解(合集)

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 加解密原理 同金鑰封裝原理