Linux kernel crypto的介绍

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的实现
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值