目录

  • 1、linux kernel crypto的软件框图
  • 2、sendmsg/recvmsg如何调用到底层encrypt/decrypt
  • 3、算法的底层实现(以为aes/hash为例)

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的实现

Linux kernel crypto的介绍相关推荐

  1. Linux内核 crypto文件夹 密码学知识学习

    密码算法分类 对称算法 非对称算法 消息摘要(单向哈希)算法 这些算法作为加密函数框架的最底层,提供加密和解密的实际操作.这些函数可以在内核crypto文件夹下,相应的文件中找到.不过内核模块不能直接 ...

  2. linux mint 19 内核4.9,Linux Kernel 4.4.59 LTS/4.9.19 LTS/4.10.7维护版本更新发布

    Linux Kernel 4.10.7版本同此前版本更新相隔3天时间,根据短日志共计调整128个文件,插入1470处,删除845处.该维护补丁对驱动进行了常规升级,此外还对架构和文件系统进行了一些改善 ...

  3. linux mint 安装内核,如何在Ubuntu, Linux Mint中安装Linux Kernel 4.18

    Linus Torvalds终于在12日下午宣布发布Linux Kernel 4.18. 他在lkml.org写道: 这是一个非常平静的一周,可以说我上周可以按时发布,但我们确实有一些小的更新. 主要 ...

  4. linux 内核 3.18,Linux Kernel 3.18 正式版发布下载

    Linux Kernel 是所有 Linux 发行发布的核心,Linux Kernel 一直由 Linux 之父 Linus Torvalds 维护,Linux Kernel 新版本可支持intel. ...

  5. linux内核5.4,Linux Kernel 5.4 RC8 发布,一切都很正常

    不出所料,Linus Torvalds选择了昨天发布5.4-rc8内核,而不是直接发布Linux 5.4稳定版. 但是,他说由于周期稳定,他本来可以完成稳定的内核发布. Linus决定发布Linux ...

  6. linux rc4,Linux kernel 4.8-rc4发布下载,正式版越来越近

    距离第三个候选版发布一周时间,Linus Torvalds于今天宣布了Linux Kernel 4.8-rc4,喜欢尝鲜的用户可以下载体验了. Linus Torvalds在邮件中称,Linux ke ...

  7. linux内核长期支持版本,Linux Kernel 3.12长期支持分支迎来第63个维护版本

    今天,Linux内核开发者Jiri Slaby宣布长期支持分支Linux Kernel 3.12迎来第63个维护更新版本.在Linux Kernel 3.12.63版本中共计对104份文件进行了调整, ...

  8. linux media v4l2,Linux kernel drivers/media/v4l2-core/videobuf2-v4l2.c拒绝服务漏洞(CVE-2016-4568)...

    Linux kernel drivers/media/v4l2-core/videobuf2-v4l2.c拒绝服务漏洞(CVE-2016-4568) 发布日期:2016-05-19 更新日期:2016 ...

  9. linux 升级内核为4.10,Linux Kernel 4.10.4 发布下载

    知名 Linux 内核维护员 Greg Kroah-Hartman 已经在邮件列表中宣布了 Linux 4.10 的第四个维护更新,并且建议所有 Linux 发行版用户更新至该最新稳定版内核. lkm ...

最新文章

  1. 2021最大看点AI for Science,在哪些领域有斩获?
  2. Hadoop 单节点 伪分布 安装手记
  3. 我的学习之路_第二十三章_HTML
  4. Android开发之SDK开发获取资源id报错的问题
  5. 软件行业正面临一场新的变革——SaaS软件
  6. 服务器安装动易组件,动易SiteWeaver6.8安装方法
  7. HDFView3.1.4下载好了环境变量也配置了但就是打不开!!
  8. 用户体验测试之专家评估
  9. 有了这四个网站 再也不用花钱啦
  10. java vo 什么意思_在Java中VO , PO , BO , QO, DAO ,POJO是什么意思
  11. ubuntu 使用 fdisk 磁盘分区
  12. 线程执行完之后会释放吗_有人说,爬完黄山之后的第二件事就是去歙县徽州古城,你会去吗?...
  13. 简单的neo4j三元组增量插入-通过py2neo实现
  14. 移动设备app横竖屏幕测试
  15. 软件测试周刊(第78期):你对未来越有信心,你对现在越有耐心。
  16. R语言作业--第六章判别分析
  17. 构建工具承担了哪些工作?
  18. asp.net书籍推荐
  19. Python五分钟教你制作一个太阳
  20. 小米/红米手机,刷入第三方recovery(红米5 plus为例)

热门文章

  1. linux内核红宝书,Solaris 10红宝书 9.3
  2. github流程图_10月份Github上最热门的JavaScript开源项目
  3. BigData:根据最新2018人工智能行业创新企业Top100名单,绘制AI行业VC最AI的热门领域(投资领域)
  4. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Canvas)
  5. VB:使用Visual Studio 2010中的VB语言工具箱DataGridView调用SQL数据库Database的表格文件
  6. Linux+pycharm下 安装tensorflow时遇到的bug
  7. Java基础学习-Collection体系结构和迭代测试
  8. 解决MySQL报错ERROR 2002 (HY000)【转】
  9. windows php exec()不生效问题
  10. message from server: Host 'XXXX' is not allowed to connect to this MySQL server