xref: /linux/Documentation/translations/zh_CN/security/digsig.rst (revision 1260ed77798502de9c98020040d2995008de10cc)
1*d996d56dSShuo Zhao.. SPDX-License-Identifier: GPL-2.0
2*d996d56dSShuo Zhao.. include:: ../disclaimer-zh_CN.rst
3*d996d56dSShuo Zhao
4*d996d56dSShuo Zhao:Original: Documentation/security/digsig.rst
5*d996d56dSShuo Zhao
6*d996d56dSShuo Zhao:翻译:
7*d996d56dSShuo Zhao 赵硕 Shuo Zhao <zhaoshuo@cqsoftware.com.cn>
8*d996d56dSShuo Zhao
9*d996d56dSShuo Zhao===============
10*d996d56dSShuo Zhao数字签名验证API
11*d996d56dSShuo Zhao===============
12*d996d56dSShuo Zhao
13*d996d56dSShuo Zhao:作者: Dmitry Kasatkin
14*d996d56dSShuo Zhao:日期: 2011.06.10
15*d996d56dSShuo Zhao
16*d996d56dSShuo Zhao
17*d996d56dSShuo Zhao.. 内容
18*d996d56dSShuo Zhao
19*d996d56dSShuo Zhao   1.介绍
20*d996d56dSShuo Zhao   2.API
21*d996d56dSShuo Zhao   3.用户空间工具
22*d996d56dSShuo Zhao
23*d996d56dSShuo Zhao
24*d996d56dSShuo Zhao介绍
25*d996d56dSShuo Zhao====
26*d996d56dSShuo Zhao
27*d996d56dSShuo Zhao数字签名验证API提供了一种验证数字签名的方法。
28*d996d56dSShuo Zhao目前,数字签名被IMA/EVM完整性保护子系统使用。
29*d996d56dSShuo Zhao
30*d996d56dSShuo Zhao数字签名验证是通过精简的GnuPG多精度整数(MPI)库的内核移植来实现的。
31*d996d56dSShuo Zhao该内核版本提供了内存分配错误处理,已根据内核编码风格进行重构,并修复
32*d996d56dSShuo Zhaocheckpatch.pl报告的错误和警告。
33*d996d56dSShuo Zhao
34*d996d56dSShuo Zhao公钥和签名由头部和MPIs组成::
35*d996d56dSShuo Zhao
36*d996d56dSShuo Zhao	struct pubkey_hdr {
37*d996d56dSShuo Zhao		uint8_t		version;	/* 密钥格式版本 */
38*d996d56dSShuo Zhao		time_t		timestamp;	/* 密钥时间戳,目前为0 */
39*d996d56dSShuo Zhao		uint8_t		algo;
40*d996d56dSShuo Zhao		uint8_t		nmpi;
41*d996d56dSShuo Zhao		char		mpi[0];
42*d996d56dSShuo Zhao	} __packed;
43*d996d56dSShuo Zhao
44*d996d56dSShuo Zhao	struct signature_hdr {
45*d996d56dSShuo Zhao		uint8_t		version;	/* 签名格式版本 */
46*d996d56dSShuo Zhao		time_t		timestamp;	/* 签名时间戳 */
47*d996d56dSShuo Zhao		uint8_t		algo;
48*d996d56dSShuo Zhao		uint8_t		hash;
49*d996d56dSShuo Zhao		uint8_t		keyid[8];
50*d996d56dSShuo Zhao		uint8_t		nmpi;
51*d996d56dSShuo Zhao		char		mpi[0];
52*d996d56dSShuo Zhao	} __packed;
53*d996d56dSShuo Zhao
54*d996d56dSShuo Zhaokeyid等同对整个密钥的内容进行SHA1哈希运算后的第12到19字节。
55*d996d56dSShuo Zhao签名头部用于生成签名的输入。这种方法确保了密钥或签名头部无法更改。
56*d996d56dSShuo Zhao它保护时间戳不被更改,并可以用于回滚保护。
57*d996d56dSShuo Zhao
58*d996d56dSShuo ZhaoAPI
59*d996d56dSShuo Zhao===
60*d996d56dSShuo Zhao
61*d996d56dSShuo Zhao目前API仅包含一个函数::
62*d996d56dSShuo Zhao
63*d996d56dSShuo Zhao	digsig_verify() - 使用公钥进行数字签名验证
64*d996d56dSShuo Zhao
65*d996d56dSShuo Zhao	/**
66*d996d56dSShuo Zhao	* digsig_verify() - 使用公钥进行数字签名验证
67*d996d56dSShuo Zhao	* @keyring:   查找密钥的密钥环
68*d996d56dSShuo Zhao	* @sig:       数字签名
69*d996d56dSShuo Zhao	* @sigen:     签名的长度
70*d996d56dSShuo Zhao	* @data:      数据
71*d996d56dSShuo Zhao	* @datalen:   数据的长度
72*d996d56dSShuo Zhao	* @return:    成功时返回0,失败时返回 -EINVAL
73*d996d56dSShuo Zhao	*
74*d996d56dSShuo Zhao	* 验证数据相对于数字签名的完整性。
75*d996d56dSShuo Zhao	* 目前仅支持RSA算法。
76*d996d56dSShuo Zhao	* 通常将内容的哈希值作为此函数的数据。
77*d996d56dSShuo Zhao	*
78*d996d56dSShuo Zhao	*/
79*d996d56dSShuo Zhao	int digsig_verify(struct key *keyring, const char *sig, int siglen,
80*d996d56dSShuo Zhao				  const char *data, int datalen);
81*d996d56dSShuo Zhao
82*d996d56dSShuo Zhao用户空间工具
83*d996d56dSShuo Zhao============
84*d996d56dSShuo Zhao
85*d996d56dSShuo Zhao签名和密钥管理实用工具evm-utils提供了生成签名、加载密钥到内核密钥环中的功能。
86*d996d56dSShuo Zhao密钥可以是PEM格式,或转换为内核格式。
87*d996d56dSShuo Zhao当把密钥添加到内核密钥环时,keyid定义该密钥的名称:下面的示例中为5D2B05FC633EE3E8。
88*d996d56dSShuo Zhao
89*d996d56dSShuo Zhao以下是keyctl实用工具的示例输出::
90*d996d56dSShuo Zhao
91*d996d56dSShuo Zhao	$ keyctl show
92*d996d56dSShuo Zhao	Session Keyring
93*d996d56dSShuo Zhao	-3 --alswrv      0     0  keyring: _ses
94*d996d56dSShuo Zhao	603976250 --alswrv      0    -1   \_ keyring: _uid.0
95*d996d56dSShuo Zhao	817777377 --alswrv      0     0       \_ user: kmk
96*d996d56dSShuo Zhao	891974900 --alswrv      0     0       \_ encrypted: evm-key
97*d996d56dSShuo Zhao	170323636 --alswrv      0     0       \_ keyring: _module
98*d996d56dSShuo Zhao	548221616 --alswrv      0     0       \_ keyring: _ima
99*d996d56dSShuo Zhao	128198054 --alswrv      0     0       \_ keyring: _evm
100*d996d56dSShuo Zhao
101*d996d56dSShuo Zhao	$ keyctl list 128198054
102*d996d56dSShuo Zhao	1 key in keyring:
103*d996d56dSShuo Zhao	620789745: --alswrv     0     0 user: 5D2B05FC633EE3E8
104