使用来自用户 Space 的 Linux 密码 API 进行 RSA

Using Linux crypto API from User Space for RSA

我正在寻找一种方法来为 RSA encryption/decryption 从用户 space 调用 Linux 内核加密 API。 RSA 函数在 linux 内核中实现。

目前,我找到了两种从用户 space:

调用 crypto API 的方法

不幸的是,cryptodev 不支持像 RSA 这样的非对称算法。

我不确定 AF_ALG 是否支持像 RSA 这样的 akcipher。 cat /proc/crypto的结果是:

...
name         : rsa
driver       : rsa-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : akcipher

但是,我尝试用 :

绑定一个 AF_ALG 套接字
int sockfd = socket(AF_ALG, SOCK_SEQPACKET, 0); 
struct sockaddr_alg sa = { 
    .salg_family = AF_ALG, 
    .salg_type = "akcipher",
    .salg_name = "rsa"
};

绑定失败 ***ERROR : bind socket failed (2) : No such file or directory

我错过了什么吗?还有其他方法可以从用户 space 调用 crypto API 吗?

来自文档:

The kernel crypto API is accessible from user space. Currently, the following ciphers are accessible:

  • Message digest including keyed message digest (HMAC, CMAC)

  • Symmetric ciphers

  • AEAD ciphers

  • Random Number Generators

这意味着 akcipher 密码系列在用户空间不可用,因此绑定到它失败 ENOENT。事实上,检查 linux 内核源代码显示,没有 algif_akcipher.c,其中将实现 akcipher 系列的用户空间接口。