在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 一文看懂碼靈半導(dǎo)體CFW32C7UL系列產(chǎn)品應(yīng)用(三): 國(guó)際標(biāo)準(zhǔn)加解密算法

            一文看懂碼靈半導(dǎo)體CFW32C7UL系列產(chǎn)品應(yīng)用(三): 國(guó)際標(biāo)準(zhǔn)加解密算法

            作者: 時(shí)間:2020-07-31 來(lái)源:EEPW 收藏

            歡迎再次來(lái)到“系列產(chǎn)品應(yīng)用介紹”連載專題。通過(guò)前幾期對(duì)系列的國(guó)密算法介紹,相信大家對(duì)系列的國(guó)密硬件模塊有了充分的了解。

            本文引用地址:http://www.biyoush.com/article/202007/416534.htm

            圖片.png

            由于發(fā)展歷程原因,目前市場(chǎng)上商用密碼使用仍然以國(guó)際標(biāo)準(zhǔn)加解密算法為主,不過(guò)隨國(guó)家對(duì)國(guó)密算法的推進(jìn),未來(lái)國(guó)密算法的應(yīng)用也會(huì)越來(lái)越廣泛。CFW32C7UL系列的加解密模塊除了之前介紹的國(guó)密密碼算法以外,還支持國(guó)際標(biāo)準(zhǔn)加解密算法的AES加解密算法和SHA-1、SHA-256哈希算法。本專題聚焦于CFW32C7UL系列所支持的國(guó)際標(biāo)準(zhǔn)加解密算法硬件模塊:AES分組加解密算法和SHA哈希算法。以下我們具體介紹下CFW32C7UL系列AES和SHA模塊的使用以及加解密的速度。

            一、AES分組加解密算法

            AES是Advanced Encryption Standard的縮寫(xiě),即高級(jí)加密標(biāo)準(zhǔn),在密碼學(xué)中又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。高級(jí)加密標(biāo)準(zhǔn)是由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用,至2006年,高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱密鑰加密中最流行的算法之一。

            1、CFW32C7UL AES分組算法的實(shí)現(xiàn)

            CFW32C7UL 系列的AES模塊可完成標(biāo)準(zhǔn)AES加解密運(yùn)算和AES-CM、AES-F8加密運(yùn)算。標(biāo)準(zhǔn)AES算法即AES標(biāo)準(zhǔn)(FIPS-197)中規(guī)定的算法。AES-CM和AES-F8算法在The Secure Real-time Transport Protocol(SRTP)中有詳細(xì)說(shuō)明,這兩種算法均以標(biāo)準(zhǔn)AES算法為基礎(chǔ),并對(duì)標(biāo)準(zhǔn)AES算法進(jìn)行迭代運(yùn)用。

            AES模塊中的標(biāo)準(zhǔn)AES算法除了支持CPU輸入輸出外,還支持DMA輸入和DMA輸出,而AES-CM、AES-F8只支持DMA輸出。

            2、CFW32C7UL AES分組算法的使用

            開(kāi)發(fā)模式一:裸機(jī)SDK

            目前CFW32C7UL系列裸機(jī)SDK支持AES-CM, AES-F8,以及標(biāo)準(zhǔn)的AES加解密方式。其中AES-CM和AES-F8只支持加密,不支持解密。標(biāo)準(zhǔn)的AES方式支持加密和解密。

            在CFW32C7UL系列 AES的SDK中有個(gè)關(guān)鍵的CIPHER_AES_Init_TypeDef結(jié)構(gòu)體:

            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結(jié)構(gòu)體,初始化范例:

            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; 加解密輪數(shù)

            cipher_aes_init.key_len= CIPHER_AES_KEY_LEN_128BIT;

            cipher_aes_init.key[0] = 0x21212121;設(shè)置AES 密鑰,可自定義

            cipher_aes_init.key[1] = 0x43434343;

            cipher_aes_init.key[2] = 0x65656565;

            cipher_aes_init.key[3] = 0x87878787;

            配置cipher_aes_init結(jié)構(gòu)體的初始化參數(shù)后,便可以進(jìn)行相對(duì)應(yīng)的AES加密運(yùn)算。

            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);

            標(biāo)準(zhǔn)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);

            開(kāi)發(fā)模式二:Linux SDK

            通過(guò)操作linux系統(tǒng)中/dev/wokoo_aes ,就可以進(jìn)行標(biāo)準(zhǔn)AES分組加密算法的運(yùn)算。

            AES算法底層接口

            open:打開(kāi)設(shè)備節(jié)點(diǎn)

            read:讀取加密/解密后的數(shù)據(jù)

            write:寫(xiě)入加密前/解密前的數(shù)據(jù)以及密鑰和配置

            接口描述:

            open:

            函數(shù)原型:static int uac_open(struct inode *inode, struct file * file)

            參數(shù):file:文件名

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

            read:

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

            參數(shù):file:文件名,buffer:讀出數(shù)據(jù)緩存,size:讀出數(shù)據(jù)長(zhǎng)度

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

            write:

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

            參數(shù):file:文件名,buf:寫(xiě)入數(shù)據(jù)緩存,count:寫(xiě)入數(shù)據(jù)長(zhǎng)度

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

            使用示例:

            fd = open("/dev/wokoo_aes", O_RDWR);                       打開(kāi)aes節(jié)點(diǎn)

            write(fd, &wokoo_aes, sizeof(struct wokoo_aes_t));        寫(xiě)入明文/密文,密鑰等配置

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

            注:這里的write寫(xiě)入的wokoo_aes結(jié)構(gòu)體,如同在裸機(jī)中使用一樣,會(huì)在調(diào)用前初始化一些參數(shù),通過(guò)write把密鑰和模式配置寫(xiě)入。

            3、CFW32C7UL AES算法的效率:

            目前碼靈半導(dǎo)體CFW32C7UL系的可以實(shí)現(xiàn)標(biāo)準(zhǔn)AES加密速率是85KB/s。

            二、SHA哈希算法模塊

            1、CFW32C7UL SHA哈希算法的實(shí)現(xiàn)

                  CFW32C7UL系列的SHA哈希算法支持SHA-1以及SHA-256。SHA1是SHA的較舊版本,可生成160位哈希值,而SHA256是SHA2的一種類型,可生成256位哈希值。

            CFW32C7UL系列的SHA模塊支持DMA輸入和CPU輸入,輸出僅支持CPU輸出。

             

            2、CFW32C7UL SHA算法的使用

            開(kāi)發(fā)模式一:裸機(jī)SDK

            目前裸機(jī)開(kāi)發(fā)支持SHA-1以及SHA-256兩種哈希算法SDK,兩種算法分別有CPU輸入和DMA輸入的方式。

            在CFW32C7UL系列 SHA的SDK中有個(gè)關(guān)鍵的CIPHER_SHA_Init_TypeDef結(jié)構(gòu)體,結(jié)構(gòu)體定義如下:

            typedef struct {

            uint32_t mod;

            uint32_t line_num;

            uint32_t *input_data;

            uint32_t *output_data;

            }CIPHER_SHA_Init_TypeDef;

            使用SHA SDK之前,需初始化這個(gè)結(jié)構(gòu)體。包括設(shè)置數(shù)據(jù)量和設(shè)置數(shù)據(jù)的輸入輸出流。

            cipher_sha_init.line_num = 0x01;  設(shè)置SHA的數(shù)據(jù)輸入輪數(shù)為1

            cipher_sha_init.input_data = (uint32_t *)sha_in_data;   設(shè)置SHA 輸入流

            cipher_sha_init.output_data = (uint32_t *)sha_out_data;   設(shè)置SHA輸出流

            配置完cipher_sha_init結(jié)構(gòu)體的初始化參數(shù)后,便可以進(jìn)行相對(duì)應(yīng)的SHA哈希運(yùn)算。

            調(diào)用HAL_CIPHER_SHA_DMA()進(jìn)行DMA輸入方式SHA哈希運(yùn)算。

            cipher_sha_init.mod = CIPHER_SHA_MOD_SHA1;   配置SHA-1算法

            HAL_CIPHER_SHA_DMA(&cipher_sha_init);                啟動(dòng)SHA-1算法   (DMA Input)

            cipher_sha_init.mod = CIPHER_SHA_MOD_SHA256;  配置SHA-256算法

            HAL_CIPHER_SHA_DMA(&cipher_sha_init);        啟動(dòng)SHA-256算法 (DMA Input)

            調(diào)用HAL_CIPHER_SHA_CPU ()進(jìn)行 CPU輸入方式SHA哈希運(yùn)算。

            cipher_sha_init.mod = CIPHER_SHA_MOD_SHA1;   配置SHA-1算法

            HAL_CIPHER_SHA_CPU (&cipher_sha_init);       啟動(dòng)SHA-1算法(CPU Input)

            cipher_sha_init.mod = CIPHER_SHA_MOD_SHA256;  配置SHA-256算法

            HAL_CIPHER_SHA_CPU (&cipher_sha_init);        啟動(dòng)SHA-256算法(CPU Input)

            開(kāi)發(fā)模式二:Linux SDK

            通過(guò)操作linux系統(tǒng)中/dev/wokoo_sha ,便可以進(jìn)行SHA算法的運(yùn)算。

            SHA算法底層接口

            open:打開(kāi)設(shè)備節(jié)點(diǎn)

            read:讀取哈希后的數(shù)據(jù)

            write:寫(xiě)入哈希的數(shù)據(jù)以及配置模式

            接口描述

            open:

            函數(shù)原型: static int uac_open(struct inode *inode, struct file * file)

            參數(shù):file:文件名

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

             read:

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

            參數(shù):file:文件名,buffer:讀出數(shù)據(jù)緩存,size:讀出數(shù)據(jù)長(zhǎng)度

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

            write:

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

            參數(shù):file:文件名,buf:寫(xiě)入數(shù)據(jù)緩存,count:寫(xiě)入數(shù)據(jù)長(zhǎng)度

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

            使用范例:

            fd = open("/dev/wokoo_sha", O_RDWR);                         打開(kāi)sha節(jié)點(diǎn)

            write(fd, &wokoo_sha, sizeof(struct wokoo_sha_t));           寫(xiě)入需要哈希的數(shù)據(jù)

            read(fd, wokoo_sha.output_data, sizeof(wokoo_sha.output_data)); 讀出哈希后的數(shù)據(jù)

            類似地,LINUX在初始化wokoo_sha結(jié)構(gòu)體時(shí)會(huì)根據(jù)給定參數(shù)選擇不同的算法,輸入數(shù)據(jù)輪數(shù)和輸入方式,根據(jù)不同的參數(shù)計(jì)算不同的結(jié)果。如下示例:

            wokoo_sha.bit_mod = CIPHER_SHA_MOD_SHA256;                 選擇SHA-256方式

            wokoo_sha.data_mod = CIPHER_SHA_TYPE_DMA;                      選擇DMA輸入方式

            wokoo_sha.line_num = 1;                                                           設(shè)置數(shù)據(jù)輸入輪數(shù)為1

             

            3、CFW32C7UL SHA算法的效率

            目前碼靈半導(dǎo)體CFW32C7UL系列SHA-1以及SHA-256的加密速率可以實(shí)現(xiàn)87KB/s。

            通過(guò)這幾期對(duì)碼靈半導(dǎo)體CFW32C7UL系列的國(guó)密及國(guó)際標(biāo)準(zhǔn)加解密算法的介紹,相信大家對(duì)CFW32C7UL系列的加解密模塊有一個(gè)相對(duì)全面的了解。國(guó)密算法與國(guó)際標(biāo)準(zhǔn)加解密算法的對(duì)標(biāo)關(guān)系是:國(guó)密算法的SM4和國(guó)際標(biāo)準(zhǔn)加解密算法AES對(duì)標(biāo),國(guó)密算法的SM3算法與國(guó)際標(biāo)準(zhǔn)加解密算法MD5、SHA-256等哈希算法對(duì)標(biāo),國(guó)密算法的SM2算法與國(guó)際標(biāo)準(zhǔn)加解密算法RSA、ECC算法對(duì)標(biāo)。其實(shí)CFW32C7UL系列在芯片安全機(jī)制方面,除了加解密模塊外還有其它的安全特性和功能配置,那它們具體都是什么呢?又有什么特點(diǎn)呢?讓我們帶著這些問(wèn)題,在下期中繼續(xù)探尋吧。

            本期作者:劉悅臻、梁夢(mèng)雷、陳紹景、謝耀華、謝劍杰



            關(guān)鍵詞: 碼靈半導(dǎo)體 CFW32C7UL

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉