Linux kernel crypto的介绍
生活随笔
收集整理的這篇文章主要介紹了
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的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MTK方案下tee.img的打包方式的详
- 下一篇: linux 其他常用命令