密码学是在用户空间还是内核空间实现的?
公钥/私钥对是在内核空间中生成的吗?
使用给定的公钥或给定的私钥进行加密或解密,或者以加密方式签署文件怎么样?
这些操作使用了哪些系统调用以及如何传入/检索私钥?
我花了一些时间查看“非对称密码算法定义”页面:https://www.kernel.org/doc/html/v4.10/crypto/api-akcipher.html 但我无法弄清楚哪些函数做什么,以及它们的参数和返回中的数据结构是什么。
简而言之,哪个结构的哪个元素对应于私钥?
答案1
您找到的文档主要是针对内核和库开发的。加密原语用于诸如网络安全协议堆栈,需要在内核中运行。正如你在用户空间接口章节,公钥加密在用户空间中不可访问。即使是这样,您也不应该担心密钥最终在哪里(提示:看到那些漂亮的不透明__ctx
成员了吗?)。有趣的部分是提供的功能。
如果您对 Linux 上的加密库感兴趣,开放式SSL,GnuTLS和Libgcrypt可能是最常见的选择。还有一个比较页在维基百科上。它们主要在用户空间中运行,并使用内核 Crypto API 来提高性能。
编辑:如果您确实想使用 Crypto API,您可以根据每个算法查看这些__ctx
成员包含的内容。例如,如果你看rsa.c,您会注意到 的__ctx
成员crypto_akcipher
指向 astruct rsa_mpi_key
并且您可以使用 来获取它rsa_get_key()
。
答案2
另一种可能的解决方案是将一些代码调试到系统调用级别,以找到它与内核接口的位置,因为内核似乎从缓冲区读取以执行加密系统调用。