linux加密框架 crypto 算法管理 - 动态和静态算法管理
生活随笔
收集整理的這篇文章主要介紹了
linux加密框架 crypto 算法管理 - 动态和静态算法管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接
- Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客
動態和靜態算法管理
靜態算法
- 加密框架中的算法分為靜態算法和動態算法兩種,其中靜態算法指的是以"算法名.ko"形式存在的靜態編譯的算法模塊,如aes.ko表示AES算法模塊,md5.ko表示MD5算法模塊
- 靜態算法模塊是預定義的,在內核啟動時或通過request_module函數加載到加密框架中的
- 在加密框架中,靜態算法表示為一個算法說明實例。
動態算法
- 而動態算法指的是根據算法模式(如CBC、HMAC等)和基礎算法(靜態算法或動態算法)創建的算法,如"cbc(aes)"表示使用AES算法的CBC模式的新算法,"hmac(md5)"表示使用MD5算法的HMAC模式的新算法,這些算法是根據外部應用需求動態創建并注冊到加密框架中
- 在加密框架中,動態算法表示為一個算法模板實例。
差異
- 靜態算法在密碼學上屬于算法的范疇。
- 動態算法在密碼學上屬于算法應用的范疇。
創建動態算法
- 發布創建動態算法通知
- 如果外部應用在查找算法(如"cbc(aes)"算法)時,如果查找未命中,將創建注冊用算法幼蟲,然后在加密通知鏈上發布創建動態算法(CRYPTO_MSG_ALG_REQUEST)的通知
- 如下所示
- 如果是當前查找線程發布的創建動態算法通知,則larval為待創建算法同名的注冊用算法幼蟲,用于向創建動態算法的內核線程傳遞待創建算法的算法名、算法類型等信息,此時算法管理鏈表如下所示,其中cbc_aes_larval_r表示"cbc(aes)"算法對應的注冊用算法幼蟲。
- 加密通知鏈回調函數cryptomgr_notify根據通知消息類型msg調用不同的執行函數
- algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin
- 如下所示
- ?其中CRYPTO_MSG_ALG_REQUEST為創建動態算法(也稱為算法探測)的通知,執行函數為cryptomgr_schedule_probe;
- CRYPTO_MSG_ALG_REGISTER為算法正確性檢驗的通知,執行函數為cryptomgr_schedule_test。
cryptomgr_schedule_probe函數
- cryptomgr_schedule_probe函數的輸入參數為算法幼蟲larval,返回值為執行結果,NOTIFY_STOP表示執行完畢,但是不表示已成功創建動態算法。
- algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin
- cryptomgr_schedule_probe函數執行流程如下所示。
- 1)在cryptomgr_schedule_probe函數函數中,需要從算法幼蟲的算法名中解析出算法模板名和基礎算法名,規則如下:
- 正則表達式
- a)基本規則:算法模板名(基礎算法名1,…,基礎算法名n);
- b)算法模板名的有效字符包括0到9、a到z、A到Z、-、等;
- c)基礎算法名的有效字符包括0到9、a到z、A到Z、-、、(、)等;
- d)所有基礎算法名都必須包含在緊跟算法模板名后的()之內,當有多個基礎算法時,基礎算法名以",“間隔;
- e)算法模板名與第一個”("之間不能有任何其他字符;
- f)基礎算法名最多不超過32個。
- 例子
- 例如,算法名為"hmac(md5)"時,解析出的算法模板為hmac,基礎算法為靜態算法md5;
- 算法名為"authenc(hmac(md5),cbc(aes))"時,解析出的算法模板為authenc,基礎算法為動態算法hmac(md5)和cbc(aes)。
cryptomgr_param
- 2)傳遞給內核線程的參數數據結構為struct cryptomgr_param,定義如下所示:
- algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin
參數介紹?
- tb:參數名(T)列表,不含參數值,以NULL結尾。第1個為算法類型(CRYPTOA_TYPE),后續均為基礎算法名(CRYPTOA_ALG)。
- type:算法類型,TLV結構,包含算法類型和屏蔽位。
- attrs:基礎算法名列表,TLV結構。
- larval:算法幼蟲名,即待創建的動態算法的算法名。
- template:算法模板名。
- otype:原始的算法類型,傳遞給內核線程的算法類型中清除了算法已檢測標志位。
- omask:原始的算法類型屏蔽位,傳遞給內核線程的算法類型屏蔽位中清除了算法已檢測標志位。
- 填充完參數param后,創建名為"cryptomgr_probe"的內核線程,稱為算法探測線程,其執行函數為cryptomgr_probe,如下所示。
-
創建完算法探測線程后,算法查找線程調用crypto_larval_wait等待算法探測結束,如下所示。
- 算法檢測線程(非算法探測線程)通過注冊用算法幼蟲的完成量通知查找線程算法探測結束
- struct completion *completion;完成量,指向算法幼蟲的完成量。
- 目前的版本? V5.15.12已經刪除這個變量
cryptomgr_probe函數
- cryptomgr_probe函數是算法探測線程的執行函數,輸入參數為創建動態算法所需的參數
- algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin
- 處理流程如下所示
- 算法模板要么實現create接口要么實現alloc接口,兩者必居其一
- 其中create接口不僅創建算法模板實例,還實現算法模板實例注冊,而alloc接口只創建算法模板實例,因此還需要調用者再進行算法模板實例注冊。一般情況下,哈希算法的算法模板實現create接口,如HMAC模板提供的create接口為hmac_create函數,而分組算法的算法模板實現提供alloc接口,如CBC模板提供的alloc接口為crypto_cbc_alloc函數。
- 如果在算法探測過程中出現錯誤,則需要在線程退出前調用crypto_larval_error函數完成收尾工作。crypto_larval_error函數的輸入參數為算法幼蟲名(即待創建的動態算法名)param->larval、原始算法類型param->otype和原始算法類型屏蔽位param->omask
- 注意事項
- crypto_larval_error 版本5.15.11已經不再支持
- 如果以輸入參數為條件查找到算法幼蟲,則喚醒在其完成量上等待的線程;如果查找到的是已注冊的算法,在算法檢測線程中已喚醒在注冊用算法幼蟲完成量上等待的線程,如下所示。
- 問題:
- create和alloc必須要二者選一實現,但是我沒有找到證據 進行論證
注冊動態算法crypto_register_instance
- crypto_register_instance函數用于注冊動態算法(即算法模板實例),輸入參數包括算法模板tmpl和算法模板實例inst,處理流程如下所示。
- algapi.c - crypto/algapi.c - Linux source code (v5.15.12) - Bootlin
- 1)算法注冊由通用算法注冊函數__crypto_register_alg完成,輸入參數為算法模板實例對應的通用算法說明inst->alg,返回值為檢測用算法幼蟲larval。
- 2)算法模板和算法模板實例的關聯代碼如下:
- 即將算法模板實例添加到算法模板的實例鏈表中,同時設置算法模板實例歸屬的算法模板。
- 3)和靜態算法相同,動態算法注冊的最后一步是算法正確性檢驗,調用crypto_wait_for_test函數實現。
- 4)crypto_register_instance函數中接口調用情況如下所示。
- 5)注冊同步哈希算法模板實例時使用的函數是shash_register_instance,其輸入參數包括算法模板tmpl和同步哈希算法模板實例inst,處理流程如下所示。
- ?shash.c - crypto/shash.c - Linux source code (v5.15.12) - Bootlin
- 和同步哈希靜態算法相同,在注冊前首先調用shash_prepare_alg函數檢測同步哈希算法模板實例對應的同步哈希算法(inst->alg)的有效性,同時進行注冊前的準備工作。注冊前準備工作中最重要的一步是將算法類型常量設置為crypto_shash_type。
- 同步哈希動態算法的注冊工作是由通用動態算法注冊函數crypto_register_instance完成。crypto_register_instance函數處理的是通用的算法模板實例,因此調用shash_crypto_instance函數獲取同步哈希算法模板實例inst對應的通用算法模板實例。
- shash_register_instance函數中接口調用情況如下所示。
總結
以上是生活随笔為你收集整理的linux加密框架 crypto 算法管理 - 动态和静态算法管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 激战西门町!台妹无双游戏《酉閃町》半价优
- 下一篇: PSP《变形金刚:卷土重来》汽车人任务流