Linux kernel crypto的介绍
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
1、linux kernel crypto的软件框图
(软件层级图)
af_alg是linux kernel crypto算法接口
实现了底层算法的调用(skcipher、aead、hash、rng),并且:
- 将这些接口export出去,给linux kernel其它模块使用(如tcrypt.c使用);
- 将这些接口注册sock_register, 用户程序通过sock通信来调用这些底层接口
在linux kernel中,仅支下四种crypto算法:
- algif_skcipher 对称加解密算法
- algif_aead 也算一种对称的加解密算法,具体介绍参见什么是AEAD加密
- algif_hash 数字摘要算法
- algif_rng 随机数产生
(软件结构图)
在Linux kernel的module_init阶段会将algif_type_skcipher、algif_type_aead、algif_type_hash、algif_type_rng 四种算法注册.
也就是添加到af_alg维护的alg_types链表种. alg_types链表种仅有这四个数据.
在userspace通过netlink调用了,kernel种的af_alg模块收到消息后, 根据上层传来的算法种类名字来选择走哪一个结构体(alg_type_xxx)的ops函数
2、sendmsg/recvmsg如何调用到底层encrypt/decrypt
以skcipher为例, 在userspace调用send()和recive()函数,对应的底层调用recvmsg和sendmsg函数
先看skcipher_recvmsg()函数,接受数据然后再调用encrypt/decrypt处理数据
static int skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
size_t ignored, int flags)
{
return (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) ?
skcipher_recvmsg_async(sock, msg, flags) :
skcipher_recvmsg_sync(sock, msg, flags);
}
而skcipher_sendmsg()函数就是将处理后的数据,在发送到sock端.
3、算法的底层实现(以为aes/hash为例)
在linux crypto底层,实现aes/hash的算法有四种方式
- (1)、cpu的纯软实现,使用cpu的ALU,x0-x30等寄存器,加加减减的计算。(本文不讨论此项)
- (2)、ARM-CE,就是The Armv8 Cryptographic Extension了,调用arm-ce的指令和寄存器,进行加加减减计算
- (3)、ARM-NEON : 调用arm neon指令(128bit的寄存器v0-v31),进行加加减减计算
- (4)、SOC crypto engine的实现
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献1条内容
所有评论(0)