使用来自用户 Space 的 Linux 密码 API 进行 RSA
Using Linux crypto API from User Space for RSA
我正在寻找一种方法来为 RSA encryption/decryption 从用户 space 调用 Linux 内核加密 API。 RSA 函数在 linux 内核中实现。
目前,我找到了两种从用户 space:
调用 crypto API 的方法
- AF_ALG 套接字,使用 [libkapi] (http://www.chronox.de/libkcapi.html). It seems to be the offical solution (https://www.kernel.org/doc/html/v4.19/crypto/userspace-if.html).
- [cryptodev] (http://cryptodev-linux.org/) 使用 ioctl.
不幸的是,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 系列的用户空间接口。
我正在寻找一种方法来为 RSA encryption/decryption 从用户 space 调用 Linux 内核加密 API。 RSA 函数在 linux 内核中实现。
目前,我找到了两种从用户 space:
调用 crypto API 的方法- AF_ALG 套接字,使用 [libkapi] (http://www.chronox.de/libkcapi.html). It seems to be the offical solution (https://www.kernel.org/doc/html/v4.19/crypto/userspace-if.html).
- [cryptodev] (http://cryptodev-linux.org/) 使用 ioctl.
不幸的是,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 系列的用户空间接口。