linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程

參考鏈接

  • Linux加密框架的應用示例(一)_家有一希的博客-CSDN博客

本文大綱

  • 本節將從應用角度說明加密框架的運行流程,包括加密框架如何管理算法、如何動態創建算法,應用模塊如何創建算法實例、如何通過算法實例調用算法接口等
  • 本節中加密框架的應用模塊以IPSEC模塊(XFRM框架)為例IPSEC模塊包括AH協議和ESP協議兩種協議,其中AH協議提供數據完整性服務,ESP協議提供數據加密服務以及可選的數據完整性服務
  • AH協議和ESP協議提供的服務都是通過算法實現的
    • AH協議通過認證算法提供數據完整性服務,認證算法的實現方式可以是哈希算法的HMAC模式也可以是分組算法的XCBC模式
    • ESP協議通過AEAD算法提供數據加密服務和可選的數據完整性服務,AEAD算法的實現方式可以是分組算法的CBC模式和可選的認證算法也可以是分組算法的CCM模式(同時提供加密服務和完整性服務)。
  • XFRM框架在安全關聯SA中配置協議使用的算法,體現在數據結構struct xfrm_state如下所示的成員變量。
  • xfrm.h - include/net/xfrm.h - Linux source code (v5.15.12) - Bootlin

xfrm_state

/* Full description of state of transformer. */
struct xfrm_state {possible_net_t		xs_net;union {struct hlist_node	gclist;struct hlist_node	bydst;};struct hlist_node	bysrc;struct hlist_node	byspi;struct hlist_node	byseq;refcount_t		refcnt;spinlock_t		lock;struct xfrm_id		id;struct xfrm_selector	sel;struct xfrm_mark	mark;u32			if_id;u32			tfcpad;u32			genid;/* Key manager bits */struct xfrm_state_walk	km;/* Parameters of this state. */struct {u32		reqid;u8		mode;u8		replay_window;u8		aalgo, ealgo, calgo;u8		flags;u16		family;xfrm_address_t	saddr;int		header_len;int		trailer_len;u32		extra_flags;struct xfrm_mark	smark;} props;struct xfrm_lifetime_cfg lft;/* Data for transformer */struct xfrm_algo_auth	*aalg;struct xfrm_algo	*ealg;struct xfrm_algo	*calg;struct xfrm_algo_aead	*aead;const char		*geniv;/* Data for encapsulator */struct xfrm_encap_tmpl	*encap;struct sock __rcu	*encap_sk;/* Data for care-of address */xfrm_address_t	*coaddr;/* IPComp needs an IPIP tunnel for handling uncompressed packets */struct xfrm_state	*tunnel;/* If a tunnel, number of users + 1 */atomic_t		tunnel_users;/* State for replay detection */struct xfrm_replay_state replay;struct xfrm_replay_state_esn *replay_esn;/* Replay detection state at the time we sent the last notification */struct xfrm_replay_state preplay;struct xfrm_replay_state_esn *preplay_esn;/* replay detection mode */enum xfrm_replay_mode    repl_mode;/* internal flag that only holds state for delayed aevent at the* moment*/u32			xflags;/* Replay detection notification settings */u32			replay_maxage;u32			replay_maxdiff;/* Replay detection notification timer */struct timer_list	rtimer;/* Statistics */struct xfrm_stats	stats;struct xfrm_lifetime_cur curlft;struct hrtimer		mtimer;struct xfrm_state_offload xso;/* used to fix curlft->add_time when changing date */long		saved_tmo;/* Last used time */time64_t		lastused;struct page_frag xfrag;/* Reference to data common to all the instances of this* transformer. */const struct xfrm_type	*type;struct xfrm_mode	inner_mode;struct xfrm_mode	inner_mode_iaf;struct xfrm_mode	outer_mode;const struct xfrm_type_offload	*type_offload;/* Security context */struct xfrm_sec_ctx	*security;/* Private data of this transformer, format is opaque,* interpreted by xfrm_type methods. */void			*data;
};
  • xfrm.h - include/net/xfrm.h - Linux source code (v5.15.12) - Bootlin
	/* Data for transformer */struct xfrm_algo_auth	*aalg;   //認證算法struct xfrm_algo	*ealg;       //加密算法struct xfrm_algo	*calg;       //壓縮算法struct xfrm_algo_aead	*aead;   //AEAD算法
  • 在配置安全關聯SA時根據使用的協議和提供的服務設置對應的成員變量,XFRM框架定義的上述算法描述中通過算法名alg_name區分不同的算法,例如:
  • xfrm.h - include/uapi/linux/xfrm.h - Linux source code (v5.15.12) - Bootlin
  • xfrm.h - include/uapi/linux/xfrm.h - Linux source code (v5.15.12) - Bootlin
  • 上述認證算法、加密算法、壓縮算法、AEAD算法都是結構體變量,里面都定義名為alg_name的char數組,用于指定函數的名字。XFRM框架通過這個算法名字實現算法的區分

  • 例子
  • 1)某個使用AH協議的SA通過MD5算法的HMAC模式提供數據完整性服務,配置成員變量aalg,算法名alg_name為"hmac(md5)",在加密框架中表示通過HMAC模板和基礎算法MD5動態創建的哈希算法;
  • 2)某個使用ESP協議的SA通過AES算法的CBC模式提供數據加密服務,但不提供數據完整性服務,配置成員變量ealg,算法名alg_name為"cbc(aes)",在加密框架中表示通過chainiv模板和基礎算法"cbc(aes)“動態創建的分組算法;
  • 3)某個使用ESP協議的SA通過AES算法的CBC模式提供數據加密服務,通過MD5算法的HMAC模式提供數據完整性服務,配置成員變量ealg和aalg,算法名alg_name分別為"cbc(aes)“和"hmac(md5)”;
  • 4)某個使用ESP協議的SA通過AES算法的CCM模式同時提供數據加密服務和完整性服務,配置成員變量aead,算法名alg_name為"ccm(aes)”,在加密框架中表示通過CCM模板和基礎算法AES算法動態創建的AEAD算法。
  • 在XFRM框架中,將使用ESP協議提供數據加密服務和可選的數據完整性服務的算法的稱為AEAD算法。AEAD算法有兩種實現方式,區別在于提供數據完整性的算法,一種是由分組算法提供數據加密服務,由認證算法提供數據完整性服務,如3)所示,另一種是由分組算法同時提供數據加密服務和完整性服務,如4)所示。
  • 由于ESP協議的數據完整性服務是可選的,可以不配置認證算法,如2)所示,在XFRM框架中將2)和3)統一定義為authenc模板通過基礎算法(加密算法和可選的認證算法)動態創建的AEAD算法,如下所示。??
  • authenc.h - include/crypto/authenc.h - Linux source code (v5.15.12) - Bootlin
  • authenc.c - crypto/authenc.c - Linux source code (v5.15.12) - Bootlin

  • 按照上述定義,2)中使用的AEAD算法名為為"authenc(digest_null,cbc(aes))",3)中使用的AEAD算法名為"authenc(hmac(md5),cbc(aes))"
  • 對應上述authenc頭文件中定義的結構體 crypto_authenc_keys,前一部分為認證,后面部分為加密。
  • 如果不涉及 認證部分,使用digest_null進行替代。
  • 其中digest_null為加密框架中定義的NULL算法,其算法接口都是不進行任何處理的空函數,如下所示。?
  • crypto_null.c - crypto/crypto_null.c - Linux source code (v5.15.12) - Bootlin

初始階段

  • 本節將分別介紹使用"hmac(md5)"算法的AH協議和"authenc(hmac(md5),cbc(aes))"算法的ESP協議的服務流程,包括如何創建算法實例以及如何提供服務。

1)初始階段的算法管理鏈表和算法模板管理鏈表

  • "hmac(md5)"算法和"authenc(hmac(md5),cbc(aes))"算法涉及的靜態基礎算法包括哈希算法MD5(即md5_salg)和分組算法AES(即aes_alg),涉及的算法模板包括HMAC模板(即hmac_tmpl)、CBC模板(即crypto_cbc_tmpl)chainiv模板(即chainiv_tmpl)和authenc模板(crypto_authenc_tmpl)
  • 因此加密框架初始階段的算法管理鏈表和算法模板管理鏈表如下圖所示

算法管理鏈表初始階段

在這里插入圖片描述

  • 注:不考慮算法和算法模板的注冊順序。

算法說明

  • MD5算法的同步哈希算法說明記為md5_salg,通用算法說明記為md5_alg(=&md5_salg->base),如下所示。

AES算法的通用算法說明記為aes_alg,如下所示。

在這里插入圖片描述

?3)算法運行上下文

  • 算法運行過程中所需的內存空間稱為算法運行的上下文,一般情況下由通用算法說明的成員變量cra_ctxsize標明算法運行所需的上下文空間大小(單位:字節)。
  • a)MD5算法運行上下文
  • MD5算法運行上下文用于緩存一個分組中的原始數據和計算的哈希值,抽象為數據結構struct md5_state,如下所示。
  • md5.h - include/crypto/md5.h - Linux source code (v5.15.12) - Bootlin
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _CRYPTO_MD5_H
#define _CRYPTO_MD5_H#include <linux/types.h>#define MD5_DIGEST_SIZE		16
#define MD5_HMAC_BLOCK_SIZE	64
#define MD5_BLOCK_WORDS		16
#define MD5_HASH_WORDS		4#define MD5_H0	0x67452301UL
#define MD5_H1	0xefcdab89UL
#define MD5_H2	0x98badcfeUL
#define MD5_H3	0x10325476ULextern const u8 md5_zero_message_hash[MD5_DIGEST_SIZE];struct md5_state {u32 hash[MD5_HASH_WORDS];   //計算的哈希數值u32 block[MD5_BLOCK_WORDS]; //緩存一個分組中原始數據u64 byte_count;             //已計算的數據字節長度
};#endif
  • 從數據結構定義可以看出,MD5算法運行的上下文空間大小并不是由cra_ctxsize標明,而是通過哈希算法說明中的個性化參數statesize(即運行狀態)標明,即statesize = sizeof(struct md5_state)。
  • b)AES算法運行上下文
  • AES算法運行上下文用于存儲加密和解密使用的密鑰,抽象為數據結構struct crypto_aes_ctx,如下所示:
/** Please ensure that the first two fields are 16-byte aligned* relative to the start of the structure, i.e., don't move them!*/
struct crypto_aes_ctx {u32 key_enc[AES_MAX_KEYLENGTH_U32]; //加密密鑰u32 key_dec[AES_MAX_KEYLENGTH_U32]; //解密密鑰u32 key_length; //密鑰長度
};
  • AES算法運行所需的上下文空間大小cra_ctxsize=sizeof(struct crypto_aes_ctx)(即484字節)
  • 問題:AES不是屬于對稱加密算法嗎?加密和解密使用的是相同的密鑰,為什么結構體里面獨立設計呢?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446062.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 累進計費率計算_設計費400萬,繳納所得稅100萬,如何籌劃

很多公司老板都會把利潤放在第一位&#xff0c;照理說這是沒錯的&#xff0c;公司要盈利才能繼續經營下去。我國有很多針對小微企業的政策&#xff0c;盈利不高的情況下&#xff0c;基本不會去考慮納稅問題&#xff0c;也沒有多少稅收壓力。但是對一些暴利的服務型行業、軟件設…

linux加密框架 crypto 算法管理 - 哈希算法應用實例

參考鏈接 Linux加密框架應用示例&#xff08;二&#xff09;_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程_CHYabc123456hh的博客-CSDN博客 在應用模塊中創建并初始化哈希算法實例 假設某個SA配置使用的認證算法為"hmac(md5…

guido python正式發布年份_Python語言適合哪些領域的計算問題? (1.3分)_學小易找答案...

【單選題】關于Python中的復數,下列說法錯誤的是 (1.3分)【多選題】藥物作用的基本規律包括?【單選題】Python 中,以下哪個賦值操作符是錯誤的? (1.3分)【單選題】哪個選項是下面代碼的執行結果? s "abcd1234" print ( s . find ( "cd" )) (1.3分)【填…

Linux加密框架 crypto crypto_larval | crypto_larval_alloc | __crypto_register_alg 介紹

參考鏈接 Lniux加密框架中的主要數據結構&#xff08;五&#xff09;_家有一希的博客-CSDN博客crypto_larval struct crypto_larval {struct crypto_alg alg;struct crypto_alg *adult;struct completion completion;u32 mask; };結構體名叫 crypto_larval &#xff08;算法幼…

好玩的腳本代碼大全_Github | 推薦一個Python腳本集合項目

點擊上方"藍字"關注我們Python大數據分析記錄 分享 成長用python寫小腳本是一件好玩的事情&#xff0c;因為不是個大活兒&#xff0c;而且能解決眼邊前十分繁瑣的事情&#xff0c;這種輕松且便宜的代碼頗受人民群眾的歡迎~有點生活小妙招的意味大家較為熟知的腳本…

linux加密框架 crypto 算法管理 - 算法查找接口

參考鏈接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup_CHYabc123456hh的…

python中以下關于列表描述錯誤的_10. 以下關于列表操作的描述,錯誤的是:_學小易找答案...

【單選題】Python 語句 a1211.21 print(type(a)) 的輸出結果為( )【單選題】Python語句序列"s1 [4, 5, 6]; s2 s1; s1[1]0; print(s2)"的運行結果是( )。【填空題】Python語句print(%d%%%d%(3/2, 3%2))的運行結果是( 1 )。【單選題】python語句print(type(123))的數…

寫論文注意事項

參考鏈接 給研究生修改了一篇論文后&#xff0c;該985博導幾近崩潰…… 重點分析 摘要與結論幾乎重合 這一條是我見過研究生論文中最常出現的事情&#xff0c;很多情況下&#xff0c;他們論文中摘要部分與結論部分重復率超過70%。對于摘要而言&#xff0c;首先要用一小句話引…

xml模糊查詢語句_2Mybatis學習筆記07:動態SQL語句(原創,轉載請注明來源)

開發環境&#xff1a;硬件環境&#xff1a;Windows10JDK 1.8&#xff1b; 軟件環境&#xff1a;JavaEclipseMybatismaven3.6tomcat8.0Postgresql 10.6&#xff1b; 用到的jar包&#xff1a; asm-3.3.1.jar cglib-2.2.2.jar commons-logging-1.1.1.jar javassist-3.17.1-GA.jar …

硬件密碼組件的硬件結構、作用及實現應用設計

引 言 1 硬件密碼組件的概念 密碼技術是解決信息安全問題的核心技術。要實現信息的保密性、完整性、可控性和不可否認性等安全要求&#xff0c;都離不開密碼技術的運用。在具體的信息安全系統中&#xff0c;密碼技術的運用可以基于軟件密碼組件&#xff08;簡稱為SCM&#xf…

sql倒序查詢語句_SQL丨1.基本查詢語句復習

此為自用查詢語句1.selectSELECT column1,column2 FROM table1;常用的格式慣例&#xff1a;大寫了SELECT和FROM&#xff0c;而將表名和列名小寫&#xff1b;通常在列名中使用下劃線&#xff0c;避免使用空格&#xff1b;在每個語句末尾添加分號&#xff1b;SQL不區分大小寫。2.…

基于區塊鏈的檔案共享 項目啟動

注意事項 已經備份了一個配置fabric的完整ubuntu系統&#xff0c;其需要注意的細節如下1&#xff0c;此鏡像系統需要配置host文件&#xff0c;sudo vim /etc/hosts&#xff0c;添加如下內容127.0.0.1 orderer.example.com peer0.org1.example.com peer1.org1.example.c…

知道一點怎么設直線方程_【初中數學】反比例函數策略(二) ——構造方程法...

【相關閱讀】【初中數學】反比例函數策略之一 ——數形結合反比例函數策略(二)——構造方程法(王 橋)上一次&#xff0c;咱們探討了解決反比例函數的策略一——數形結合&#xff0c;本節課我們繼續反比例函數的策略(二)——構造方程法。構造方程法&#xff0c;在《春季攻勢》第…

音視頻處理 C語言編譯器

命令 gcc/clang -g -O2 -o test test.c -I ... -L ... -lgcc Linux環境下的命令&#xff1b;clang是MAC環境下的執行命令-g 輸出文件中的調試信息-O 對輸出文件進行指令優化-o 輸出文件&#xff0c;可執行文件-I 指定頭文件&#xff0c;大寫的i 從-I 開始 是鏈接內容&#x…

wpf將文字轉化為圖形_將創新轉化為實際應用

Worldsensing是全球公認的物聯網先驅。這家位于西班牙巴塞羅那的技術供應商成立于2008年&#xff0c;為城市和傳統行業提供運營情報。伊格納西維拉霍薩納(IgnasiVilajosana)是公司聯合創始人兼首席執行官。伊格納西擁有西班牙巴塞羅那大學物理學博士學位&#xff0c;還接受過美…

音視頻處理 FFmpeg相關內容介紹 以及八大

FFmpeg的介紹 FFmpeg由Fabrice Bellard于2000年創建&#xff0c;由C和匯編語言進行開發FF -> Fast Forward 快進mpeg -> 標準化組織 Moving Pictures Experts Group使用到FFmpeg的開源項目gstreamer: a framework for streaming mediachromiummpv: Command line video pl…

python開發wince軟件_Wince6.0應用開發:二、模擬器的使用

上一篇我們只是搭建我們的開發平臺&#xff0c;那么下面我們結合之前安裝的Wince6.0模擬器進行簡單的開發&#xff0c;來了解一個操作流程一直寫的東西都是很直白的&#xff0c;(*^__^*) 嘻嘻……一、連接上我們的模擬器1、打開vs2008&#xff0c;選擇工具---->設備仿真器管…

python預測股票價格tushare_用tushare對股票進行簡單分析

用tushare對股票進行簡單分析(僅供交流學習)import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport tushare as ts#使用tushare 獲取每只股票的行情數據df ts.get_k_data(‘600519’,start‘2008-01-01’)print(type(df))df.to_csv(‘600519.csv’)df …

音視頻處理 基礎開發 語言基礎

基礎開發內容 Vim編譯器C語言回顧&#xff0c;重點介紹指針的概念Linux/MAC C語言的編譯和調試Linux/MAC 常用開發工具介紹 Vim編譯器 命令模式 拷貝 刪除 粘貼等&#xff0c;通過i / a 等切換到編輯模式編輯模式 編輯字符&#xff0c;通過ESC進行切換常用命令 創建文件 vim …

python 人氣高的項目_給大家推薦:五個Python小項目,Github上的人氣很高的!

1.深度學習框架 PytorchPyTorch 是一個 Torch7 團隊開源的 Python 優先的深度學習框架&#xff0c;提供兩個高級功能&#xff1a;● 強大的 GPU 加速 Tensor 計算(類似 numpy)● 構建基于 tape 的自動升級系統上的深度神經網絡● 你可以重用你喜歡的 python 包&#xff0c;如 n…