搜索
bottom↓
回复: 110

学习笔记: AES加密标准在AVR单片机Bootloader中的应用

[复制链接]

出0入0汤圆

发表于 2005-12-6 02:36:18 | 显示全部楼层 |阅读模式
学习目的: 使用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端程序。

点击此处下载AVR_AES.rar





学习步骤:

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



具体参考以下表格设置:

出0入0汤圆

 楼主| 发表于 2005-12-6 02:42:31 | 显示全部楼层
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);

}



5. 将生成bootloader的hex文件烧录到Atmega32中,并且正确设置融丝位及LockBits,例如:





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。



7. 连接PD2到按键上(见下图) 。先按下按键K2,然后打开电源,最后运行”..\ PC\PC Sample\ Updated.bat” 。将程序下载到MCU中。下载结束后,可重新启动运行。





说明:

1。Updated.bat的代码:

update NewFlash.ext -COM1 -115200

将加密文件NewFlash.ext串口传送到MCU,设置传送的BaudRate: 115200

2。必须先按下按键K2,然后打开电源,这样启动后才可以直接进入bootloader区

出0入0汤圆

发表于 2005-12-6 08:09:57 | 显示全部楼层
好文章,很详细,虽然我现在可能还用不上,相信以后肯定会用到,收藏。

出0入0汤圆

发表于 2005-12-6 17:53:33 | 显示全部楼层
不错,顶一下!!!

出0入0汤圆

发表于 2005-12-6 18:30:18 | 显示全部楼层
好东西,不过我现在的程序一般都在饱和状态,以后看情况好转了再试试...



先谢谢了!!!

出0入0汤圆

 楼主| 发表于 2005-12-8 07:41:15 | 显示全部楼层
郁闷....

用IAR要最大压缩,也用了大约2K的空间,用WINAVR就一定超过2K的代码,只好用在Atmega32以上了,可惜啊...

出0入0汤圆

 楼主| 发表于 2005-12-20 08:17:49 | 显示全部楼层
使用原Atmel下载包中自带的文件中的create.exe生成加密文件时,出现错误。

经过n小时的检验,终于发现是Atmel所提供的create.exe程序错误,可能是用较早的版本,对Atmega64这类较大的flash的单片机加密时,编译产生CRC错误。所幸,他们还提供源程序,重新编译'create'下的源程序,再用新的'create.exe'加密文件,下载通过,CRC验证结果正确。

附新编译的create.exe

点击此处下载armok0193046.zip

出0入0汤圆

发表于 2005-12-20 10:48:48 | 显示全部楼层
搞不明白,为什么要生成加密文件,禁止读取不就行了。里面好多boot区,也搞不明白,要那干啥?

还在学习中。

出0入0汤圆

发表于 2005-12-20 11:01:30 | 显示全部楼层
顶级加密。

普通的IAP,如果在自动升级过程中数据流被监控,那么烧录代码就无法保密!

经过AES加密后,没有密匙,即使监控了数据流也是没法得到烧录代码的。



ALTERA的高端FPGA就是采用AES加密的。



估计JTAK mkII也是采用AES加密的。

出0入0汤圆

发表于 2006-2-27 22:23:26 | 显示全部楼层
testcode  能说一下creat原码哪里错了吗

出0入0汤圆

 楼主| 发表于 2006-2-28 00:32:45 | 显示全部楼层
估计不是原码的错误,而是Dev-C++ 4.9.9.0编译器的问题。



在README中说,文件是Dev-C++ 4.9.9.0编译器生成的。当我用Atmel提供的create.exe文件,在Atmega64测试时出现错误。可是相同的原码,用最新版本Dev-C++ 4.9.9.2重新编译生成create.exe,不会出现所谓的CRC错误。

出0入0汤圆

发表于 2006-3-1 16:00:21 | 显示全部楼层
谢谢testcode,我用你给的creat.exe.努力了近一个星期,终于在mega128上实现了,boot正常,自编程后工作正常,第一次用iar编译器真辛苦,好兴奋啊

出0入0汤圆

发表于 2006-4-2 10:43:42 | 显示全部楼层
我发现这个程序用icc 根本拌不了,只有硬着头皮研究iar配置它,iar的功能就是强大,不服不行.

出0入0汤圆

发表于 2006-4-2 11:05:44 | 显示全部楼层
从性价比上看,个人更倾向于选择RC4算法



毕竟在MCU这样的小型应用上,流加密比块加密有明显优势的



当然,RC4有弱密钥,不过只要加密程序中刻意避免之就可以了

出0入0汤圆

 楼主| 发表于 2006-5-4 07:47:50 | 显示全部楼层
玩了一个AES的简单开发工具,再调试一下。如果大家有兴趣,过几天发布...





出0入0汤圆

发表于 2006-5-11 14:33:40 | 显示全部楼层
请教搂主,对于第四步重新进行编译,如何进行详细操作?是否必须用IAR编译器?其它的编译器是否可以?

出0入0汤圆

发表于 2006-5-11 15:52:33 | 显示全部楼层
比较感兴趣,期待testcode的大作

出0入0汤圆

发表于 2006-5-12 12:01:54 | 显示全部楼层
看来我什么时候也该试试BL了。

支持楼主!

出0入0汤圆

发表于 2006-5-14 09:31:32 | 显示全部楼层
非常期待,谢谢testcode的努力!!

出0入0汤圆

发表于 2006-5-27 01:58:44 | 显示全部楼层
今天测试了一下,发现一下两个问题:

1、用iccavr也可以编译AVR_AES的;

2、AES_Demo好像有hex代码限制哦!

欢迎大家讨论

出0入0汤圆

 楼主| 发表于 2006-5-27 03:16:22 | 显示全部楼层
如果hex代码太大,连Application区的最后一页都占用了,只剩很小的空间,这时在编译时会出错。

出0入0汤圆

发表于 2006-5-27 10:59:54 | 显示全部楼层
但程序一超过16K就出现这样的错误了哦

Error: Overlapping memory assignments in file .

出0入0汤圆

发表于 2006-6-4 23:58:48 | 显示全部楼层
终于大功告成了;

出0入0汤圆

发表于 2007-8-2 10:31:23 | 显示全部楼层
我编有适用于单片机工作的AES加解密c程序,128bit密钥,速度奇快,占用资源甚少。

感兴趣者可QQ:775858870 或 Email: xmar33@qq.com 联系。

出0入0汤圆

发表于 2007-12-10 10:11:29 | 显示全部楼层
COM1 opened.
Transferring .. \0% done.
CRC error. File damaged.


然后就退出了,请教一下,这是哪里出问题了?是不是那个main.hex的问题?还是别的呀?

出0入0汤圆

发表于 2008-3-3 11:29:27 | 显示全部楼层
是好东西呀。记号了

出0入0汤圆

发表于 2008-3-3 11:36:21 | 显示全部楼层
顶。
留个记号

出0入0汤圆

发表于 2008-3-3 11:38:14 | 显示全部楼层
Xmega集成硬件AES了……

出0入0汤圆

发表于 2008-3-3 15:54:34 | 显示全部楼层
哪位 有 介绍 AES原理的文章呢?

出0入0汤圆

发表于 2008-3-3 16:07:25 | 显示全部楼层
好东西啊 留个记号

出0入0汤圆

发表于 2008-3-3 16:21:55 | 显示全部楼层
标记

出0入0汤圆

发表于 2008-3-3 16:37:11 | 显示全部楼层
这里介绍的比较全.......

http://msdn2.microsoft.com/zh-cn/library/aa663623.aspx

出0入0汤圆

发表于 2008-3-3 20:47:22 | 显示全部楼层
AES记号……

出0入0汤圆

发表于 2008-3-4 00:04:21 | 显示全部楼层
关注

出0入0汤圆

发表于 2008-3-4 00:28:18 | 显示全部楼层

出0入0汤圆

发表于 2008-3-8 02:16:57 | 显示全部楼层
請問現在有沒有做解密的可以破解這AES文件呢?

大家是不是放心把AES加密了的firmware 更新檔公開給人下載呢?

出0入0汤圆

发表于 2008-3-8 18:58:07 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2008-3-18 14:00:06 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-6-1 13:48:18 | 显示全部楼层
本人目前所从事就是AES加密在C54x DSP上的应用,希望有机会交流!

出0入0汤圆

发表于 2008-6-1 19:23:22 | 显示全部楼层
不错,留个脚印。。

出0入0汤圆

发表于 2008-6-1 19:43:37 | 显示全部楼层

出0入0汤圆

发表于 2008-6-1 21:07:51 | 显示全部楼层
ding

出0入0汤圆

发表于 2008-6-1 22:33:20 | 显示全部楼层
收藏,谢谢.

出0入0汤圆

发表于 2008-6-2 12:43:43 | 显示全部楼层
收藏了,谢谢,非常需要
这样就能保证能保密了没?

出0入0汤圆

发表于 2008-6-4 10:10:57 | 显示全部楼层
cool

出0入0汤圆

发表于 2008-7-5 16:51:30 | 显示全部楼层
收藏!

出0入0汤圆

发表于 2008-9-8 18:16:23 | 显示全部楼层
好文章,很详细,虽然我现在可能还用不上,相信以后肯定会用到,收藏。

出0入0汤圆

发表于 2008-9-8 19:16:22 | 显示全部楼层
标记

出0入0汤圆

发表于 2008-9-8 20:58:08 | 显示全部楼层
好文章,学习ING

出0入0汤圆

发表于 2008-9-17 13:23:00 | 显示全部楼层
【50楼】&nbsp;hendry:说的是,如果BL被破戒,以后就可以用大家公开的已加密文件升级了.

大家怎么来解决这个漏洞?

出0入0汤圆

发表于 2008-9-26 15:38:33 | 显示全部楼层

出0入46汤圆

发表于 2008-11-27 20:16:32 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-11-28 12:44:41 | 显示全部楼层
有时间好好学习研究一下。

出0入0汤圆

发表于 2008-11-28 17:47:02 | 显示全部楼层
我还在研究SHA-1能不能用于AVR的加密,呵呵,你的AES就用上了,快啊。

本贴被 lgx0301 编辑过,最后修改时间:2008-11-28,17:48:14.

出0入0汤圆

发表于 2008-11-29 08:47:26 | 显示全部楼层
好东西,谢谢了

出0入0汤圆

发表于 2008-11-29 10:24:08 | 显示全部楼层
收藏

出0入0汤圆

发表于 2008-12-17 11:07:20 | 显示全部楼层
收一下

出0入0汤圆

发表于 2009-1-13 17:43:05 | 显示全部楼层
是好东西呀。

出0入0汤圆

发表于 2009-1-13 17:55:31 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2009-3-5 17:14:46 | 显示全部楼层
也许用得上.

出0入0汤圆

发表于 2009-3-20 10:34:13 | 显示全部楼层
正在寻找加密算法

出0入0汤圆

发表于 2009-7-9 09:02:43 | 显示全部楼层
标记一下,以后用得上

出0入0汤圆

发表于 2009-7-11 21:16:17 | 显示全部楼层
说来惭愧,用AVR这么长时间直到今天才研究了下BOOTLOADER,按照笔记中的说明一步一步下来,果然能下载了,但是后来发现程序下去之后,再重新上电发现就不能进入BOOT了,程序直接运行,就好像BOOT区被冲掉了一样,结果又是一通搜索才搞定,原来是熔丝位没设对,BOOTRST这个熔丝要烧上才能保证BOOT正常工作。现在写到这里也希望其他遇到这个问题的朋友能看到,下次少走弯路。

出0入0汤圆

发表于 2009-7-11 23:19:23 | 显示全部楼层
好东西,标记一下。

出0入10汤圆

发表于 2009-7-11 23:32:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-12 18:14:09 | 显示全部楼层
先记下。慢慢研究

出0入0汤圆

发表于 2009-7-12 18:43:19 | 显示全部楼层
jh

出0入0汤圆

发表于 2009-7-28 09:39:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-28 13:56:06 | 显示全部楼层
留个印

出0入0汤圆

发表于 2009-7-28 15:45:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-11 18:23:45 | 显示全部楼层
mark.good .cool

出0入0汤圆

发表于 2009-9-23 12:12:17 | 显示全部楼层
AVR231 使用IAR 编译。有谁用AVRStudio? 谢谢!

出0入0汤圆

发表于 2010-1-15 15:53:47 | 显示全部楼层
正在考虑用AES加密算在ATMEGA32上面,有一问题,AVR gcc编程出来的代码前面很一段跳转指令相同,如果用AES算法,有没有高手能跟这些数据样板解码出来KEY?
http://218.16.124.207/bbs/bbs_content.jsp?bbs_sn=3831371&bbs_id=3048

出0入0汤圆

发表于 2010-1-21 19:00:56 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2010-3-10 11:50:34 | 显示全部楼层
study

出0入0汤圆

发表于 2010-3-10 14:25:42 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-3-10 14:39:07 | 显示全部楼层
回复【72楼】apolloj  
-----------------------------------------------------------------------

AES目前是对称加解密算法中安全性比较好的一个。运算量不好说,没做过。
好像还没听说AES被破解或者有显著的安全漏洞。至少没有Google出来。否则,也不会被NSA之类的选做主要加密算法。
不过有文章说针对已知明文,有减少计算复杂度的相关研究,但是该研究目前还不致可见的AES安全等级下降。

3DES安全性也不低。DES就不行了。

ATmel好像有一个针对主要Hash和对称加密算法的AppNote,安全性有个简单的评估。

出0入0汤圆

发表于 2010-3-10 15:23:40 | 显示全部楼层
ding

出0入0汤圆

发表于 2010-4-15 22:55:46 | 显示全部楼层
挖坟..吼吼

出0入0汤圆

发表于 2010-4-15 23:24:52 | 显示全部楼层
六个记号

出0入0汤圆

发表于 2010-4-18 10:45:50 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-5-15 10:21:10 | 显示全部楼层
不太明白,改天再看吧!

出0入0汤圆

发表于 2010-5-15 10:40:15 | 显示全部楼层
这个只能对付传输过程中的解密是吗?

出0入0汤圆

发表于 2010-5-15 12:34:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-3 11:31:59 | 显示全部楼层
有时间好好学习研究一下。

出0入0汤圆

发表于 2010-7-30 09:11:05 | 显示全部楼层
拿到芯片,读出flash内容,不用管bootloader,烧入另一片,破解之~
感觉这个只是传输过程中加密,没啥实际用

出0入0汤圆

发表于 2010-10-7 09:25:53 | 显示全部楼层
考虑移植到STM8里面去

出0入0汤圆

发表于 2010-10-7 16:46:36 | 显示全部楼层
mark, 有时间了好好研读一下

出0入0汤圆

发表于 2010-12-16 14:48:56 | 显示全部楼层
参考思想

出0入0汤圆

发表于 2010-12-17 23:42:52 | 显示全部楼层
mark aes

出0入0汤圆

发表于 2010-12-18 08:52:04 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-12-18 09:06:31 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-12-18 09:57:57 | 显示全部楼层
拿到芯片,读出flash内容,不用管bootloader,烧入另一片,破_解之~
感觉这个只是传输过程中加密,没啥实际用

出0入0汤圆

发表于 2010-12-25 20:59:20 | 显示全部楼层
学习了!!!!!!

出0入0汤圆

发表于 2010-12-30 21:46:45 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2010-12-30 22:26:39 | 显示全部楼层
mark

出0入24汤圆

发表于 2010-12-31 09:29:59 | 显示全部楼层
Mark!
强贴要顶!

出0入0汤圆

发表于 2011-3-18 04:21:51 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2011-3-30 17:24:32 | 显示全部楼层
留个爪印 顶

出0入0汤圆

发表于 2011-3-31 16:07:55 | 显示全部楼层
极品好贴
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 22:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表