密码学和内核,系统调用

密码学和内核,系统调用

密码学是在用户空间还是内核空间实现的?

公钥/私钥对是在内核空间中生成的吗?

使用给定的公钥或给定的私钥进行加密或解密,或者以加密方式签署文件怎么样?

这些操作使用了哪些系统调用以及如何传入/检索私钥?

我花了一些时间查看“非对称密码算法定义”页面:https://www.kernel.org/doc/html/v4.10/crypto/api-akcipher.html 但我无法弄清楚哪些函数做什么,以及它们的参数和返回中的数据结构是什么。

简而言之,哪个结构的哪个元素对应于私钥?

答案1

您找到的文档主要是针对内核和库开发的。加密原语用于诸如网络安全协议堆栈,需要在内核中运行。正如你在用户空间接口章节,公钥加密在用户空间中不可访问。即使是这样,您也不应该担心密钥最终在哪里(提示:看到那些漂亮的不透明__ctx成员了吗?)。有趣的部分是提供的功能。

如果您对 Linux 上的加密库感兴趣,开放式SSL,GnuTLSLibgcrypt可能是最常见的选择。还有一个比较页在维基百科上。它们主要在用户空间中运行,并使用内核 Crypto API 来提高性能。

编辑:如果您确实想使用 Crypto API,您可以根据每个算法查看这些__ctx成员包含的内容。例如,如果你看rsa.c,您会注意到 的__ctx成员crypto_akcipher指向 astruct rsa_mpi_key并且您可以使用 来获取它rsa_get_key()

答案2

另一种可能的解决方案是将一些代码调试到系统调用级别,以找到它与内核接口的位置,因为内核似乎从缓冲区读取以执行加密系统调用。

相关内容