学习目的: 使用AES BOOTLOADER技术升级AVR的固件;
学习参考: ATMEL的AVR231: AES Bootloader;
介绍:
AES加密标准已经解决了DES加密算法遭受攻击出现的漏洞,而且具有更高的效率,在AVR单片机Bootloader的应用中得到较广泛的应用。
AES Bootloader的特点是:
1. 应用简单,加密性高,可以有128,192,256位的加密匙;
2. 代码小,用IAR编译,小于2K;
3. 传送速度快;
例如: 64K的代码,在波特率采用115200bps,系统时钟3.69MHz下,
-AES128: 27
-AES192: 30
-AES256: 33
(相比之下,DES的加密方式慢了许多:
Typical Update Times of a 16-KB Application, Including Transfer of Data, Decryption
and Programming of Flash Memory
– DES, 115200 Bauds, 16 MHz Target Frequency: 20 Seconds
– 3DES, 115200 Bauds, 16 MHz Target Frequency: 50 Seconds)
4. 广泛应用于大于1KB的RAM的ATMEL单片机系列中;
本文只重点介绍如何使用AES BOOTLOADER。
下载以下的”AVR_AES.rar” 文件,解压缩以后,生成两个文件夹,IAR文件夹包含升级所需的固件,PC文件夹包含升级的PC端程序。
共7条
1/1 1 跳转至页
[转帖]学习笔记: AES加密标准在AVR单片机Bootloader中的应用
学习步骤:
1. 运行”..\ PC\PC Sample\Gen_Key.bat”, 生成一个临时的Config.txt文件;
说明:
Gen_Key.bat的代码:
gentemp Config.txt
生成一个临时的Config.txt:
以下是生成的Config.txt的例子:
PAGE_SIZE = [FILL IN: Target AVR page size in bytes]
MEM_SIZE = [FILL IN: Application Section size in bytes]
CRC_ENABLE = [FILL IN: YES/NO]
KEY1 = 5F8669C385D366FAF49FEA4F23D983D34616
KEY2 = F3F6340CEC9B0B4B0C
KEY3 = 972CEE3391BC6C5F93
INITIAL_VECTOR = 39D392DFD0259A0EAE85C9D4A11DF1CC
SIGNATURE = A87DB128
注意,每次运行KEY,INITIAL_VECTOR,SIGNATURE结果会不同。但是,同一个项目,必须使用相同的KEY,INITIAL_VECTOR,SIGNATURE。
2. 根据所选用的MCU,修改Config.txt:
以ATMEGA32为例: 正确设置PAGE_SIZE,MEM_SIZE,CRC_ENABLE等参数。
PAGE_SIZE = 128
MEM_SIZE = 28672
CRC_ENABLE = YES
KEY1 = 5F8669C385D366FAF49FEA4F23D983D34616
KEY2 = F3F6340CEC9B0B4B0C
KEY3 = 972CEE3391BC6C5F93
INITIAL_VECTOR = 39D392DFD0259A0EAE85C9D4A11DF1CC
SIGNATURE = A87DB128
1. 运行”..\ PC\PC Sample\Gen_Key.bat”, 生成一个临时的Config.txt文件;
说明:
Gen_Key.bat的代码:
gentemp Config.txt
生成一个临时的Config.txt:
以下是生成的Config.txt的例子:
PAGE_SIZE = [FILL IN: Target AVR page size in bytes]
MEM_SIZE = [FILL IN: Application Section size in bytes]
CRC_ENABLE = [FILL IN: YES/NO]
KEY1 = 5F8669C385D366FAF49FEA4F23D983D34616
KEY2 = F3F6340CEC9B0B4B0C
KEY3 = 972CEE3391BC6C5F93
INITIAL_VECTOR = 39D392DFD0259A0EAE85C9D4A11DF1CC
SIGNATURE = A87DB128
注意,每次运行KEY,INITIAL_VECTOR,SIGNATURE结果会不同。但是,同一个项目,必须使用相同的KEY,INITIAL_VECTOR,SIGNATURE。
2. 根据所选用的MCU,修改Config.txt:
以ATMEGA32为例: 正确设置PAGE_SIZE,MEM_SIZE,CRC_ENABLE等参数。
PAGE_SIZE = 128
MEM_SIZE = 28672
CRC_ENABLE = YES
KEY1 = 5F8669C385D366FAF49FEA4F23D983D34616
KEY2 = F3F6340CEC9B0B4B0C
KEY3 = 972CEE3391BC6C5F93
INITIAL_VECTOR = 39D392DFD0259A0EAE85C9D4A11DF1CC
SIGNATURE = A87DB128
具体参考以下表格设置: |
3. 运行”..\ PC\PC Sample \Create_Header.bat”, 生成BootLdr.h和AESKeys.inc两个文件;
说明:
Create_Header.bat的代码:
create -c Config.txt -h BootLdr.h -k AESKeys.inc
根据Config.txt的代码生成BootLdr.h和AESKeys.inc两个文件。
4. 将刚刚生成的BootLdr.h和AESKeys.inc两个文件复制到…\AVR_AES\IAR目录下,并重新编译程序。
注意要根据实际情况正确设置UBRRL的值
void busInit(void)
{
// 115200 baud @ 3.6864MHz
UBRRL = 1;
// 9600 baud @ 3.6864MHz
// UBRRL = 23;
// Enable Rx and Tx.
UCSRB = (1 << RXEN) | (1 << TXEN);
}
说明:
Create_Header.bat的代码:
create -c Config.txt -h BootLdr.h -k AESKeys.inc
根据Config.txt的代码生成BootLdr.h和AESKeys.inc两个文件。
4. 将刚刚生成的BootLdr.h和AESKeys.inc两个文件复制到…\AVR_AES\IAR目录下,并重新编译程序。
注意要根据实际情况正确设置UBRRL的值
void busInit(void)
{
// 115200 baud @ 3.6864MHz
UBRRL = 1;
// 9600 baud @ 3.6864MHz
// UBRRL = 23;
// Enable Rx and Tx.
UCSRB = (1 << RXEN) | (1 << TXEN);
}
6. 运行”..\ PC\PC Sample\ Encoding Firmware.bat”, 将要升级的源文件加密,生成所需的加密文件NewFlash.ext。
说明:
Encoding Firmware.bat的代码:
create -c Config.txt -f main.hex -o NewFlash.ext -l
BLB11 BLB12
参数说明如下: 根据"Config.txt"生成"main.hex"的加密文件"NewFlash.ext"。并且设置BLB11 BLB12。
(本例中的”..\ PC\PC Sample \main.hex”是使用”串口实验范例” 生成的main.hex文件。)
注: 如果还有EEPROM的HEX文件,例如"EEPROM.HEX",
可以修改Encoding Firmware.bat:
create -c Config.txt –e EEPROM.HEX -f main.hex -o NewFlash.ext -l
BLB11 BLB12
只生成一个加密文件NewFlash.ext。
说明:
Encoding Firmware.bat的代码:
create -c Config.txt -f main.hex -o NewFlash.ext -l
BLB11 BLB12
参数说明如下: 根据"Config.txt"生成"main.hex"的加密文件"NewFlash.ext"。并且设置BLB11 BLB12。
(本例中的”..\ PC\PC Sample \main.hex”是使用”串口实验范例” 生成的main.hex文件。)
注: 如果还有EEPROM的HEX文件,例如"EEPROM.HEX",
可以修改Encoding Firmware.bat:
create -c Config.txt –e EEPROM.HEX -f main.hex -o NewFlash.ext -l
BLB11 BLB12
只生成一个加密文件NewFlash.ext。
共7条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |