shaoziyang 发表于 2008-6-12 11:54:07

AES加密的测试对比

点击此处下载 ourdev_307942.zip(文件大小:12K) (原文件名:aestest.zip)

说明

aes2.c 是从AVR231的IAR程序和VC程序中提取修改的aes加密解密算法子程序,aes.c 是在aes2.c 基础上优化得出的。

使用AVR Studio进行项目编辑和调试,使用默认优化级别(-s),选择晶体速度为8M。为了对比,选择了Mega8和Mega168作为仿真CPU,以及使用了WinAVR20071221和WInAVR20080512两个版本的编译器,分别进行了仿真测试。

仿真时,在每个断点处先将时钟清零,然后单步运行,这样可以得出每个子程序执行的时间。下面的aesEncrypt和aesDecrypt的运行时间都是解密或者解密一个数据块(16字节)的时间。

为了验证优化后的程序和优化前的加密是相同的,在watch中添加了变量dat,并在加密后进行观察比较。

单片机:Mega8
编译器:20080512

    aes.c                        

KEY_COUNT       1      2      3

aesEncInit   3833   4316   4010    us
aesEncrypt11719    14293    16868    us
aesDecInit49323    49805    49500    us
aesDecrypt   1863   2245   2628    us
Code         2370   2396   2454byte
RAM         868      868      868byte


    aes2.c                        

KEY_COUNT       1      2      3

aesEncInit   3961   4444   4138
aesEncrypt12896    15732    18568
aesDecInit49450    49933    49628
aesDecrypt   1499   1797   2098
Code         2730   2756   2814
RAM         868      868      868


编译器:20071221

    aes.c                        

KEY_COUNT       1      2      3

aesEncInit   3711   4188   3914
aesEncrypt13859    16910    19961
aesDecInit49169    49646    49372
aesDecrypt   2114   2558   2999
Code         1910   1928   1950
RAM         868      868      868


    aes2.c                        

KEY_COUNT       1      2      3

aesEncInit   3843   4312   4038
aesEncrypt14221    17353    20486
aesDecInit49303    49771    49497
aesDecrypt   1734   2093   2450
Code         2244   2258   2274
RAM         868      868      868

--------------------------------------

单片机:Mega168
编译器:20080512

    aes.c                        

KEY_COUNT       1      2      3

aesEncInit   3834   4322   4011    us
aesEncrypt11743    14323    16902    us
aesDecInit49323    49812    49500    us
aesDecrypt   1870   2252   2637    us
Code         2486   2514   2570byte
RAM         868      868      868byte


    aes2.c                        

KEY_COUNT       1      2      3

aesEncInit   3961   4450   4139
aesEncrypt12896    15763    18604
aesDecInit49451    49940    49628
aesDecrypt   1499   1806   2108
Code         2814   2890   2946
RAM         868      868      868


编译器:20071221

    aes.c                        

KEY_COUNT       1      2      3

aesEncInit   3720   4203   3924
aesEncrypt13963    17037    20111
aesDecInit49178    49661    49383
aesDecrypt   2135   2583   3030
Code         2078   2098   2120
RAM         868      868      868


    aes2.c                        

KEY_COUNT       1      2      3

aesEncInit   3843   4327   4048
aesEncrypt14222    17476    20629
aesDecInit49303    49787    49508
aesDecrypt   1734   2103   2462
Code         2328   2440   2456
RAM         868      868      868



WinAVR20071221编译出的代码竟然比WinAVR20080512还要小一些,但是运行速度慢一些。当然,优化效果与不同的C编译器、编译器版本、参数设置、表达式写法等都有一定的关系。

从上面还可以看出,优化代码大小后,解密速度有所下降。在使用128位密钥,解密一个块(16字节时),速度降低了约0.3-0.4ms。如果解密16K的程序空间,将多消耗 0.4 * 16 * 1024 / 16 = 0.4s,还是可以接受的。当然现在只是一个粗略的测试,最终的效果可能会有所提高。

gtembeded 发表于 2008-6-13 11:24:41

做个记号

qq281643 发表于 2008-8-6 11:24:17

我有一个bin文件,为了防止破解,在烧写进avr芯片之前,对bin文件要加密,解密是在在烧写到芯片的里面去进行的。
我认为解密在bootloaer里面进行的!
这个方法可行吗?

shaoziyang 发表于 2008-8-7 20:41:22

Bootloader加密的原理基本就是AVR230和AVR231中介绍的那样,在此基础上,可以灵活变化。不过最终还是要变为明文再执行的。

如果是先写入加密的文件,然后在一定条件下进行激活,在bootloader中解密,应当是可行的。

jerico 发表于 2010-4-12 14:17:38

回复【楼主位】shaoziyang
-----------------------------------------------------------------------

请问shaoziyang ,你的AES中的BLOCKSIZE取值能改的吗,可否取16,8,。。。?

Junsea 发表于 2010-12-22 01:02:35

mark

Trylin 发表于 2010-12-22 09:52:52

mark

lcyc51 发表于 2011-5-11 18:46:59

mark

chengying 发表于 2012-9-5 10:30:52

mark


Grampus 发表于 2012-11-28 11:01:48

收藏了,感谢一下

hubeilcsun3 发表于 2012-11-28 11:41:09

mark,收藏备用

zhiwei 发表于 2012-11-28 19:44:00

最近看了RC4,真的很简单,而且速度也快,加密解密调用同一个函数。

hclin 发表于 2012-12-4 09:58:54

very good !!!
页: [1]
查看完整版本: AES加密的测试对比