原创 AES测试对比

2008-6-12 11:56 4505 10 10 分类: MCU/ 嵌入式

点击下载


说明


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
aesEncrypt  11719    14293    16868    us
aesDecInit  49323    49805    49500    us
aesDecrypt   1863     2245     2628    us
Code         2370     2396     2454  byte
RAM           868      868      868  byte



    aes2.c                         


KEY_COUNT       1        2        3


aesEncInit   3961     4444     4138 
aesEncrypt  12896    15732    18568
aesDecInit  49450    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 
aesEncrypt  13859    16910    19961
aesDecInit  49169    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 
aesEncrypt  14221    17353    20486
aesDecInit  49303    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
aesEncrypt  11743    14323    16902    us
aesDecInit  49323    49812    49500    us
aesDecrypt   1870     2252     2637    us
Code         2486     2514     2570  byte
RAM           868      868      868  byte



    aes2.c                         


KEY_COUNT       1        2        3


aesEncInit   3961     4450     4139 
aesEncrypt  12896    15763    18604
aesDecInit  49451    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 
aesEncrypt  13963    17037    20111
aesDecInit  49178    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 
aesEncrypt  14222    17476    20629
aesDecInit  49303    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,还是可以接受的。当然现在只是一个粗略的测试,最终的效果可能会有所提高。


 

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条