英语
数字签名验证API¶
- 作者:
Dmitry Kasatkin
- 日期:
06.10.2011
简介¶
数字签名验证API提供了一种验证数字签名的方法。目前数字签名被IMA/EVM完整性保护子系统使用。
数字签名验证是使用GnuPG多精度整数(MPI)库的裁剪版内核移植实现的。该内核移植提供了内存分配错误处理,已根据内核编码风格进行了重构,并修复了checkpatch.pl报告的错误和警告。
公钥和签名由头部和MPI组成
struct pubkey_hdr {
uint8_t version; /* key format version */
time_t timestamp; /* key made, always 0 for now */
uint8_t algo;
uint8_t nmpi;
char mpi[0];
} __packed;
struct signature_hdr {
uint8_t version; /* signature format version */
time_t timestamp; /* signature made */
uint8_t algo;
uint8_t hash;
uint8_t keyid[8];
uint8_t nmpi;
char mpi[0];
} __packed;
keyid 等于总密钥内容的 SHA1[12-19]。签名头部用作生成签名的输入。这种方法确保密钥或签名头部无法更改。它保护时间戳不被更改,并可用于回滚保护。
API¶
API目前只包含一个函数
digsig_verify() - digital signature verification with public key
/**
* digsig_verify() - digital signature verification with public key
* @keyring: keyring to search key in
* @sig: digital signature
* @sigen: length of the signature
* @data: data
* @datalen: length of the data
* @return: 0 on success, -EINVAL otherwise
*
* Verifies data integrity against digital signature.
* Currently only RSA is supported.
* Normally hash of the content is used as a data for this function.
*
*/
int digsig_verify(struct key *keyring, const char *sig, int siglen,
const char *data, int datalen);
用户空间工具¶
签名和密钥管理工具evm-utils提供了生成签名、将密钥加载到内核密钥环的功能。密钥可以是PEM格式或转换为内核格式。当密钥添加到内核密钥环时,keyid定义了密钥的名称:如下例中的5D2B05FC633EE3E8。
以下是keyctl工具的示例输出
$ keyctl show
Session Keyring
-3 --alswrv 0 0 keyring: _ses
603976250 --alswrv 0 -1 \_ keyring: _uid.0
817777377 --alswrv 0 0 \_ user: kmk
891974900 --alswrv 0 0 \_ encrypted: evm-key
170323636 --alswrv 0 0 \_ keyring: _module
548221616 --alswrv 0 0 \_ keyring: _ima
128198054 --alswrv 0 0 \_ keyring: _evm
$ keyctl list 128198054
1 key in keyring:
620789745: --alswrv 0 0 user: 5D2B05FC633EE3E8