目前我正在研究 ccn-lite ( http://www.ccn-lite.net/ ) 的内核模块。为此,我需要一些安全功能(sha1 和公钥/私钥认证)。对于用户空间,我使用 openssl 库,但我不能使用内核模块中的库。
也很难从 OpenSSL 中挑选出这些函数并将它们添加到内核模块中,因为它们中的大多数都依赖于 libc。
linux内核中是否有任何我可以使用的安全功能?
编辑:我可以计算通过以太网接收到的数据的哈希函数:
struct scatterlist sg[1];
struct crypto_hash *tfm;
struct hash_desc desc;
tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC);
desc.tfm = tfm;
desc.flags = 0;
crypto_hash_init(&desc);
sg_init_table(sg, ARRAY_SIZE(sg));
sg_set_buf(&sg[0], input, length);
crypto_hash_digest(&desc, sg, length, md);
crypto_free_hash(tfm);
现在我想使用函数 digsig_verify 来验证数据的签名字段。
verified = digsig_verify(keyring, sig, sig_len, md, md_len);
据我所知,第二个参数是签名,第三个是签名的长度,第四个是数据的散列,最后一个是散列的长度。
第一个字段的类型为“struct key”,应该包含验证签名所需的公钥?
如何初始化此参数,即如何获取系统公钥?还有一种方法可以在 linux 内核中签署 char* 吗?