⑴ linux加解密框架(四)加解密流程
本文基於以下軟硬體假定:
架構:AARCH64
內核版本:5.14.0-rc5
Linux內核中加解密流程涉及到對稱加解密、hash(mac)、aead等不同類型演算法的處理。這些演算法在加解密流程中的具體實現各有差異,主要體現在以下方面:
- 對稱加解密、mac以及aead等演算法需要密鑰,而hash演算法不需要。
- 一般加解密演算法需要初始向量(iv值),以增強安全性,而ecb模式則不需要。
- aead演算法支持多種icv長度,初始化演算法上下文時需指定icv(tag)長度,其他演算法則不需。
- aead演算法加密時需要包含assoc數據,解密時需包含icv(tag)數據。
- 不同加解密演算法的操作函數可能不同,如加密和解密函數、init、update、final等。
為了適應上述差異,內核將加解密流程劃分為三個層次:加解密核心、加解密類型和加解密驅動。加解密核心實現通用功能,加解密類型實現特定演算法的附加功能,加解密驅動則實現具體演算法的全部功能。
內核使用一系列數據結構描述演算法屬性,以skcipher演算法類型和aes_generic演算法實現為例,其關系如下:
- crypto_alg:唯一標識注冊到內核中的演算法,包含公共屬性如block size、數據對齊長度、演算法優先順序、演算法名、演算法驅動名,以及回調函數。
- skcipher_alg:skcipher特定結構,包含crypto_alg與skcipher特有的屬性和回調函數,如密鑰長度限制、iv長度、密鑰設置、加密和解密回調等。
- crypto_tfm:動態實例,創建時需要密鑰、aead的tag size等上下文信息,用於驅動加解密引擎。
- crypto_skcipher:skcipher動態實例,包含crypto_tfm和特定演算法類型的屬性。
- crypto_async_request:保存加解密參數的結構,用於執行操作。
內核還支持並行操作,如在smp系統上多核並行加解密,或硬體引擎支持多通道並行執行。為此,內核提供crypto_async_request結構,用於保存每次操作的參數。
skcipher流程包括結構體分配、參數准備、上下文設置、請求參數設置和實際操作執行。關鍵步驟如下:
- crypto_alloc_skcipher:分配並初始化crypto_skcipher結構。
- skcipher_request_alloc:根據crypto_tfm分配並初始化請求結構。
- alloc_cipher_test_sglists:為源/目的數據分配scatterlist內存。
- crypto_skcipher_setkey:設置密鑰。
- build_cipher_test_sglists:創建sglist。
- skcipher_request_set_callback:設置回調函數。
- skcipher_request_set_crypt:設置加解密參數。
- crypto_skcipher_encrypt:執行加密操作。
類似地,hash流程也包括tfm和request分配、密鑰設置(取決於演算法)、sglist填充和摘要值生成。
本文詳細介紹了Linux內核中加解密流程的組織、數據結構和關鍵步驟,以確保不同演算法在復雜環境下的高效、安全執行。
⑵ linux ssh 找不到libcrypto.so.6
提示應該是少了一些ssh所需要的庫
首先:
yum provides libcrypto.so.6
會出來是哪個rpm包 包含 這個lib庫。
其次:
yum install 這個rpm包
應該就可以解決這個報錯。幸運的話,也許ssh就可以用了,一般來說估計會報缺另外一些庫。再繼續這個方法依次解決即可。
希望對你有幫助。