Linux内核-Crypto
文章平均质量分 74
生活需要深度
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux加密框架 crypto 算法管理 - 动态和静态算法管理
如果是当前查找线程发布的创建动态算法通知,则larval为待创建算法同名的注册用算法幼虫,用于向创建动态算法的内核线程传递待创建算法的算法名、算法类型等信息,此时算法管理链表如下所示,其中cbc_aes_larval_r表示"cbc(aes)"算法对应的注册用算法幼虫。加密框架中的算法分为静态算法和动态算法两种,其中静态算法指的是以"算法名.ko"形式存在的静态编译的算法模块,如aes.ko表示AES算法模块,md5.ko表示MD5算法模块。tb:参数名(T)列表,不含参数值,以NULL结尾。原创 2025-05-06 22:50:08 · 1063 阅读 · 0 评论 -
linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup
6)如果前两次查找命中,但查找到的是算法幼虫(可能是注册用算法幼虫也可能是检测用算法幼虫),说明符合要求的算法正在注册中,调用crypto_larval_wait函数等待算法注册完成,返回注册成功的算法。crypto_larval_add函数要么返回第三次查找命中的算法(如果是算法幼虫,则调用crypto_larval_wait函数等待算法注册完成,返回新注册的算法)要么返回创建的注册用算法幼虫(已添加到算法管理链表中)。1)在算法查找前首先确认算法名是否有效,如果算法名为空,终止查找流程,返回异常。原创 2025-05-06 22:49:34 · 445 阅读 · 0 评论 -
linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup
4)如果查找到的是算法幼虫,即当前线程创建的注册用算法幼虫,在加密通知链发布创建动态算法的通知,由专门的内核线程负责创建并注册动态算法,算法查找线程调用crypto_larval_wait函数等待算法注册完成,然后调用crypto_larval_kill函数清理注册用算法幼虫。2)外部应用使用的算法必须是经过正确性检验(即算法标志中已置CRYPTO_ALG_TESTED状态位)的,因此在查找前更新待查找算法的算法类型type和算法类型屏蔽位mask,确保后续查找到的算法是经过正确性检验的、可用的算法。原创 2025-05-06 22:48:48 · 419 阅读 · 0 评论 -
linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg
异步哈希算法实例前端crypto_ahash_type中,type=CRYPTO_ALG_TYPE_AHASH(0x09)表示最佳的算法类型为异步哈希算法,mask=CRYPTO_ALG_TYPE_AHASH_MASK(0x0C),而type&mask=0x08(CRYPTO_ALG_TYPE_HASH)表示只要是哈希算法就行,不强求实现方式。crypto_alg_mod_lookup,这样crypto_find_alg函数相当于crypto_alg_mod_lookup函数的包裹函数。原创 2025-05-06 22:48:18 · 355 阅读 · 0 评论 -
linux加密框架 crypto 静态哈希算法crypto_register_shash注册流程
2)准备工作完成后,静态哈希算法的注册流程也是由静态算法注册函数crypto_register_alg完成,注意的是crypto_register_shash函数的输入参数为哈希算法说明alg,而调用crypto_register_alg函数时的输入参数为哈希算法说明对应的通用算法说明base(=&alg->base)。3)crypto_register_shash函数中接口调用情况如下所示,其中salg为待注册哈希算法的同步哈希算法说明,alg为待注册哈希算法的通用算法说明。原创 2025-05-06 22:47:46 · 196 阅读 · 0 评论 -
linux加密框架 crypto 算法crypto_register_alg的注册流程
从流程上看,算法正确性检验的结果不影响算法注册的正常结束,但是通过正确性校验的算法的算法标志cra_flags会设置算法已检测状态位(CRYPTO_ALG_TESTED)。1)crypto_check_alg函数实现检查算法说明alg的有效性(包括地址对齐要求、块大小、优先级等)和设置算法驱动名cra_driver_name两项功能,其中设置算法驱动名的功能由crypto_set_driver_name函数实现,如果未设置算法驱动名,则按照“算法名-generic”格式设置算法驱动名。原创 2025-05-06 22:46:41 · 326 阅读 · 0 评论 -
Linux加密框架 crypto算法模板 以及HMAC算法模板实例
本文详细介绍了Linux加密框架中HMAC算法模板实例的创建方法,通过hmac_create函数展示了如何使用crypto_template结构和rtattr参数,以及关键步骤如检查算法类型、实例注册等。输入的参数包括 算法模板 tmpl 和 算法模板实例参数 tb。hmac_cretae函数返回的结果为0表示算法模板实例已经创建注册。HMAC算法模板的创建实例的接口是hmac_create函数。hmac_create函数创建并且注册的流程如下图所示。HMAC算法模板实例。原创 2025-05-03 09:11:29 · 272 阅读 · 0 评论 -
Linux加密框架 crypto算法模板 以及CBC算法模板实例
每个参数都是TLV格式,类型T有CRYPTOA_TYPE(算法类型)、CRYPTOA_ALG(基础算法名)、CRYPTOA_U32等多种类型,而每种类型的参数值不同,因此接口输入参数tb的数据类型struct rtattr只包括rta_len和rta_type两个成员变量,分别对应着TLV结构的L和T,参数值数据结构根据参数类型定义。CBC算法模板的创建实例接口为crypto_cbc_alloc,输入参数为创建CBC算法模板实例的参数tb,返回值为新创建的算法模板实例。原创 2025-05-02 08:31:48 · 686 阅读 · 0 评论 -
Linux内核crypto子系统的调用逻辑
毕竟crypto_alg这个结构里的.cra_init, .cra_exit, .cra_u里的.coa_compress都需要这个执行上下文。主要的逻辑就三个函数, 首先需要分配一个压缩的上下文(本文用压缩的例子), 其实它就是crypto_tfm的包装,和cryto_tfm是一样的: 紫色的删去 ,我没找到这个压缩的例子。处于用户态的程序想要调用处于内核态的密码算法,需要使用crypto_register_alg函数提交对应的相关信息,进行注册,将一个内核支持的算法注册到crypto系统里。原创 2025-05-02 08:31:18 · 734 阅读 · 0 评论 -
Linux加密框架 crypto 算法模板 CBC模板举例
本文解析了Linux加密框架中的CBC算法模板,深入探讨了cbc.c文件中crypto_cbc_create接口及其内部实现,以及skcipher.c中的skcipher_alloc_instance_simple函数,展示了如何为CBC算法实例化内存分配。skcipher.c - crypto/skcipher.c - Linux source code (v5.15.11) - Bootlin 内存分配。2)CBC算法模板定义的创建实例接口为crypto_cbc_create,内部调用。原创 2025-05-02 08:30:02 · 304 阅读 · 0 评论 -
Linux加密框架 crypto 算法模板
每个参数都是TLV格式,类型T有CRYPTOA_TYPE(算法类型)、CRYPTOA_ALG(基础算法名)、CRYPTOA_U32等多种类型,而每种类型的参数值不同,因此接口输入参数tb的数据类型struct rtattr只包括rta_len和rta_type两个成员变量,分别对应着TLV结构的L和T,参数值数据结构根据参数类型定义。7)create:创建算法模板实例的接口。5)alloc:创建算法模板实例(struct crypto_instance)的接口,返回值为新创建的算法模板实例。原创 2025-05-02 08:29:32 · 285 阅读 · 0 评论 -
Linux加密框架 crypto 哈希算法举例 MD5
分组算法不同,某些外部应用可能调用静态哈希算法(如MD5算法)计算输入消息的摘要值(如某些文件的MD5值),但是MD5算法的通用算法说明md5_alg中未设置算法类型常量cra_type,而是在哈希算法注册的准备阶段(shash_prepare_alg函数)统一设置为crypto_shash_type。对外部应用来说,不关心哈希算法的实现方式,因此将使用的哈希算法的算法类型标注为CRYPTO_ALG_TYPE_HASH,如IPSEC将使用的哈希算法标记为CRYPTO_ALG_TYPE_HASH。原创 2025-05-02 08:29:00 · 322 阅读 · 0 评论 -
Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common
个性化属性数据结构中的算法接口是静态哈希算法和动态哈希算法的算法接口合集,如静态哈希算法不用实现setkey接口(将默认的shash_no_setkey作为setkey接口实现),而HMAC算法是与密钥相关的,涉及到密钥输入必须实现setkey接口。同步哈希算法说明数据结构中的算法接口为哈希算法接口全集,包括最小集的三段式调用接口(init、update和final),也包括在最小集基础上衍生出来的两段式调用接口(init和finup)以及一段式调用接口(digest)。原创 2025-05-02 08:28:29 · 926 阅读 · 0 评论 -
Linux加密框架 crypto RC4
RC4算法虽然是一个序列算法,但在加密框架中按照分组长度为1的分组算法实现,因此其算法类型为CRYPTO_ALG_TYPE_CIPHER(待定 存疑),个性化属性中密钥长度的下限和上限分别为ARC4_MIN_KEY_SIZE(1)、ARC4_MAX_KEY_SIZE(256)三个算法接口为密钥设置接口crypto_arc4_set_key、加密接口和解密接口均为crypto_arc4_crypt。使用序列算法时,其加密/解密操作都是密码流和明文/密文的异或过程,因此其加密接口和解密接口相同。原创 2025-05-02 08:27:57 · 253 阅读 · 0 评论 -
Linux加密框架crypto crypto_alg|cipher_alg数据结构|AES例子
crypto_alg中各成员变量含义如下所示,其中前缀。请使用手机"扫一扫"x。原创 2025-05-02 08:27:26 · 907 阅读 · 0 评论 -
Linux加密框架crypto AES代码相关
AES算法的三个算法接口分别为crypto_aes_set_key、aes_encrypt和aes_decrypt。分组算法的算法接口,包括密钥设置接口cia_setkey、加密接口cia_encrypt和解密接口cia_decrypt,算法运行的上下文空间由算法实例tfm提供。注:由于算法应用不会直接使用AES算法的算法接口,因此其算法说明aes_alg未设置算法类型常量cra_type。分组算法输入密钥长度的下限cia_min_keysize和上限cia_max_keysize。原创 2025-05-02 08:26:56 · 893 阅读 · 0 评论 -
Linux加密框架中的算法和算法模式
算法原创 2025-05-02 08:26:23 · 525 阅读 · 0 评论 -
Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式
若第一个块的下标为1,则CBC模式的加密过程为Ci=Ek(Pi⊕Ci-1),C0=IV,而其解密过程为Pi=Dk(Ci)⊕Ci-1,C0=IV,其中Pi表示第i个明文块,Ci表示第i个密文块,E和D分别为加密器和解密器,k为密钥。HMAC运算表达式为HMAC(K,M)=H((K’⊕opad)||H((K’⊕ipad)||M)),其中⊕表示异或运算,||表示级联运算,M为一个输入消息,opad为与数据块等长的0x5C,ipad为与数据块等长的0x36,K’为密钥K以0x00填充的与数据块等长的字符串。原创 2025-05-02 08:23:22 · 621 阅读 · 0 评论 -
Linux crypto相关知识的汇总 Linux加密框架crypto中的算法和算法模式(一)
SHA系列算法的摘要长度分贝为:SHA1为20字节(160位)、SHA256为32字节(256位)、SHA384位48字节(384位)、SHA512为64字节(512位),其中SHA1应用较为广泛,主要应用于CA和数字证书中,但已被中国山东大学王小云教授攻破,可以快速找到碰撞。3DES(即Triple DES)是DES向AES过渡的加密算法,是比DES更安全的一种变形,3DES使用2条56位的密钥对数据执行三次DES算法,加密过程是加密e-解密d-加密e,解密过程是解密e-加密d-解密e。原创 2025-05-02 08:22:13 · 804 阅读 · 0 评论 -
Linux内核 crypto文件夹 密码学知识学习
crypto_type就是用于重载crypto_alg中的cra_u中的各个类中的成员函数,当通过crypto_alloc_base,crypto_create_tfm等接口申请相应的crypto的TFM上下文时,若有传入crypto_type参数,TFM优先使用crypto_type中的init_tfm成员函数去初始化crypto_tfm衍生类的操作方法。type指算法类型;CRYPTO_MINALIGN_ATTR的含义是通过可能的字节填充,使得ctx是以最大的对齐标准对齐的,防止出现对齐错误。原创 2025-05-02 08:21:23 · 1200 阅读 · 0 评论 -
Linux内核学习笔记——Crypto基础框架
这里会涉及到“算法动态注册”,即如果在crypto_alg_list链表中没有找到name为”ecb(aes)”的crypto_alg对象,那crypto子系统会通过一个名为”cryptomgr_probe”的内核线程查找到name为“ecb”的crypto_template对象,以及查找到name为”aes”的crypto_alg对象,动态创建出一个name为“ecb(aes)”的crypto_alg并注册到链表当中。那我们在使用kernel中的算法时,框架内部是如何做处理的呢?原创 2025-05-02 07:58:38 · 595 阅读 · 0 评论
分享