0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于mbedTLS在Apollo3 MCU上實(shí)現(xiàn)AES-256加解密算法

潤(rùn)欣科技Fortune ? 2019-12-06 21:57 ? 次閱讀

上海潤(rùn)欣科技股份有限公司創(chuàng)研社


最近有客戶(hù)咨詢(xún),希望能夠在剛完成設(shè)計(jì)的Apollo3產(chǎn)品上增強(qiáng)加密功能,主要是為了防止破解者非法克隆產(chǎn)品??蛻?hù)同時(shí)又提到Apollo3芯片資料上有寫(xiě)到支持AES-128硬件加密模塊,還有唯一UID號(hào)碼,看看能不能把這兩塊利用起來(lái),做“一機(jī)一密”的硬件保護(hù)。UID好處理,Apollo3將64位的全球唯一ID號(hào)(Unique Chip ID)存放在固定的地址上,直接讀取就好了。然而,Apollo3芯片手冊(cè)上僅僅介紹了Apollo3支持硬件AES-128硬件加密特性,但再也找不到更多相關(guān)的信息,官方提供的SDK里面也沒(méi)有AES的任何實(shí)現(xiàn)代碼。既然客戶(hù)提出了需求,我們就要想辦法實(shí)現(xiàn)。芯片自帶的硬件AES暫時(shí)無(wú)從下手,那么我們先來(lái)看看軟件AES算法如何?


首先,我們還是先來(lái)了解一下什么是AES吧


AES,全稱(chēng)是The Advanced Encryption Standard,翻譯成中文是:高級(jí)加密標(biāo)準(zhǔn),但我們一般還是習(xí)慣讀作AES。AES是一種對(duì)稱(chēng)密鑰算法,用于數(shù)據(jù)的加密和解密。在密碼學(xué)中AES又稱(chēng)作Rijndael加密算法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。AES是由美國(guó)國(guó)家研究院標(biāo)準(zhǔn)與技術(shù)(NIST)從2001年開(kāi)始建立的一套數(shù)字加密標(biāo)準(zhǔn),發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱(chēng)密鑰加密中最流行的算法之一。AES取代了原先的數(shù)據(jù)加密標(biāo)準(zhǔn)(DES),已經(jīng)被多方分析且廣為全世界所使用。AES使用128位固定大小的數(shù)據(jù)塊作為分組數(shù)據(jù)加密和解密數(shù)據(jù),即明文分組的長(zhǎng)度固定為128位或16字節(jié)。AES可以使用128、192 和 256 位密鑰,根據(jù)密鑰長(zhǎng)度不同,AES可分為AES-128,AES-192和AES-256。


AES加解密算法是基于置換和代替的。置換是指數(shù)據(jù)的重新排列,而代替是用一個(gè)單元數(shù)據(jù)替換另一個(gè)。AES使用了如下幾種不同的技術(shù)來(lái)實(shí)現(xiàn)置換和替換。


字節(jié)替代(SubBytes):


通過(guò)非線(xiàn)性的替換函數(shù),用查找表的方式把分組的字節(jié)矩陣中的每個(gè)字節(jié)用同一個(gè)S-BOX替換成另外一個(gè)字節(jié)。


行移位(ShiftRows):


一個(gè)簡(jiǎn)單的位置交換。將矩陣中的每個(gè)橫列進(jìn)行循環(huán)式移位。


列混淆(MixColumns):


列混淆其實(shí)就是對(duì)一個(gè)狀態(tài)的每一列去乘一個(gè)矩陣,其中乘法是在有限域GF(2^8)內(nèi)進(jìn)行的,不可約多項(xiàng)式為x^8+x^4+x^3+x+1。如下圖1所示。為了充分混合矩陣中各個(gè)直行的操作。這個(gè)步驟使用線(xiàn)性轉(zhuǎn)換來(lái)混合每列的四個(gè)字節(jié)。


1575600432732133.png

圖1列混淆(MixColumns)


注意,最后一個(gè)加密循環(huán)中省略MixColumns步驟,而以另一個(gè)AddRoundKey取代。


輪密鑰加(AddRoundKey):


當(dāng)前分組矩陣中的每一個(gè)字節(jié)和該次輪密鑰(round key)進(jìn)行按位異或運(yùn)算。輪密鑰是通過(guò)Key Schedule過(guò)程從密碼密鑰中得到的,輪密鑰長(zhǎng)度等于分組長(zhǎng)度。

密鑰的長(zhǎng)度不同,加密輪數(shù)也不同,如下圖2所示:


1575600443467887.png

圖2 不同長(zhǎng)度密鑰的AES加密輪數(shù)


如下圖3所示是AES-128的加密的流程:


1575600466378487.png

圖3 AES-128的加密的流程示意圖


對(duì)AES算法原理及實(shí)現(xiàn)過(guò)程感興趣的同學(xué),可以上網(wǎng)搜索更多關(guān)于AES的資料,這里不再詳述算法實(shí)現(xiàn)流程,重點(diǎn)討論怎么把AES這套算法在Apollo3 MCU上跑起來(lái)。


要實(shí)現(xiàn)AES算法,我了解到mbedTLS有成熟的AES加密算法庫(kù)支持,那么讓我們?cè)賮?lái)看看什么是mbedTLS吧。


mbedTLS,前身是PolarSSL,不管是arm掏錢(qián)買(mǎi)的,還是人家PolarSSL大方送的,總之,PolarSSL現(xiàn)在已經(jīng)屬于arm的資產(chǎn)了,而且arm官宣PolarSSL是arm的一部分了,還給改了個(gè)洋氣的名字叫mbedTLS。官方網(wǎng)頁(yè)置頂處赫然寫(xiě)著醒目的標(biāo)題:PolarSSL is now part of arm Official announcement and rebranded as Mbed TLS。arm mbedTLS官方網(wǎng)站鏈接是:https://tls.mbed.org/。如下圖4。


1575600482488850.png

圖4 mbedTLS官方網(wǎng)站


mbedTLS前世今生了解清楚了,我們還是回到正題,看看mbedTLS是什么,有哪些功能。


mbedTLS是TLS和SSL協(xié)議的實(shí)現(xiàn),并且需要相應(yīng)的加密算法和支持代碼。mbed TLS在Apache2.0許可證或GPL2.0許可證下作為開(kāi)放源碼提供。Apache2.0許可證允許您在開(kāi)放源碼和封閉源碼項(xiàng)目中使用mbed TLS。寬松的開(kāi)源許可證,說(shuō)白了,就是鼓勵(lì)大家用起來(lái),用開(kāi)來(lái)(當(dāng)然,最好是希望你用在arm自家的內(nèi)核MCU上。^_^)。網(wǎng)站宣傳mbed TLS的兩大特點(diǎn):Easy to use and Easy to get(容易使用,容易獲得)。


mbedTLS核心SSL 庫(kù)代碼是使用完全符合ANSI-C和MISRA-C的C語(yǔ)言編寫(xiě)。mbedTLS實(shí)現(xiàn)了SSL模塊,基本加密功能并提供各種實(shí)用功能,如大家常見(jiàn)的AES, DES, RSA, SHA,MD5等都已經(jīng)完整實(shí)現(xiàn)了。與OpenSSL和其他TLS的實(shí)現(xiàn)不同,mbed TLS的設(shè)計(jì)目標(biāo)是作為適合小型嵌入式設(shè)備來(lái)使用的,其最小的完整的TLS堆棧只需要60KB的Flash程序空間和64KB的RAM。它也是高度模塊化的:每個(gè)組件,如加密函數(shù),是可以獨(dú)立于框架的其余部分使用。


介紹完AES及mbedTLS的基本概念之后,下面我們就開(kāi)始動(dòng)手干活了。


客戶(hù)使用的IDE是KEIL MDK,假設(shè)我們已經(jīng)打開(kāi)了Apollo3 SDK里面自帶的演示例程或者客戶(hù)自己的項(xiàng)目工程,我們就開(kāi)始一步一步詳細(xì)介紹在Apollo3平臺(tái)上如何實(shí)現(xiàn)AES加解密算法。

1、安裝mbedTLS Pack


點(diǎn)擊KEIL MDK菜單上的Pack Installer圖標(biāo),如下圖5截圖紅框所示,加載Pack Installer,界面如下圖6所示。


1575600517256841.png

圖5 KEIL MDK界面上的Pack Installer圖標(biāo)


1575600542213712.png

圖6Pack Installer界面


在設(shè)備廠(chǎng)家ARM目錄下找到ARM::mbedTLS,圖6顯示我已經(jīng)安裝好了最新的v1.6.0版本;如果沒(méi)有安裝,點(diǎn)擊Install安裝,或者點(diǎn)擊Update將版本升級(jí)到最新的v1.6.0版本。

2、加載mbedTLS組件到我們的工程中


點(diǎn)擊KEIL MDK菜單上的Manage Run-Time Environment圖標(biāo),如下圖7截圖紅框所示,加載Manage Run-Time Environment,界面如下圖8所示。


1575600570580613.png

圖7 KEIL MDK界面上Manage Run-Time

Environment圖標(biāo)


1575600581792035.png

圖8Manage Run-Time Environment界面


Manage Run-Time Environment的這個(gè)界面上面找到Security,勾選mbedTLS,點(diǎn)擊OK按鈕退出。


這個(gè)時(shí)候,我們?cè)贙EIL MDK項(xiàng)目工程目錄下就能看到多了一個(gè)Security組件及其源代碼列表,如下圖9所示。


1575600594817295.png

圖9 添加Security組件到項(xiàng)目工程中


3、添加頭文件到代碼里,并修改mbedTLS_config.h文件


在需調(diào)用mbedTLS的AES API的代碼里添加如下頭文件:


#include "mbedtls/entropy.h"

#include "mbedtls/ctr_drbg.h"

#include "mbedtls/aes.h"


根據(jù)自己需要使用到的功能,修改mbedTLS_config.h文件,比如我這里需要用到AES,那么就需要打開(kāi)相應(yīng)的宏定義就好了。對(duì)于AES的ECB和CBC加解密,打開(kāi)如下的這幾個(gè)宏定義:


#define MBEDTLS_AES_ROM_TABLES

#define MBEDTLS_CIPHER_MODE_CBC

#define MBEDTLS_AES_C

#define MBEDTLS_CIPHER_PADDING_PKCS7

#define MBEDTLS_NO_PLATFORM_ENTROPY

#define MBEDTLS_CTR_DRBG_C

#define MBEDTLS_ENTROPY_C

#define MBEDTLS_SHA256_C


4、AES加密解密相關(guān)API介紹


根據(jù)需要我們大致經(jīng)常會(huì)用到AES的兩種加密模式ECB和CBC。


ECB:就是把數(shù)據(jù)塊進(jìn)行加密,每16字節(jié)為一塊,依次進(jìn)行加密,直到完成,長(zhǎng)度不足的補(bǔ)0。


CBC:cipher block chaining,是一種循環(huán)模式,前一個(gè)分組的密文和當(dāng)前分組的明文異或后再加密,這樣做的目的也是為了增強(qiáng)破解難度。


AES-ECB加解密算法API:

/**

* \brief This function performs an AES single-block encryption or

* decryption operation.

*

* It performs the operation defined in the \p mode parameter

* (encrypt or decrypt), on the input data buffer defined in

* the \p input parameter.

*

*mbedtls_aes_init(), and either mbedtls_aes_setkey_enc() or

* mbedtls_aes_setkey_dec() must be called before the first

* call to this API with the same context.

*

* \param ctx The AES context to use for encryption or decryption.

* It must be initialized and bound to a key.

* \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or

* #MBEDTLS_AES_DECRYPT.

* \param input The buffer holding the input data.

* It must be readable and at least \c 16 Bytes long.

* \param output The buffer where the output data will be written.

* It must be writeable and at least \c 16 Bytes long.


* \return \c 0 on success.

*/

int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,

int mode,

const unsigned char input[16],

unsigned char output[16] );


AES-CBC加解密算法API:


/**

* \brief This function performs an AES-CBC encryption or decryption operation

* on full blocks.

*

* It performs the operation defined in the \p mode

* parameter (encrypt/decrypt), on the input data buffer defined in

* the \p input parameter.

*

* It can be called as many times as needed, until all the input

* data is processed. mbedtls_aes_init(), and either

* mbedtls_aes_setkey_enc() or mbedtls_aes_setkey_dec() must be called

* before the first call to this API with the same context.

*

* \note This function operates on full blocks, that is, the input size

* must be a multiple of the AES block size of \c 16 Bytes.

*

* \note Upon exit, the content of the IV is updated so that you can

* call the same function again on the next

* block(s) of data and get the same result as if it was

* encrypted in one call. This allows a "streaming" usage.

* If you need to retain the contents of the IV, you should

* either save it manually or use the cipher module instead.

*

*

* \param ctx The AES context to use for encryption or decryption.

* It must be initialized and bound to a key.

* \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or

* #MBEDTLS_AES_DECRYPT.

* \param length The length of the input data in Bytes. This must be a

* multiple of the block size (\c 16 Bytes).

* \param iv Initialization vector (updated after use).

* It must be a readable and writeable buffer of \c 16 Bytes.

* \param input The buffer holding the input data.

* It must be readable and of size \p length Bytes.

* \param output The buffer holding the output data.

* It must be writeable and of size \p length Bytes.

*

* \return \c 0 on success.

* \return #MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH

* on failure.

*/

int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx,

int mode,

size_t length,

unsigned char iv[16],

const unsigned char *input,

unsigned char *output );


聲明一個(gè)結(jié)構(gòu)體類(lèi)型,成員分別存放AES的參數(shù),如加密輪數(shù),輪密鑰指針,生成輪密鑰的緩沖區(qū)等。


/**

* \brief The AES context-type definition.

*/

typedef struct mbedtls_aes_context

{

int nr; /*!< The number of rounds. */

uint32_t *rk; /*!< AES round keys. */

uint32_t buf[68]; /*!< Unaligned data buffer. This buffer can

hold 32 extra Bytes, which can be used for

one of the following purposes:

  • Alignment if VIA padlock is

used.

  • Simplifying key expansion in the 256-bit

case by generating an extra round key.

*/

}mbedtls_aes_context;


結(jié)構(gòu)體初始化函數(shù):


/**

* \brief This function initializes the specified AES context.

*

* It must be the first API called before using

* the context.

*

* \param ctx The AES context to initialize. This must not be \c NULL.

*/

void mbedtls_aes_init( mbedtls_aes_context *ctx );


AES-128 CBC加密參考代碼:

mbedtls_aes_context aes_ctx;

// 初始化結(jié)構(gòu)體

mbedtls_aes_init( &aes_ctx );

// 設(shè)置解密密鑰

mbedtls_aes_setkey_dec(&aes_ctx, key, 128);

// AES-128 CBC加密

mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, 64, iv, plain, cipher);


AES-128 CBC解密參考代碼:

mbedtls_aes_context aes_ctx;

// 初始化結(jié)構(gòu)體

mbedtls_aes_init( &aes_ctx );

// 設(shè)置解密密鑰

mbedtls_aes_setkey_dec(&aes_ctx, key, 128);

// AES-128 CBC解密

mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, 64, iv, cipher, dec_plain);


至此,在Apollo3 MCU上實(shí)現(xiàn)AES算法的步驟已經(jīng)全部完成。


看看,基于mbedTLS在Apollo3 MCU上實(shí)現(xiàn)MCU算法是不是特別簡(jiǎn)單、易用?那么回到客戶(hù)的問(wèn)題,我們?nèi)绾卫眯酒ㄒ籌D結(jié)合AES加密算法來(lái)做點(diǎn)加密呢。


1、 讀取芯片UID


通過(guò)閱讀Apollo3 MCU芯片Datasheet,我們知道64位全球唯一ID號(hào)(Unique Chip ID)連續(xù)存放在固定的地址上,起始地址為:0x40020004。這個(gè)唯一ID號(hào)每片芯片都不同的。如下圖10所示。



1575600658526715.png

圖10 Apollo3 芯片Unique Chip ID


讀取UID的代碼很簡(jiǎn)單:

uint32_t uid0, uid1;

uid0 = (*((uint32_t *)0x40020004));

uid1 = (*((uint32_t *)0x40020008));


2、 利用芯片UID構(gòu)造AES明文序列和密鑰


我們把uid0和uid1做異或得到一個(gè)常數(shù),利用這個(gè)常數(shù)來(lái)構(gòu)造AES加密的明文序列和密鑰。參考代碼如下:


uint32_t i;

uint32_t seed;

unsigned int temp;

unsigned char _aKey[32];

unsigned char _aPlaintext[256];

unsigned char _aCipher[256]={0};

unsigned char _aIV[16] = {0};


seed = uid0 ^ uid1;


// _aPlaintext[256]

i = 0;

do

{

_aPlaintext[i] = (unsigned char)((seed + i)^0x5A5A5A5A5A);

++i;

}while ( i < 256 );??????????????????????????


// _aKey[32]

i = 0;

do

{

temp = seed >> i;

*(_aKey+i) = (unsigned char)(temp ^ 0xA5A5A5A5A5);

i++;

}while ( i < 32 );


3、 AES加密生成產(chǎn)品特征碼


最后,對(duì)上述生成的明文序列_aPlaintext[256]和密鑰_aKey[32]執(zhí)行AES-256 CBC加密算法,并將密文結(jié)果_aCipher[256]做CRC32運(yùn)算,參考代碼如下:


mbedtls_aes_init( &aes_ctx );

mbedtls_aes_setkey_enc(&aes_ctx, _aKey, 256);

mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, 256, _aIV, _aPlaintext, _aCipher);

return CalcCRC32(_aCipher, 256, 0);


最終得到4字節(jié)的結(jié)果我們將其看作是產(chǎn)品的唯一特征碼,真正做到一機(jī)一密,可以用它來(lái)驗(yàn)證原裝產(chǎn)品,也可以防止非法破解和克隆產(chǎn)品。我們可以將這個(gè)特征碼存放到用戶(hù)指定的Flash區(qū)域或者INFO里面,上電后根據(jù)上述流程做AES加密算法后,結(jié)果與存儲(chǔ)在芯片的特征碼做比對(duì),只有原裝產(chǎn)品才允許運(yùn)行代碼,有效杜絕產(chǎn)品被非法克隆的風(fēng)險(xiǎn)。



在其他IDE環(huán)境下加載并使用mbedTLS組件


如果說(shuō)你偏好的IDE不是Keil MDK,那么也沒(méi)有關(guān)系,畢竟mbedTLS的源代碼還是非常容易獲取的,你可以從arm/TLS官網(wǎng):https://tls.mbed.org/直接下載,點(diǎn)擊下面的圖標(biāo)也可以直接下載哦。


另外,還有一種方法。


arm官方Github賬號(hào)上Git完整源代碼:git clone https://github.com/ARMmbed/mbedtls.git,當(dāng)然,以后你也可以不定期地git pull,申請(qǐng)到最新的版本更新,下載和更新都非常的方便。將mbedTLS源碼(library文件夾下)全部添加到你的工程里面,并在你要調(diào)用mbedTLS API的代碼里面添加相應(yīng)的頭文件,配置一下mbedTLS_config.h頭文件里面的宏定義就可以正常使用了。mbedTLS API的調(diào)用方法和Keil MDK里面完全一樣,畢竟mbedTLS是用純C語(yǔ)言編寫(xiě)的,不存在移植的問(wèn)題。


后記


也許大家還想知道添加mbedTLS AES加密算法到項(xiàng)目里面會(huì)占用多少Flash和SRAM空間。我們拿數(shù)據(jù)說(shuō)話(huà)吧,經(jīng)過(guò)對(duì)比加入AES前后產(chǎn)生的map文件得知,項(xiàng)目中加入AES-256 CBC加解密算法代碼的部分占用Flash 11.63KB, SRAM 0KB(armcc編譯器優(yōu)化 Level0(-O0)),對(duì)MCU的存儲(chǔ)資源占用較少,對(duì)整個(gè)系統(tǒng)的影響很小。


再來(lái)看看AES-256 CBC的實(shí)際運(yùn)行效率,我們利用ARM內(nèi)核自帶的Systick Timer,對(duì)AES加密操作進(jìn)行計(jì)時(shí),看看到底消耗多少時(shí)間。參考代碼如下:


unsigned int old_primask = __get_PRIMASK();

__disable_irq();

SysTick->CTRL = 0; // Disable SysTick

SysTick->LOAD = 0xFFFFFF; // Count down from maximum value

SysTick->VAL = 0; // Clear current value to 0

SysTick->CTRL = 0x5; // Enable SysTick, and use processor clock

while (SysTick->VAL == 0); // Wait until SysTick reloaded

START_TIME = SysTick->VAL; // Read start time value


mbedtls_aes256_cbc_test();


STOP_TIME = SysTick->VAL; // Read stop time value

SysTick->CTRL = 0; // Disable SysTick

if ((SysTick->CTRL & 0x10000) == 0) // if no overflow

DURATION = START_TIME - STOP_TIME; // Calculate total cycles

else

printf ("Timer overflowed\n");

// SysTick->VAL遞減,減到0就產(chǎn)生了溢出,需要RELOAD

// DURATION越小說(shuō)明程序執(zhí)行時(shí)間越短,效率越高!

printf("DURATION of process of mbedtls_aes_cbc_test() : 0x%.8X.\n\r", DURATION);

__set_PRIMASK(old_primask);


從實(shí)驗(yàn)數(shù)據(jù)得知,運(yùn)行一次明文長(zhǎng)度為256字節(jié)的AES-256 CBC加密算法耗時(shí)僅需1.2ms(Apollo3 running @ 48MHz),這對(duì)于系統(tǒng)來(lái)說(shuō)影響也很小。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mbedTLS
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    561
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SITARA MCU器件上集成MbedTLS

    電子發(fā)燒友網(wǎng)站提供《SITARA MCU器件上集成MbedTLS.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 10:44 ?0次下載
    <b class='flag-5'>在</b>SITARA <b class='flag-5'>MCU</b>器件上集成<b class='flag-5'>MbedTLS</b>

    使用mbedtls連接到aws iot,無(wú)法編譯代碼的原因?

    MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 /* * Save RAM at the expense
    發(fā)表于 07-12 07:24

    基于FPGA的AES256光纖加密設(shè)計(jì)

    AES算法的硬件實(shí)現(xiàn),國(guó)內(nèi)外研究學(xué)者大部分是基于FPGA的硬件實(shí)現(xiàn)。解放軍理工大學(xué)的呂游等人研究高級(jí)加密標(biāo)準(zhǔn)俄歇算法的設(shè)計(jì)原理,并通過(guò)加密部
    發(fā)表于 06-19 19:50

    簡(jiǎn)化MCU開(kāi)發(fā):思瑞浦TPS32 MCU生態(tài)系統(tǒng)

    隨著MCU資源越來(lái)越豐富和復(fù)雜,如今的MCU實(shí)現(xiàn)的應(yīng)用也更加多樣化?,F(xiàn)代微控制器(MCU)具備了強(qiáng)大的功能,它們不僅能夠展示精美的用戶(hù)
    的頭像 發(fā)表于 06-14 08:37 ?336次閱讀
    簡(jiǎn)化<b class='flag-5'>MCU</b>開(kāi)發(fā):思瑞浦TPS32 <b class='flag-5'>MCU</b>生態(tài)系統(tǒng)

    ESP32-S3 HTTPS esp_mbedtls_handshake握手平均耗時(shí)3s以上,有什么改善方法嗎?

    當(dāng)我使用HTTP POST/GET請(qǐng)求時(shí),每次請(qǐng)求耗時(shí)一般100-300ms左右 更改為HTTPS,并加入服務(wù)器證書(shū)校驗(yàn)后,每次請(qǐng)求耗時(shí)需要3s以上 我嘗試過(guò)下面這幾種配置方式,但是耗時(shí)變化不大
    發(fā)表于 06-13 06:37

    AES加密協(xié)議是什么?AES加密協(xié)議的應(yīng)用

    標(biāo)準(zhǔn)化過(guò)程:AES1997年由比利時(shí)密碼學(xué)家Joan Daemen和Vincent Rijmen共同提出的Rijndael算法基礎(chǔ)發(fā)展起來(lái)的。經(jīng)過(guò)嚴(yán)格的國(guó)際評(píng)審和對(duì)比測(cè)試,美國(guó)
    的頭像 發(fā)表于 04-15 15:34 ?676次閱讀

    鴻蒙OS開(kāi)發(fā)問(wèn)題:(ArkTS)【 RSA加解密,解決中文亂碼等現(xiàn)象】

    RSA加解密開(kāi)始構(gòu)建工具類(lèi)就是舉步維艱,官方文檔雖然很全,但是還是有很多小瑕疵,自己經(jīng)過(guò)幾天的時(shí)間,徹底解決了中文亂碼的問(wèn)題、分段加密的問(wèn)題。
    的頭像 發(fā)表于 03-27 21:23 ?1595次閱讀
    鴻蒙OS開(kāi)發(fā)問(wèn)題:(ArkTS)【 RSA<b class='flag-5'>加解密</b>,解決中文亂碼等現(xiàn)象】

    基于FPGA的可編程AES加解密IP

    可編程AES加解密IP內(nèi)建密鑰擴(kuò)展功能,使用初始密鑰產(chǎn)生擴(kuò)展密鑰,用于加解密過(guò)程。可編程AES加解密IP處理128-bit分組數(shù)據(jù),并且支持
    發(fā)表于 01-09 10:49 ?398次閱讀
    基于FPGA的可編程<b class='flag-5'>AES</b><b class='flag-5'>加解密</b>IP

    【先楫HPM5361EVK開(kāi)發(fā)板試用體驗(yàn)】3手把手實(shí)戰(zhàn)安全數(shù)據(jù)處理器 SDP

    AES-256的加密數(shù)據(jù))。 那么SM4是什么呢?SM4是一種對(duì)稱(chēng)加密算法,也就是加密和解密使用的是同一把“鑰匙”。它是中國(guó)自主研發(fā)的一種加密
    發(fā)表于 12-19 00:36

    【飛騰派4G版免費(fèi)試用】仙女姐姐的嵌入式實(shí)驗(yàn)室之二~飛騰派基本測(cè)評(píng)及與RK3399對(duì)比

    Doing aes-256 cbc for 3s on 16 size blocks: 11925620 aes-256 cbc\'s in 3.00s Doing aes-256
    發(fā)表于 12-16 09:01

    21489可以啟動(dòng)加載程序過(guò)程中將SPIFLASH中的程序按照一定的解密算法解密后,加載到內(nèi)部RAM運(yùn)行嗎?

    解密算法解密后,加載到內(nèi)部RAM運(yùn)行?這樣,只要將編譯好的程序經(jīng)過(guò)一定的加密算法處理后,再燒寫(xiě)到SPIFLASH中,就算別人能夠讀出程序也沒(méi)什么作用。有沒(méi)有這種功能或者
    發(fā)表于 11-30 07:47

    eCryptfs整體架構(gòu)和核心加解密機(jī)制介紹

    的注冊(cè)函數(shù)。之后eCryptfs根據(jù)mountsession中保存的key signature參數(shù)從keyring中找到對(duì)應(yīng)密鑰(FEKEK),再調(diào)用crypto模塊API完成文件加解密。 eCryptfs核心加解密
    的頭像 發(fā)表于 11-29 11:43 ?734次閱讀
    eCryptfs整體架構(gòu)和核心<b class='flag-5'>加解密</b>機(jī)制介紹

    通過(guò)構(gòu)架來(lái)處理加解密需求

    SPE主要是提供需要安全保護(hù)的服務(wù),例如固件更新、加解密;而NSPE則是一般使用者執(zhí)行應(yīng)用程序的環(huán)境。 如果在NSPE中執(zhí)行的應(yīng)用程序使用到secure層級(jí)的服務(wù),則需要透過(guò)特定API來(lái)呼叫(這個(gè)
    的頭像 發(fā)表于 11-02 16:15 ?280次閱讀
    通過(guò)構(gòu)架來(lái)處理<b class='flag-5'>加解密</b>需求

    基于PIC單片機(jī)的AES算法優(yōu)化設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于PIC單片機(jī)的AES算法優(yōu)化設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-30 09:46 ?0次下載
    基于PIC單片機(jī)的<b class='flag-5'>AES</b><b class='flag-5'>算法</b>優(yōu)化設(shè)計(jì)

    探秘STM32U5安全特性|硬件加解密引擎與軟件算法對(duì)比

    探秘STM32U5安全特性|硬件加解密引擎與軟件算法對(duì)比
    的頭像 發(fā)表于 10-27 10:23 ?1568次閱讀
    探秘STM32U5安全特性|硬件<b class='flag-5'>加解密</b>引擎與軟件<b class='flag-5'>算法</b>對(duì)比