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,还是可以接受的。当然现在只是一个粗略的测试,最终的效果可能会有所提高。 做个记号 我有一个bin文件,为了防止破解,在烧写进avr芯片之前,对bin文件要加密,解密是在在烧写到芯片的里面去进行的。
我认为解密在bootloaer里面进行的!
这个方法可行吗? Bootloader加密的原理基本就是AVR230和AVR231中介绍的那样,在此基础上,可以灵活变化。不过最终还是要变为明文再执行的。
如果是先写入加密的文件,然后在一定条件下进行激活,在bootloader中解密,应当是可行的。 回复【楼主位】shaoziyang
-----------------------------------------------------------------------
请问shaoziyang ,你的AES中的BLOCKSIZE取值能改的吗,可否取16,8,。。。? mark mark mark mark
收藏了,感谢一下 mark,收藏备用 最近看了RC4,真的很简单,而且速度也快,加密解密调用同一个函数。 very good !!!
页:
[1]