【技术】超低功耗32位MCU EFM32之硬件AES加密引擎
EFM32是SILICON LABS公司推出的32位超低功耗的MCU系列,其不仅有很多低功耗的特性,在安全性上也是非常出色。EFM32 Classic系列(包含ZG、HG、TG、LG、GG和WG)具有硬件加密引擎支持AES加密,而Gemstone系列(包含JG和PG)不仅支持硬件AES还支持硬件ECC和SHA加密。在针对一些对信息比较敏感的场合,特别是针对一些数据流信息,如果先采用数据加密,然后在进行传输,则可以增加信息的保密程度。本文档为大家详细介绍EFM32硬件AES加密引擎。
一、AES算法介绍
AES是Advanced Encryption Standard的简称,它是一种被广泛应用的对称密钥加密标准(NIST 标准 FIPS-197),由三部分组成:AES-128(128位密钥),AES-192 (192位密钥)和AES-256(256位密钥)。AES算法是硬件友好的,需要很少的资源并且速度快。它是一种分组密码,也就是说它运行在128位(16字节)固定长度的数据块中。输入块被称为明文(Plain Text),加密后的输出称为密文(Cipher Text,也是128位),使用第二个输入,即密钥来控制精确的转换。AES的安全性仅仅依赖于密钥保密,而算法本身是公开的。
解密类似于加密,解密算法与密钥一起接收128位密文块,并生成原始的128位明文块。当加密或解密的数据长度不是128位的整数倍时,那么最后一块必须用0或其他数据的方法来填充。AES算法的原理是产品密码的原理,可以概括如下:
1)它是一种多步加密算法,其中初始非加密块逐渐加密,例如在每一步加密的输入数据是前一步的输出。
2)算法步骤称为轮。AES算法有10个(128位密钥),12个(192位密钥),或者14个轮(256位密钥)。
3)每一轮使用不同的密钥(例如称为轮密钥)。10/12/14轮密钥是在执行实际编码轮之前通过原始密钥计算出来的。
4)在每一轮中执行的实际操作都是简单的字节转换,例如XOR、字节替换或字节置换。
图一描述了在10轮(128位长密钥)操作情况下AES算法的总结结构。
图一,10轮AES算法结构
输入的数据(明文和密文)由4个字节一组组成的,产生32位的数据,数据被放在矩阵的第一列中,在第一行完成后,下一列启动并继续处理,直到输入数组耗尽为止。输入矩阵被转移到状态矩阵(如图二)。状态数组的每个列中的四个字节构成32位字,其中行号为每个单词中的字节提供索引,因此状态数组可以被解释为一个32位单词的一维数组。加密解密算法的输入是一个128位分组。这些分组被描述成4×4的字节方阵,这个分组被复制到state数组中,并在加密和解密的每一阶段都被修改。在字节方阵中,每一格都是一个字,包含了4字节。在矩阵中字是按列排序的。
图二,AES状态数组
基于密钥长度(128位、192位或256位),我们可以得到轮块的密钥(10,12,14个回合)。
二、密码模式
AES加密最基本的方式是ECB。以ECB模式为基础,通过不同数据块的异或处理,
产生不同的加密模式,共有如下5种加密模式。
1)ECB模式:将明文分割成几个128位的数据块,利用密钥对每个数据块进行加密
和解密。加密或解密后的结果大小完全不变,而且独立,互相之间不关联,便于并
行运算;
图三,EBC模式示意图
2)CBC模式:建立在ECB模式上使用的一种加密方法。CBC算法中,每个明文块先
与前面的秘文块相异或,然后再加密。加密的数据相互关联,不能并行处理,但破
解的难读很大;
图四,CBC模式示意图
3)CFB模式:密钥先与前一个密文块加密,之后再与当前明文块取异或。每个密文
块都与后面的步骤紧密相连,任何一个密文块损坏,都无法完成解密;
图五,CFB模式示意图
4)OFB模式:与CFB的区别在于,OFB模式下密钥与前一块加密的结果加密;
图六,OFB模式示意图
5)CTR模式:一种用明文块与一个计数器密码和一个初始化向量的值进行异或运算
的方法。这种方法的价值在于,只要知道数据块所在的位置,就可以对任何一个明
文块进行解密。
图七,CTR模式示意图
三、软件示例
本例程基于EFM32TG平台实现硬件AES的ECB 128位加解密。实验例程利用ECB加解密方式对预定明文进行加密和解密实验,然后解密完成后通过对比解密结果和原始明文验证加解密操作的正确性。
const uint8_t exampleData[] = { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10};
//加密数据
const uint8_t expectedEncryptedData[] =
{ 0x3A, 0xD7, 0x7B, 0xB4, 0x0D, 0x7A, 0x36, 0x60,
0xA8, 0x9E, 0xCA, 0xF3, 0x24, 0x66, 0xEF, 0x97,
0xF5, 0xD3, 0xD5, 0x85, 0x03, 0xB9, 0x69, 0x9D,
0xE7, 0x85, 0x89, 0x5A, 0x96, 0xFD, 0xBA, 0xAF,
0x43, 0xB1, 0xCD, 0x7F, 0x59, 0x8E, 0xCE, 0x23,
0x88, 0x1B, 0x00, 0xE3, 0xED, 0x03, 0x06, 0x88,
0x7B, 0x0C, 0x78, 0x5E, 0x27, 0xE8, 0xAD, 0x3F,
0x82, 0x23, 0x20, 0x71, 0x04, 0x72, 0x5D, 0xD4}; //解密后的数据
const uint8_t exampleKey[] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};
//密钥
uint8_t dataBuffer[sizeof(exampleData) / sizeof(exampleData[0])];
uint8_t decryptionKey[16];
int main(void)
{
uint32_t i;
/* Initialize error indicator */
bool error = false;
/* Chip errata */
CHIP_Init();
/* Enable AES clock */
CMU_ClockEnable(cmuClock_AES, true);
/* Calculate decryption key from original key. Only needs to be done once for each key */
AES_DecryptKey128(decryptionKey, exampleKey);
/* Copy plaintext to dataBuffer */
for (i=0; i<(sizeof(exampleData) / sizeof(exampleData[0])); i++)
{
dataBuffer[i] = exampleData[i];
}
/* Encrypt data in AES-128 ECB */
AesEcb128(exampleKey,
dataBuffer,
dataBuffer,
false,
sizeof(dataBuffer)/(sizeof(dataBuffer[0])*16));
/* Wait for AES to finish */
while(!AesFinished());
/* Check whether encrypted results are correct */
for (i = 0; i < (sizeof(dataBuffer) / sizeof(dataBuffer[0])); i++)
{
if (dataBuffer[i] != expectedEncryptedData[i])
{
error = true;
}
}
/* Decrypt data with AES-128 ECB */
AesEcb128(decryptionKey,
dataBuffer,
dataBuffer,
true,
sizeof(dataBuffer) / (sizeof(dataBuffer[0])*16));
/* Wait for AES to finish */
while(!AesFinished());
/* Check whether decrypted result is identical to the plaintext */
for (i = 0; i < (sizeof(dataBuffer) / (sizeof(dataBuffer[0])*16)); i++)
{
if (dataBuffer[i] != exampleData[i])
{
error = true;
}
}
/* Check for success */
if (error)
{
while (1) ; /* Ends here if there has been an error */
}
else
{
while (1) ; /* Ends here if all OK */
}
}
世强元件电商版权所有,转载请注明来源及链接。
- |
- +1 赞 0
- 收藏
- 评论 11
本网站所有内容禁止转载,否则追究法律责任!
评论
全部评论(11)
-
用户65102458 Lv4. 资深工程师 2018-07-26好好学习!
-
TAO Lv7. 资深专家 2018-05-25学习了
-
yingqiming Lv7. 资深专家 2018-04-10不错
-
用户18396822 Lv8 2018-03-19很好
-
小小哥布林 Lv7. 资深专家 2018-02-27不错
-
用户71664282 Lv4. 资深工程师 2018-01-09好东西
-
Anny Lv3. 高级工程师 2017-12-29学习
-
用户32653760 Lv4. 资深工程师 2017-12-26不错,长知识了
-
用户_8239 Lv7. 资深专家 2017-12-16不错
-
Paulwang Lv8. 研究员 2017-11-29好东西,学习了
相关推荐
【技术】EFM32ZG 32位MCU之灵活的时钟管理单元(CMU)
EFM32ZG是由Silicon Labs公司采用ARM Cortex-M0+内核设计出来的高性能、低功耗32位MCU,最高运行频率为24MHz。
【技术】低功耗32位MCU EFM32的能源模式可最大限度提高能源效率
Silicon Labs采用了一种“blue sky”的方法来设计它的低功耗32位MCU EFM32 Gecko微处理器,也开发了支持这个产品的软件和硬件工具。Silicon Labs 现已生产了一种装置,仅够消耗现有8位、16位和32位MCU所耗能量的四分之一, 使现有电池的寿命大大延长了。
【经验】如何基于J-FLASH对32位MCU EFM32 进行批量烧写?
Silicon Labs 32位MCU EFM32,以低功耗、高性能等著称,被广泛应用在电池供电等需要低功耗的领域。因应用广泛,在批量烧写上,也得到多家软件支持。本文将详细描述名基于SEGGER的J-Flash软件对EFM32烧写FLASH的方法及步骤。
SILICON LABS 32-bit Microcontroller选型表
SILICON LABS 32位MCU选型,频率24MHz~80MHz,Flash存储4kB~2048kB,RAM存储2kB~512kB。
产品型号
|
品类
|
系列
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Debug Interface
|
Cryptography
|
Dig I/O Pins
|
ADC 1
|
DAC
|
USB
|
Cap Sense
|
LCD
|
Temp Sensor
|
Timers (16-bit)
|
UART
|
USART
|
SPI
|
I2C
|
I2S
|
EMIF
|
RTC
|
Comparators
|
EFM32GG290F512-BGA112
|
32位MCU
|
EFM32 Giant Gecko
|
48
|
512
|
128
|
1.98
|
3.8
|
BGA112
|
10x10
|
±2%
|
ETM; SW
|
AES-128 AES-256
|
90
|
12-bit, 8-ch., 1 Msps
|
12-bit, 2 ch.
|
-
|
Cap Sense
|
-
|
Temp Sensor
|
4
|
7
|
3
|
3
|
2
|
1
|
0
|
RTC
|
2
|
选型表 - SILICON LABS 立即选型
SILICON LABS EFM32PG23/EFM32PG22 32-bit Microcontrollers选型表
EFM32PG23 Series 2 and EFM32PG22 Series 2 MCUs
产品型号
|
品类
|
Series
|
Core
|
Max GPIO
|
Max LCD Segments
|
Max Temperature(℃)
|
Vdd Min (V)
|
Vdd Max (V)
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
Security
|
ADC 1
|
USB
|
Temp Sensor
|
UART
|
RTC
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Debug Interface
|
Cryptography
|
EFM32PG23B200F128IM40
|
Microcontroller
|
EFM32PG23 Series 2
|
ARM Cortex-M33
|
34
|
4 x 20
|
125
|
1.71
|
3.8
|
80
|
128
|
64
|
29
|
Vault
|
16-bit, 12-ch., 1 Msps
|
×
|
Temp Sensor
|
3
|
RTC
|
QFN40
|
5x5
|
2%
|
Secure; SW; ETM
|
AES-1
AES-256
|
选型表 - SILICON LABS 立即选型
【经验】对使用SWD接口的32位MCU的内部闪存及用户画面进行编程
本文介绍Silicon Labs独立编程器的硬件与软件,以及详细的用户界面介绍,提供用户进行测试。
【经验】基于EFM32JG1B200F128低功耗32位MCU中RTC在暂态录波型故障指示器无线采样三相同步设计方法
在JYL-60架空暂态录波型远传故障指示器项目开发过程中,考虑到架空线路ABC三相的特殊性,三支架空暂态录波型远传故障指示器分别挂在ABC线路上,无法提供可靠的硬件同步信号,在这样的环境下,无线三相同步技术正好提供了三相同步录波的可能。本文以EFM32JG1B200F128低功耗32位MCU中的RTC,设计了一种无线的三相同步采样方法。
SILICON LABS EFM32 Wonder Gecko 32-bit Microcontroller选型表
SILICON LABS 32位MCU选型,基于48MHz Frequency,64kB~256kB Flash,32kB RAM等参数进行选型。
产品型号
|
品类
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
ADC 1
|
DAC
|
Cap Sense
|
Temp Sensor
|
Timers (16-bit)
|
UART
|
USART
|
SPI
|
I2C
|
I2S
|
EMIF
|
RTC
|
Comparators
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Debug Interface
|
Cryptography
|
ADC
|
EFM32WG230F128-QFN64
|
Microcontroller
|
48
|
128
|
32
|
56
|
12-bit, 8-ch., 1 Msps
|
12-bit, 2 ch.
|
Cap Sense
|
Temp Sensor
|
4
|
5
|
3
|
3
|
2
|
1
|
0
|
RTC
|
2
|
1.98
|
3.8
|
QFN64
|
9x9
|
±2%
|
ETM; SW
|
AES-128 AES-256
|
8 x Ch 500 x MSPS 12 x bit
|
选型表 - SILICON LABS 立即选型
【经验】EFM32系列低功耗32位MCU芯片加密详解
本文主要介绍以Silicon Labs EFM32系列低功耗32位MCU为核心的方案打造加密系统。
【经验】用STK3700评估板采集EFM32GG低功耗32位MCU外部频率信号完整周期的经验
在调试EFM32GG低功耗32位MCU,想测试外部频率信号的周期,范例程序测试的是按键按下的时间,也就是对应的是半个周期,不是完整的周期信号。针对范例程序做了如下修改(修改部分用红色字体标识),实现了用STK3700评估板对外部频率信号周期时间的计算
SILICON LABS EFM32 Leopard Gecko 32-bit Microcontroller选型表
SILICON LABS 32位MCU选型,基于48MHz Frequency,64kB~256kB Flash,32kB RAM等参数进行选型。
产品型号
|
品类
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
ADC 1
|
DAC
|
Cap Sense
|
Temp Sensor
|
Timers (16-bit)
|
UART
|
USART
|
SPI
|
I2C
|
I2S
|
EMIF
|
RTC
|
Comparators
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Debug Interface
|
Cryptography
|
EFM32LG230F128G-QFN64
|
Microcontroller
|
48
|
128
|
32
|
56
|
12-bit, 8-ch., 1 Msps
|
12-bit, 2 ch.
|
Cap Sense
|
Temp Sensor
|
4
|
5
|
3
|
3
|
2
|
1
|
0
|
RTC
|
2
|
1.98
|
3.8
|
QFN64
|
9x9
|
±2%
|
ETM; SW
|
AES-128 AES-256
|
选型表 - SILICON LABS 立即选型
【应用】低功耗32位MCU EFM32,实现低成本医疗内窥镜
电子内窥镜少不了这一款逆天MCU-- EFM32,其集成的USB-HOST接口,结合Cortex-M4内核的高效运算能力以及DSP指令和浮点运算单元,能够很轻松执行图像处理任务,EFM32具有丰富的外设,为系统扩展功能及降低成本提供了条件。
【经验】EFM32系列32位MCU常量定位问题的解决方法
Silicon Labs的32位MCU EFM32系列具有低功耗、集成度高的优势,在电池供电类的应用中具有非常明显的优势。开发EFM32的软件一般都是在Simplicty Studio软件下完成。介绍EFM32程序中的常量定位到FLASH的固定地址的方法。
SILICON LABS EFM32 Gecko 32-bit Microcontroller选型表
SILICON LABS 32位MCU选型,基于32MHz Frequency,16kB~128kB Flash,8kB或16kB RAM等参数进行选型。
产品型号
|
品类
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
ADC 1
|
DAC
|
Cap Sense
|
Temp Sensor
|
Timers (16-bit)
|
UART
|
USART
|
SPI
|
I2C
|
I2S
|
EMIF
|
RTC
|
Comparators
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Debug Interface
|
EFM32G200F16-QFN32
|
Microcontroller
|
32
|
16
|
8
|
24
|
12-bit, 4-ch., 1 Msps
|
12-bit, 1-ch.
|
Cap Sense
|
Temp Sensor
|
2
|
0
|
2
|
2
|
1
|
0
|
0
|
RTC
|
2
|
1.98
|
3.8
|
QFN32
|
6x6
|
±2%
|
SW
|
选型表 - SILICON LABS 立即选型
【应用】基于低功耗32位MCU EFM32G2X的智能温控器节能解决方案
采用Silicon Labs的ARM Cortex-M3内核EFM32是全球最低功耗的32位MCU,外设丰富,5大超低模式,非常适用于智能温控器。无线WIFI模块采用WGM110,具有卓越的射频性能,并可提供远程范围的稳定无线连接和安全性。
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可定制电感最大电流100A,尺寸最小7 x 7 x 3.0mm到最大35 x 34 x 15.5 mm,工作频率100KHZ ~ 2MHZ,感值范围:0.15 ~ 100uh;支持大功率电感,扁平线电感,大电流电感,高频电感,汽车电感器,车规电感,一体成型电感等定制。
最小起订量: 5000 提交需求>
登录 | 立即注册
提交评论