您的位置 首页 编程

一文看懂码灵半导体CFW32C7UL系列产品应用(三): 国际标准加解密算法

欢迎再次来到“码灵半导体CFW32C7UL系列产品应用介绍”连载专题。通过前几期对CFW32C7UL系列的国密算法介绍,相信大家对码灵半导体CFW32C7UL系列的国密硬件模块有了充分的了解。由于发展

欢迎再次来到“码灵半导体CFW32C7UL系列产品运用介绍”连载专题。经过前几期对CFW32C7UL系列的国密算法介绍,信任咱们对码灵半导体CFW32C7UL系列的国密硬件模块有了充沛的了解。

图片.png

因为开展进程原因,现在市场上商用暗码运用依然以国际规范加解密算法为主,不过随国家对国密算法的推动,未来国密算法的运用也会越来越广泛。码灵半导体CFW32C7UL系列的加解密模块除了之前介绍的国密暗码算法以外,还支撑国际规范加解密算法的AES加解密算法和SHA-1、SHA-256哈希算法。本专题聚集于CFW32C7UL系列所支撑的国际规范加解密算法硬件模块:AES分组加解密算法和SHA哈希算法。以下咱们详细介绍下CFW32C7UL系列AES和SHA模块的运用以及加解密的速度。

一、AES分组加解密算法

AES是Advanced Encryption Standard的缩写,即高档加密规范,在暗码学中又称Rijndael加密法,是美国联邦政府选用的一种区块加密规范。高档加密规范是由美国国家规范与技能研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有用的规范。这个规范用来代替原先的DES,现已被多方剖析且广为全世界所运用,至2006年,高档加密规范已然成为对称密钥加密中最盛行的算法之一。

1、CFW32C7UL AES分组算法的完结

CFW32C7UL 系列的AES模块可完结规范AES加解密运算和AES-CM、AES-F8加密运算。规范AES算法即AES规范(FIPS-197)中规则的算法。AES-CM和AES-F8算法在The Secure Real-time Transport Protocol(SRTP)中有详细阐明,这两种算法均以规范AES算法为根底,并对规范AES算法进行迭代运用。

AES模块中的规范AES算法除了支撑CPU输入输出外,还支撑DMA输入和DMA输出,而AES-CM、AES-F8只支撑DMA输出。

2、CFW32C7UL AES分组算法的运用

开发形式一:裸机SDK

现在CFW32C7UL系列裸机SDK支撑AES-CM, AES-F8,以及规范的AES加解密方法。其间AES-CM和AES-F8只支撑加密,不支撑解密。规范的AES方法支撑加密和解密。

在CFW32C7UL系列 AES的SDK中有个要害的CIPHER_AES_Init_TypeDef结构体:

typedef struct {

        uint32_t mode;

        uint32_t encrypt;

        uint32_t type;

        uint32_t key_len;

        uint32_t blk_num;

        uint32_t key[8];

        uint32_t key_f8_mask[8];

        uint32_t *input_data;

        uint32_t *output_data;

}CIPHER_AES_Init_TypeDef;

在运用AES算法之前需求初始化CIPHER_AES_Init_TypeDef结构体,初始化典范:

cipher_aes_init.encrypt = CIPHER_AES_CTRL_ENCRYPT;

cipher_aes_init.input_data= (uint32_t *)aes_in_data;

cipher_aes_init.output_data = (uint32_t *)aes_out_data;

cipher_aes_init.blk_num= 1; 加解密轮数

cipher_aes_init.key_len= CIPHER_AES_KEY_LEN_128BIT;

cipher_aes_init.key[0] = 0x21212121;设置AES 密钥,可自界说

cipher_aes_init.key[1] = 0x43434343;

cipher_aes_init.key[2] = 0x65656565;

cipher_aes_init.key[3] = 0x87878787;

装备cipher_aes_init结构体的初始化参数后,便能够进行相对应的AES加密运算。

AES CM加密算法:

cipher_aes_init.mode = CIPHER_AES_MODE_AES_CM;

HAL_CIPHER_CM_AES(&cipher_aes_init);

AES F8加密算法:

cipher_aes_init.mode = CIPHER_AES_MODE_AES_F8;

HAL_CIPHER_F8_AES(&cipher_aes_init);

规范AES 加解密方法:

加密典范:

cipher_aes_init.encrypt = CIPHER_AES_CTRL_ENCRYPT;

cipher_aes_init.mode  = CIPHER_AES_MODE_AES_STD; 

HAL_CIPHER_StdAES(&cipher_aes_init);

解密典范:

cipher_aes_init.encrypt = CIPHER_AES_CTRL_DECRYPT;

cipher_aes_init.mode  = CIPHER_AES_MODE_AES_STD; 

HAL_CIPHER_StdAES(&cipher_aes_init);

开发形式二:Linux SDK

经过操作linux体系中/dev/wokoo_aes ,就能够进行规范AES分组加密算法的运算。

AES算法底层接口

open:翻开设备节点

read:读取加密/解密后的数据

write:写入加密前/解密前的数据以及密钥和装备

接口描绘:

open:

函数原型:static int uac_open(struct inode *inode, struct file * file)

参数:file:文件名

返回值:成功0,其它失利

read:

函数原型:static ssize_t uac_read(struct file * file, char __user *buffer, size_t size , loff_t *p)

参数:file:文件名,buffer:读出数据缓存,size:读出数据长度

返回值:成功0,其它失利

write:

函数原型:static ssize_t uac_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)

参数:file:文件名,buf:写入数据缓存,count:写入数据长度

返回值:成功0,其它失利

运用示例:

fd = open("/dev/wokoo_aes", O_RDWR);                       翻开aes节点

write(fd, &wokoo_aes, sizeof(struct wokoo_aes_t));        写入明文/密文,密钥等装备

read(fd, wokoo_aes.output_data, sizeof(wokoo_aes.output_data));   读出密文/明文

注:这儿的write写入的wokoo_aes结构体,如同在裸机中运用相同,会在调用前初始化一些参数,经过write把密钥和形式装备写入。

3、CFW32C7UL AES算法的功率:

现在码灵半导体CFW32C7UL系的能够完结规范AES加密速率是85KB/s。

二、SHA哈希算法模块

1、CFW32C7UL SHA哈希算法的完结

      CFW32C7UL系列的SHA哈希算法支撑SHA-1以及SHA-256。SHA1是SHA的较旧版本,可生成160位哈希值,而SHA256是SHA2的一种类型,可生成256位哈希值。

CFW32C7UL系列的SHA模块支撑DMA输入和CPU输入,输出仅支撑CPU输出。

 

2、CFW32C7UL SHA算法的运用

开发形式一:裸机SDK

现在裸机开发支撑SHA-1以及SHA-256两种哈希算法SDK,两种算法别离有CPU输入和DMA输入的方法。

在CFW32C7UL系列 SHA的SDK中有个要害的CIPHER_SHA_Init_TypeDef结构体,结构体界说如下:

typedef struct {

uint32_t mod;

uint32_t line_num;

uint32_t *input_data;

uint32_t *output_data;

}CIPHER_SHA_Init_TypeDef;

运用SHA SDK之前,需初始化这个结构体。包含设置数据量和设置数据的输入输出流。

cipher_sha_init.line_num = 0x01;  设置SHA的数据输入轮数为1

cipher_sha_init.input_data = (uint32_t *)sha_in_data;   设置SHA 输入流

cipher_sha_init.output_data = (uint32_t *)sha_out_data;   设置SHA输出流

装备完cipher_sha_init结构体的初始化参数后,便能够进行相对应的SHA哈希运算。

调用HAL_CIPHER_SHA_DMA()进行DMA输入方法SHA哈希运算。

cipher_sha_init.mod = CIPHER_SHA_MOD_SHA1;   装备SHA-1算法

HAL_CIPHER_SHA_DMA(&cipher_sha_init);                发动SHA-1算法   (DMA Input)

cipher_sha_init.mod = CIPHER_SHA_MOD_SHA256;  装备SHA-256算法

HAL_CIPHER_SHA_DMA(&cipher_sha_init);        发动SHA-256算法 (DMA Input)

调用HAL_CIPHER_SHA_CPU ()进行 CPU输入方法SHA哈希运算。

cipher_sha_init.mod = CIPHER_SHA_MOD_SHA1;   装备SHA-1算法

HAL_CIPHER_SHA_CPU (&cipher_sha_init);       发动SHA-1算法(CPU Input)

cipher_sha_init.mod = CIPHER_SHA_MOD_SHA256;  装备SHA-256算法

HAL_CIPHER_SHA_CPU (&cipher_sha_init);        发动SHA-256算法(CPU Input)

开发形式二:Linux SDK

经过操作linux体系中/dev/wokoo_sha ,便能够进行SHA算法的运算。

SHA算法底层接口

open:翻开设备节点

read:读取哈希后的数据

write:写入哈希的数据以及装备形式

接口描绘

open:

函数原型: static int uac_open(struct inode *inode, struct file * file)

参数:file:文件名

返回值:成功0,其它失利

 read:

函数原型:static ssize_t uac_read(struct file * file, char __user *buffer, size_t size , loff_t *p)

参数:file:文件名,buffer:读出数据缓存,size:读出数据长度

返回值:成功0,其它失利

write:

函数原型:static ssize_t uac_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)

参数:file:文件名,buf:写入数据缓存,count:写入数据长度

返回值:成功0,其它失利

运用典范:

fd = open("/dev/wokoo_sha", O_RDWR);                         翻开sha节点

write(fd, &wokoo_sha, sizeof(struct wokoo_sha_t));           写入需求哈希的数据

read(fd, wokoo_sha.output_data, sizeof(wokoo_sha.output_data)); 读出哈希后的数据

类似地,LINUX在初始化wokoo_sha结构体时会依据给定参数挑选不同的算法,输入数据轮数和输入方法,依据不同的参数核算不同的成果。如下示例:

wokoo_sha.bit_mod = CIPHER_SHA_MOD_SHA256;                 挑选SHA-256方法

wokoo_sha.data_mod = CIPHER_SHA_TYPE_DMA;                      挑选DMA输入方法

wokoo_sha.line_num = 1;                                                           设置数据输入轮数为1

 

3、CFW32C7UL SHA算法的功率

现在码灵半导体CFW32C7UL系列SHA-1以及SHA-256的加密速率能够完结87KB/s。

经过这几期对码灵半导体CFW32C7UL系列的国密及国际规范加解密算法的介绍,信任咱们对CFW32C7UL系列的加解密模块有一个相对全面的了解。国密算法与国际规范加解密算法的对标联系是:国密算法的SM4和国际规范加解密算法AES对标,国密算法的SM3算法与国际规范加解密算法MD5、SHA-256等哈希算法对标,国密算法的SM2算法与国际规范加解密算法RSA、ECC算法对标。其实CFW32C7UL系列在芯片安全机制方面,除了加解密模块外还有其它的安全特性和功用装备,那它们详细都是什么呢?又有什么特色呢?让咱们带着这些问题,鄙人期中持续探寻吧。

本期作者:刘悦臻、梁梦雷、陈绍景、谢耀华、谢剑杰

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/114379.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部