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.mzph.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…