• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 签名验签介绍及算法规格
2
3
4当需要判断接收的数据是否被篡改、数据是否为指定对象发送的数据时,可以使用签名验签操作。
5
6
7接下来将说明系统目前支持的算法及其对应的规格。
8
9
10## RSA
11
12算法库框架目前提供了两种RSA签名验签的填充模式:
13
14- [PKCS1](#填充模式为pkcs1):即RFC3447规范中的RSAES-PKCS1-V1_5模式,对应OpenSSL中的RSA_PKCS1_PADDING。
15
16  使用该模式时需要设置摘要(md),摘要算法输出的长度需要小于RSA钥模(即RSA模数n的字节长度)。
17
18- [PSS](#填充模式为pss): 即RFC3447规范中的RSASSA-PSS模式,对应OpenSSL中的RSA_PKCS1_PSS_PADDING。
19
20  使用该模式时需要设置两个摘要(md和mgf1_md),且md和mgf1_md长度之和需要小于RSA的钥模。
21
22  此模式还可额外设置盐长度saltLen,并用于获取PSS的相关参数。(单位:字节)
23
24  | PSS的相关参数 | 说明 |
25  | -------- | -------- |
26  | md | 摘要算法。 |
27  | mgf | 掩码生成算法,目前仅支持MGF1。 |
28  | mgf1_md | MGF1算法中使用的摘要算法。 |
29  | saltLen | 盐长度。(单位:字节) |
30  | trailer_field | 用于编码操作的整数,只支持为1。 |
31
32
33### 填充模式为PKCS1
34
35以字符串参数完成RSA签名验签,具体的“字符串参数”由“非对称密钥类型”、“填充模式 PKCS1”和“摘要”使用符号“|”拼接而成,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。
36
37如表所示,各取值范围(即[]中的内容)中,只能选取一项完成字符串拼接。举例说明,当需要非对称密钥类型为RSA512、填充模式为PKCS1、摘要算法为MD5的密钥时,其字符串参数为"RSA512|PKCS1|MD5"。
38
39> **说明:**
40> RSA签名验签时,摘要算法输出的长度,需要小于RSA的钥模。如RSA密钥为512位时,不支持SHA512。
41
42| 非对称密钥类型 | 填充模式 | 摘要算法 | API版本 |
43| -------- | -------- | -------- | -------- |
44| RSA512 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256] | 9+ |
45| RSA768 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
46| RSA1024 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
47| RSA2048 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
48| RSA3072 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
49| RSA4096 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
50| RSA8192 | PKCS1 | [MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
51| RSA | PKCS1 | 符合长度要求的摘要算法 | 10+ |
52
53如表中最后一行所示,为了兼容由密钥参数生成的密钥,RSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
54
55
56### 填充模式为PSS
57
58以字符串参数完成RSA签名验签,具体的“字符串参数”由“非对称密钥类型”、“填充模式 PSS”、“摘要”和“掩码摘要”使用符号“|”拼接而成,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。
59
60如表所示,各取值范围(即[]中的内容)中,只能选取一项完成字符串拼接。举例说明,当需要非对称密钥类型为RSA2048、填充模式为PSS、摘要算法为SHA256、掩码摘要为MGF1_SHA256的密钥时,其字符串参数为"RSA2048|PSS|SHA256|MGF1_SHA256"。
61
62> **说明:**
63> RSA签名验签时,对于PSS模式,md和mgf1_md长度之和需要小于RSA的钥模。如RSA密钥为512位时,无法支持md和mgf1_md同时为SHA256。
64
65| 非对称密钥类型 | 填充模式 | 摘要 | 掩码摘要 | API版本 |
66| -------- | -------- | -------- | -------- | -------- |
67| RSA512 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256] | 9+ |
68| RSA512 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256] | 9+ |
69| RSA512 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256] | 9+ |
70| RSA512 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224] | 9+ |
71| RSA768 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
72| RSA768 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
73| RSA768 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
74| RSA768 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384] | 9+ |
75| RSA768 | PSS | SHA384 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256] | 9+ |
76| RSA768 | PSS | SHA512 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224] | 9+ |
77| RSA1024 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
78| RSA1024 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
79| RSA1024 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
80| RSA1024 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
81| RSA1024 | PSS | SHA384 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
82| RSA1024 | PSS | SHA512 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384] | 9+ |
83| RSA2048 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
84| RSA2048 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
85| RSA2048 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
86| RSA2048 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
87| RSA2048 | PSS | SHA384 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
88| RSA2048 | PSS | SHA512 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
89| RSA3072 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
90| RSA3072 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
91| RSA3072 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
92| RSA3072 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
93| RSA3072 | PSS | SHA384 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
94| RSA3072 | PSS | SHA512 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
95| RSA4096 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
96| RSA4096 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
97| RSA4096 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
98| RSA4096 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
99| RSA4096 | PSS | SHA384 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
100| RSA4096 | PSS | SHA512 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
101| RSA8192 | PSS | MD5 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
102| RSA8192 | PSS | SHA1 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
103| RSA8192 | PSS | SHA224 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
104| RSA8192 | PSS | SHA256 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
105| RSA8192 | PSS | SHA384 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
106| RSA8192 | PSS | SHA512 | [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512] | 9+ |
107| RSA | PSS | 符合长度要求的摘要算法 | MGF1_符合长度要求的摘要算法 | 10+ |
108
109如表中最后一行所示,为了兼容由密钥参数生成的密钥,RSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
110
111
112### 获取/设置PSS填充模式的参数
113
114当前支持RSA使用PSS填充模式时,获取、设置相关参数,“√”表示支持对获取或设置该参数。
115
116| PSS参数 | 枚举值 | 获取 | 设置 |
117| -------- | -------- | -------- | -------- |
118| md | PSS_MD_NAME_STR | √ | - |
119| mgf | PSS_MGF_NAME_STR | √ | - |
120| mgf1_md | PSS_MGF1_MD_STR | √ | - |
121| saltLen | PSS_SALT_LEN_NUM | √ | √ |
122| trailer_field | PSS_TRAILER_FIELD_NUM | √ | - |
123
124
125## ECDSA
126
127ECDSA(Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法)是基于椭圆曲线密码(ECC)的数字签名算法(DSA)。相比DLP(Discrete logarithm Problem,普通的离散对数问题)和IFP(integer factorization problem,大数分解问题),椭圆曲线密码的单位比特强度要高于其他公钥体制。
128
129算法库框架提供了多种椭圆曲线及摘要算法组合的ECDSA签名验签能力。
130
131以字符串参数完成ECDSA签名验签,具体的“字符串参数”由“非对称密钥类型”和“摘要”使用符号“|”拼接而成,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。
132
133如表所示,各取值范围(即[]中的内容)中,只能选取一项完成字符串拼接。举例说明,当需要非对称密钥类型为ECC224、摘要算法为SHA256的密钥时,其字符串参数为"ECC224|SHA256"。
134
135| 非对称密钥类型 | 摘要 | API版本 |
136| -------- | -------- | -------- |
137| ECC224 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
138| ECC256 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
139| ECC384 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
140| ECC521 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 9+ |
141| ECC_BrainPoolP160r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
142| ECC_BrainPoolP160t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
143| ECC_BrainPoolP192r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
144| ECC_BrainPoolP192t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
145| ECC_BrainPoolP224r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
146| ECC_BrainPoolP224t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
147| ECC_BrainPoolP256r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
148| ECC_BrainPoolP256t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
149| ECC_BrainPoolP320r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
150| ECC_BrainPoolP320t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
151| ECC_BrainPoolP384r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
152| ECC_BrainPoolP384t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
153| ECC_BrainPoolP512r1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
154| ECC_BrainPoolP512t1 | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 11+ |
155| ECC | [SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 10+ |
156
157如表中最后一行所示,为了兼容由密钥参数生成的密钥,ECDSA签名验签参数输入密钥类型时支持不指定长度和曲线,签名验签运算取决于实际输入的密钥。
158
159
160## DSA
161
162DSA(Digital Signature Algorithm,数字签名算法)的安全性基于整数有限域离散对数问题的困难性,具有较好的兼容性和适用性。
163
164以字符串参数完成DSA签名验签,具体的“字符串参数”由“非对称密钥类型”和“摘要”使用符号“|”拼接而成,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。
165
166如表所示,各取值范围(即[]中的内容)中,只能选取一项完成字符串拼接。举例说明,当需要非对称密钥类型为DSA1024、摘要算法为SHA256的密钥时,其字符串参数为"DSA1024|SHA256"。
167
168| 非对称密钥类型 | 摘要 | API版本 |
169| -------- | -------- | -------- |
170| DSA1024 | [NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 10+ |
171| DSA2048 | [NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 10+ |
172| DSA3072 | [NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 10+ |
173| DSA | [NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512] | 10+ |
174
175如表中最后一行所示,为了兼容由密钥参数生成的密钥,DSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
176
177
178## SM2
179
180SM2数字签名算法,是基于椭圆曲线的签名验签算法。
181
182以字符串参数完成SM2签名验签,具体的“字符串参数”由“非对称密钥类型”和“摘要”使用符号“|”拼接而成,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。
183
184当前SM2签名只支持SM3摘要。
185
186| 非对称密钥类型 | 摘要 | 字符串参数 | API版本 |
187| -------- | -------- | -------- | -------- |
188| SM2_256 | SM3 | SM2_256\|SM3 | 10+ |
189| SM2 | SM3 | SM2\|SM3 | 10+ |
190
191如表中最后一行所示,为了兼容由密钥参数生成的密钥,SM2签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
192
193
194## Ed25519
195
196Ed25519是基于椭圆曲线的签名验签算法。
197
198以字符串参数完成Ed25519签名验签,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。
199
200| 非对称密钥类型 | 字符串参数 | API版本 |
201| -------- | -------- | -------- |
202| Ed25519 | Ed25519 | 11+ |
203