原标题:Linux加解密支持模块代码详细分析
2.详细分析2.1.模块功能描述
Linux加解密模块在操作系统中主要通过对信息进行加密操作,防止非授权的用户获得敏感信息。模块的内部实现主要在算法模板组织下,找到对应算法实例,然后在适当的时机调用算法时为其分配算法对象,最后调用具体加密算法的钩子函数进行加解密操作。各部分执行顺序见图2-1。
图2-1 模块之间的关系
2.2.
Linux加解密模块中涉及的内部函数主要包含在文件api.c和algapi.c中,上述文件中函数关系参见api.c和algapi.c中内部函数解释。这里主要说明算法库提供的接口函数含义以及crypto_alloc_cipher和crypto_alloc_tfm两个函数的调用关系图。
Linux内核通过全局链表crypto_alg_list链接各个算法库的结构crypto_alg实例。它提供的算法库管理接口函数主要有crypto_alg_lookup、crypto_alg_mod_lookup、__crypto_register_alg、crypto_init_ops、crypto_alloc_cipher。
1. crypto_alg_lookup
函数原型:struct*(const char *,,);
函数功能:从链表crypto_alg_list中查找指定名字的算法库。
函数参数:name 算法名称;type算法类型; mask算法掩码。
函数返回值:函数返回对象。
2.crypto_alg_mod_lookup
函数原型:struct*(const char *,,);
函数功能:从链表查找算法,如果没找到,就装载算法库模块。
函数参数:name 算法名称; type算法类型; mask算法掩码。
函数返回值:函数返回对象。
3.__crypto_register_alg
函数原型:static struct*(struct*);
函数功能:注册算法,即将结构crypto_alg实例加入到链表crypto_alg_list中。
函数参数:alg 算法注册对象。
函数返回值:函数返回对象。
函数crypto_init_ops功能是初始化具体算法的操作函数。该函数主要是针对不同的算法类型进行初始化。比如宏CRYPTO_ALG_TYPE_CIPHER对应函数crypto_init_cipher_ops的处理以及宏CRYPTO_ALG_TYPE_COMPRESS对应函数crypto_init_compress_ops。函数crypto_alloc_tfm功能是为算法分配内核空间,具体调用关系见图2-2。
图 2-2 函数crypto_alloc_tfm调用关系
函数crypto_alloc_cipher调用关系见图2-3。
图2-3 函数crypto_alloc_cipher调用关系
2.3.函数实现机制
Linux加解密支持分析模块的主要函数包含在文件algapi.c和api.c中,具体函数实现机制参见下文。返回搜狐,查看更多
责任编辑: