导航:首页 > 编程语言 > linux编程框架

linux编程框架

发布时间:2025-02-17 02:00:46

linux加解密框架(二)算法注册

本文基于以下软硬件假定:

架构:AARCH64

内核版本:5.14.0-rc5

内核对加解密算法的管理

加解密算法可分为对称算法、非对称算法、hash算法、mac算法以及aead算法等不同的种类。对称算法包括aes、des、3des、sm4、rc4、blowfish等,hash算法包括md5、sha1、sha256、sha512、sha3、sm3等。

同一种算法可以有多种不同的实现,如aes算法可以由纯软件实现,可以由cpu架构的加解密指令加速,还可以通过独立的加解密硬件加速等。此外,有些算法还有不同的加解密模式,基础加解密算法可以与相关的模式进一步组合,形成新的算法实例。

为了支持以上需求,内核分别为其抽象出了算法类型、普通算法、基础算法以及算法模板。其中算法类型用于表示某一类算法,如对称算法使用crypto_skcipher结构体表示,hash算法用crypto_ahash表示等。内核统一使用crypto_alg结构体表示所有的算法实现,并用一个全局链表来管理所有注册到crypto core中的crypto_alg,以下为其示例结构:

内核使用算法名(cra_name)来表示某一特定的算法,而使用算法驱动名(cra_driver_name)来表示算法的特定实现。不同的crypto_alg可以含有相同的cra_name,但其cra_driver_name是唯一的。用户可以使用cra_name或cra_driver_name来调用相关算法,为了在用户使用cra_name参数时选择最优的算法实现,内核对每种crypto_alg都定义了一个优先级。当给定cra_name还有多种不同实现时,则选择其中优先级最高的算法实现。

内核还支持基础对称加解密算法(指该算法在加解密时只操作单个block,而不涉及与block数据组合相关的加解密模式)。它们可通过算法模板(template),与不同的算法模式组合成完整的加解密算法。如aes算法可与ecb、cbc、ctr模式分别组合成ecb(aes)、cbc(aes)和ctr(aes)算法,des算法也可与ecb、cbc、ctr模式组合为ecb(des)、cbc(des)和ctr(des)算法等。内核通过特定的标志CRYPTO_ALG_TYPE_CIPHER来标识这类算法。

最后,为了保证注册算法的正确性,当新算法被注册到crypto core之前,内核会先对其进行自测。为此在自测成功之前,这些算法会由crypto_larval管理,它包含了larval算法和alt算法,当自测成功后,才将alt算法标记为tested,并销毁其对应的larval算法。

数据结构

2.1 crypto_alg结构体

该结构体是加解密算法的基础结构体,主要用于描述算法的通用属性,如算法名称、算法驱动名称、分组大小、数据对齐值等。当一个算法被注册到加解密核心中时,crypto_alg将会通过该节点挂到全局的算法链表crypto_alg_list上。此后,加解密核心就可以通过遍历该链表查找该算法。

2.2 skcipher_alg结构体

以下为该结构体的定义:

设置密钥回调函数、加密回调函数、解密回调函数、算法初始化回调函数、算法退出回调函数、算法支持的最短密钥长度、算法支持的最长密钥长度、算法支持的iv长度、对于块密码算法,该值等于block size、若算法在并行处理多个块时效率更高,则为chunksize的整数倍,否则等于chunksize、基础算法结构体。

2.3 crypto_larval结构体

该结构体在算法注册时用于其自测流程,其结构体定义如下:

算法注册时的临时算法结构体、算法注册时最终使用的实际算法结构体、用于算法自测同步操作的完成量。

加解密算法注册流程

加解密算法注册的主要工作为将对应算法加入全局算法链表中,并触发算法自测流程。由于在自测完成之前,该算法还不能被调用,因此会为其分配一个crypto_larval结构体,用于其在自测时的管理。

3.1 算法校验

crypto_check_alg函数用于校验待注册算法的合法性,如其对齐值、block size等是否位于合理范围。

3.2 __crypto_register_alg实现

该函数首先检查该算法是否已注册,且已注册算法链表中是否有重名的算法,若检查通过则为其分配并初始化一个算法自测使用的crypto_larval结构体。然后将该算法与larval临时算法都添加到全局算法链表中。

3.3 crypto_wait_for_test流程

该函数会通过通知方式触发该算法的自测流程,然后等待自测完成。

3.4 算法自测流程

加解密核心通过cryptomgr_init函数注册加解密算法相关的通知,该通知主要用于触发算法自测和模板示例创建工作。

4 特定算法类型的注册接口

由于不同算法类型会在crypto_alg基础上封装其自身的算法结构体,因此它们也相应地封装了其对应的算法注册接口,我们在注册某特定算法时,通常都是使用该算法类型对应的注册接口完成。

5 基础对称加解密算法注册

基础对称加解密算法指单次加密或解密操作固定为一个block的加解密算法,该算法一般会通过加解密模板,与特定的加解密模式功能生成组合算法。

以内核中的通用aes加解密基础算法aes-generic为例,其注册流程如下:

指示该算法为基础cipher算法、设置基础cipher算法的属性和回调函数。其中crypto_aes_encrypt和crypto_aes_decrypt在单次调用中只能加解密一个block。

阅读全文

与linux编程框架相关的资料

热点内容
hmcl为什么在服务器显示不出皮肤 浏览:902
义大夫app上的约诊是什么 浏览:427
安卓手机如何安装苹果的app 浏览:866
如何查询服务器是什么品牌 浏览:58
ios什么app可以玩电脑游戏 浏览:58
28运营源码 浏览:349
移动地图定位系统python 浏览:878
云南服务器机房有哪些云空间 浏览:923
日产金融解压车 浏览:830
编译的综合模型和分析模型 浏览:608
javasql分页 浏览:679
农场理财游戏源码 浏览:503
悦动开了空调但压缩机不工作 浏览:11
phptimestamp转换 浏览:694
是不是程序员只招本科生 浏览:638
有没有加密手机文件夹的软件 浏览:760
多个c语言编译 浏览:667
腰部压缩性骨折卧床不吃药能好吗 浏览:817
整体齿轮式压缩机 浏览:686
招程序员学徒是真是假 浏览:428