内核模块和SSL

时间:2013-09-03 15:19:55

标签: linux linux-kernel openssl kernel-module

目前我正在研究ccn-lite(http://www.ccn-lite.net/)的内核模块。 为此,我需要一些安全功能(sha1和公钥/私钥authentificaton)。 对于用户空间,我使用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);

据我所知,第二个参数是签名,第三个是签名的len,第四个是数据的哈希,最后一个是哈希的长度。

第一个字段的类型为“struct key”,并且应该包含验证签名所需的publickey吗?

如何初始化此参数,即如何获取系统公钥? 还有一种在linux内核中签名char *的方法吗?

2 个答案:

答案 0 :(得分:4)

linux内核附带了一堆加密函数。

请参阅:http://lxr.linux.no/#linux+v3.11/Documentation/crypto/

答案 1 :(得分:-1)

您可以使用ipc之类的netlink将数据从内核发送到用户空间,让用户空间openssl执行安全性实现并将数据恢复到内核。