WhyCan Forum(哇酷开发者社区)

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2020-03-14 12:10:40

metro
会员
注册时间: 2019-03-09
累计积分: 208

求推荐单片机使用的加密算法

简单说一下背景,目前计划在CH558上实现一个bootloader,并且计划加上固件加密功能。
初步想法是实现一个简单的对称加密算法,密钥存储在单片机上,bootloader从USB接收加密后的程序,并在本地解密之后写入到Flash中(这一步可以添加校验以确保固件来源可靠)。只要在bootloader部分不提供密钥区的访问,这样应该是安全的。
那么问题来了,现在需要在单片机上实现一个简单的加密算法(准确说只包括解密部分),我的要求如下:

  • 最重要的是空间限制,由于bootloader区域只有2 KB,因此涉及到挂表的算法基本上不是很现实,但多轮加密只要不大复杂应该可行。空间复杂度不要超过O(n)的级别。

  • 时间方面比较宽松,只要不是很慢就可以了(非对称算法似乎不可行?),毕竟Flash的擦除和写入本身也不是很快。

  • 支持细粒度的加密,目测加密块大小在8到1024 Bytes之间,再大就会分成多个block分开加密了。

  • 安全性要足够(暂时不考虑侧信道攻击之类的话题),对密钥格式之类的没有多大要求,只要可以存在单片机上即可。对于bootloader应用,似乎对称加密就可以接受,不需要考虑网络传输的问题。

对于上述要求,我看了一下已有的算法,感觉TEA(以及变种XXTEA)似乎是个可行的选择,不过也有对特定条件下加密强度的担忧(见cryptanalysis - Is TEA considered secure? - Cryptography Stack Exchange)。
大家对这方面有没有什么想法?欢迎交流。

离线

#2 2020-03-14 23:38:10

Hemingway2003
会员
注册时间: 2020-03-10
累计积分: 1

Re: 求推荐单片机使用的加密算法

我做蓝牙这块的,目前基本都是aes--但是这个是基于蓝牙芯片的硬件aes,所以占用资源其实很小,这一块是用于空中升级检验的

离线

#3 2020-03-15 00:00:01

metro
会员
注册时间: 2019-03-09
累计积分: 208

Re: 求推荐单片机使用的加密算法

Hemingway2003 说:

我做蓝牙这块的,目前基本都是aes--但是这个是基于蓝牙芯片的硬件aes,所以占用资源其实很小,这一块是用于空中升级检验的

确实,对称加密用的比较多的还是DES/TDES/AES这些,而且AES的硬件加速效果也还可以。像STM32的一些单片机就可以对AES进行加解密。
不过AES有字节代换,使用时需要挂个表,操作的轮数也比较多,对于硬件资源有限的单片机来说还是太复杂了些。

离线

#4 2020-03-16 10:23:12

泡在妞里的Feel
会员
注册时间: 2019-09-09
累计积分: 16

Re: 求推荐单片机使用的加密算法

谷歌的 “chacha20加密算法” 符合你需求。

离线

#5 2020-03-16 10:50:53

metro
会员
注册时间: 2019-03-09
累计积分: 208

Re: 求推荐单片机使用的加密算法

泡在妞里的Feel 说:

谷歌的 “chacha20加密算法” 符合你需求。

感谢推荐。简单看了一下,对代码和内存的要求确实都不算大(当然还是要比XXTEA多一些),不过好不好用还是要编码试试看才知道。
贴个标准地址:ChaCha20 and Poly1305 for IETF Protocols

最近编辑记录 metro (2020-03-16 10:51:10)

离线

页脚