日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux kernel crypto的介绍

發布時間:2025/3/21 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux kernel crypto的介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

        • 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的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。