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