- 常用加密算法简介
- 加密术语概念
对称加密/双向加密:
对称加密算法即加密和解密使用相同密钥的算法。在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去,收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。常见对称加密算法有AES算法,DES算法。
表 对称加密算法对比
名称 | 秘钥 | 安全性 | 运行速度 | 资源消耗 |
DES | 56位 | 低 | 较快 | 中 |
3DES | 112/168位 | 中 | 慢 | 高 |
AES | 128/192/256位 | 高 | 快 | 低 |
不对称加密/单向加密:
非对称加密需要两把密钥:公钥和私钥,他们是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。常见不对称加密算法有RSA算法,ECC算法。
表 不对称加密算法对比
名称 | 成熟度 | 安全性 | 运算速度 | 资源消耗 |
RSA | 高 | 高 | 慢 | 中 |
ECC | 高 | 高 | 中 | 中 |
安全级别:
在密码学中,安全级别是一个加密基元(如一个密文或者一个哈希函数)所能达到的安全强度的测量,其单位通常为bit。一个加密方案是n-bit安全的,意味着一个攻击者想要攻破该方案,必须执行至少次操作。例如AES-128(密钥长度为128bit)的安全级别为128-bit,大概约等于3072-bit的RSA。
生日悖论、生日攻击、生日边界:
如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。对于60人以上,这种概率要大于99%。严格意义上,这并不是一个悖论,称之为悖论是由于跟人们的常识相悖。生日攻击是以概率论中的生日问题为数据基础的一种密码学攻击方法。使用一个64位的密码,大约有 1.8 × 10^19 个不同密码集。如果使用每个密码的可能性是相同的,那么根据生日概率公式,只需大约 5.1 x 10^9 次(51亿次)暴力尝试就可以得到正确的密码。51亿次叫做birthday bound (生日边界)。
四种密码攻击基本强度(由弱到强):
唯密文攻击:分析者通过统一密钥加密的密文,恢复出明文或密文。
已知明文攻击:分析者通过统一密钥加密的明文/密文对,恢复出其他密文的明文或者密钥。(无法选择获取的明文/密文对)。
选择明文攻击:分析者可以根据破解需要,选择明文并获得对应的密文,恢复出其他密文的明文或密钥。(可以根据攻击者的兴趣选择获取的明文/密文对)。
选择密文攻击:分析者可以根据破解需要,选择系列密文并获得对应的明文,恢复出其他密文的明文或者密钥。
安全目标(由弱到强):
攻击者不能获得解密密钥。
攻击者不能获得正确的明文。
攻击者不能获取明文的任何部分信息。
攻击者不能获得明文的任何函数。
从攻击者的角度看,第四条是最容易完成的。从加密算法的角度看,第四条是最安全的。
- 对称加密方案参考
对称加密适用单秘钥加密,技术应用多年已经非常成熟,算法公开,计算量小,适用于单片机系统。但是对称加密的秘钥管理是一大难题,如果秘钥无法妥善保存,破解密文将会非常容易。
以下为参考方案:
- 将待发送数据定义为不加密数据段和待加密数据段。其中不加密数据段一般指公开的报文头部数据。
- 获取秘钥。这里可以使用出厂配置的固定秘钥,也可截取报文头部数据的部分信息(如目标地址)通过一定的转换算法生成秘钥。
- 加入滚动码机制。如果明文和秘钥一致,得到的密文也会一致,如果入侵者截取有效报文并恶意转发,系统也会错误判断报文是有效的,这将会不可预估的影响。滚动码会在每次发包的时候进行数字累加,一方面可以让密文保持变化,另一方面也可以让数据接收方判断数据有效性。
- 将待加密数据进行16字节对齐(对称加密一般都要求字节对齐,对齐字节可以任意填充),根据秘钥进行aes-128加密。
- 数据接收方通过逆算法进行数据解密,并通过滚动码判断数据有效性。
- 定时进行秘钥的更换。
方案优点:计算量小,加解密效率高。
方案缺点:密钥单一安全性得不到保证,密钥管理比较困难。
- 不对称加密方案参考
不对称加密算法使用完全不同但又是完全匹配的一对公钥和私钥。发送方使用接收方的公钥来加密数据,接收方使用自己的私钥解密信件。公私秘钥机制可以不需要像对称加密那样传输密钥了,提高了安全性,但是算法复杂度会提升很多,如RSA算法就依赖于大数运算,秘钥都可以达到上百字节,不一定适配单片机系统。
参考方案如下(以RSA为例,其余单向算法流程也是类似的):
- 选择2个不同的大质数p和q。
- 通过乘法,质数寻找运算,获得并明文共享公钥.
- 接收方进行乘法,求余,质数寻找运算,获得私钥。
- 同样加入滚动码机制,避免重复报文攻击。
- 将明文数据进行分段加密,分段长度无具体限制。发送端根据公钥,通过指数和求余运算,获得密文。
- 接收端根据私钥,通过指数和求余运算,获得明文,并通过滚动码判断数据有效性。
方案优点:安全性高,加解密效率高,秘钥管理简单。
方案缺点:算法复杂度极高,对芯片计算能力和存储空间有很高要求。
- 混合加密方案参考
结合对称加密和非对称加密的优缺点,我们可以通过非对称加密来进行秘钥的协商/交换,再进行数据对称加密,这样既可以有效地管理秘钥,又可以快速进行数据加解密。
秘钥交换参考方案如下(以RSA-AES混合加密为例):
- 发送端发起秘钥交换流程,主动获取接收端RSA公钥。
- 发送端将随机生成的AES秘钥进行RSA加密,密文发送给接收端。
- 接收端通过RSA私钥解密,获得AES秘钥。
- AES秘钥交换完成,进行正常地AES报文加解密。
图 RSA+AES混合加密图示
秘钥协商参考方案如下(以ECDH-AES混合加密为例):
- 发送端生成随机数A,根据DH算法获得公钥KA。
- 发送端将KA分享给接收端。
- 接收端生成随机数B,根据DH算法获得公钥KB。
- 接收端将KB分享给发送端。
- DH算法存在特性A*KB=B*KA=K,因此发送端和接收端可以独立计算出AES秘钥K
- AES秘钥协商完成,之后可进行正常地AES报文加解密。
方案优点:有秘钥管理设计,加解密效率高
方案缺点:秘钥协商仍需经过非对称加密算法或秘钥协商算法,在单片机系统跑这些算法会有较高的计算耗时。
- DTU-MI无线系统加密方案可行性分析
在查看文档,阅读代码与组内咨询后,总结当前无线系统的特性如下:
1.有一对一交互和广播交互的应用场景,每次交互都需要DTU主动发起。
2.协议长度最大固定为32字节,不可扩展。
3.需要考虑兼容性,新版本DTU/MI可以和老版本不加密设备交互。
4.使用32位GD-MCU作为主控,8kRAM 64kFLASH,剩余4.5kRAM 19kFLASH,主控时钟72MHz。
1.AES-128可行评估
AES-128明文、密文、秘钥长度均需要16字节,对于DTU-MI的无线使用场景,刚好可以传输1-2组密文,满足限制条件。
将AES-128算法移植至sub-g无线模块工程,移植前程序空间如下:
Program Size: Code=25618 RO-data=1162 RW-data=1304 ZI-data=2152
移植后程序空间显示如下:
Program Size: Code=29014 RO-data=3398 RW-data=1304 ZI-data=2328
计算可得算法共使用代码空间3396字节,RAM空间 2412字节,满足限制条件。
通过vc在PC端进行AES-128运行耗时测试,结果如下:
图 AES-128在电脑上运行耗时测试
PC端运行加密算法耗时5.8us,运行解密算法耗时10.1us。
通过仿真在GD-MCU端进行AES-128运行耗时测试,结果如下:
图 aes-128在mcu上运行耗时测试
TIME1进行加密计时,单位10us
TIME2进行解密计时,单位10us
GD-MCU运行加密算法测试耗时460s,运行解密算法测试耗时490us。
对于50ms的应答窗口来说,算法耗时完全可以满足限制条件。
表 AES-128参数特性总结
加密方式 | AES-128 |
密文长度 | 16字节 |
秘钥长度 | 16字节 |
占用代码空间 | 3.3kB |
占用RAM | 2.4kB |
PC运行耗时 | 加密5.8us 解密10.1us |
MCU运行耗时 | 加密460us 解密490us |
评估结论 | 各方面均满足条件,可行性高 |
2.BLOWFISH-64可行评估
BLOWFISH算法是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。32位处理器诞生后,BLOWFISH算法因其在加密速度上超越了DES而引起人们的关注。BLOWFISH算法具有加密速度快、紧凑、密钥长度可变、可免费使用等特点,已被广泛使用于众多加密软件。据密码分析人士研究,目前对于16轮的Blowfish加密算法还没有破解的方法,但是对于少于16轮的BLOWFISH则可以通过某些手段加以破解。
BLOWFISH的明文,密文和秘钥都是8字节,满足限制条件。
将AES-128算法移植至sub-g无线模块工程,移植前程序空间如下:
Program Size: Code=25618 RO-data=1162 RW-data=1304 ZI-data=2152
移植后程序空间显示如下:
Program Size: Code=30284 RO-data=1364 RW-data=5404 ZI-data=2156
计算可得算法共使用代码空间4666字节,RO空间202字节,RAM空间4104字节,满足限制条件,但是RAM空间大概仅剩余500字节,后续功能扩展性较弱。
通过vc在PC端进行BLOWFISH-64运行耗时测试,结果如下:
图 BLLOWFISH-64在电脑上运行耗时测试
PC端运行加密算法耗时0.9us,运行解密算法耗时1.3us。
通过仿真在GD-MCU端进行AES-128运行耗时测试,结果如下:
图 BLLOWFISH-64在mcu上运行耗时测试
GD-MCU运行加密算法测试耗时50us,运行解密算法测试耗时50us。满足限制条件。
表 BLOWFISH-64参数特性总结
加密方式 | BLOWFISH-64 |
密文长度 | 8字节 |
秘钥长度 | 8字节 |
占用代码空间 | Code-4.6kB ROdata-202B |
占用RAM | 4.1kB |
PC运行耗时 | 加密0.9us 解密1.3us |
MCU运行耗时 | 加密50us 解密50us |
评估结论 | 各方面均满足条件,可行性高,但RAM使用较多(查表数据较大) |
2.RSA-512可行评估
非对称加密算法RSA的最小算力算法为RSA-512,但不论是明文,密文和秘钥,都超出了32字节的无线协议长度限制,因此并不适配当前应用场景。
将RSA-512算法移植至sub-g无线模块工程,移植前程序空间如下:
Program Size: Code=25618 RO-data=1162 RW-data=1304 ZI-data=2152
移植后程序空间显示如下:
Program Size: Code=31304 RO-data=1472 RW-data=1308 ZI-data=2156
计算可得算法共使用代码空间5686字节,RAM空间 318字节,满足限制条件。
在PC端测试RSA加解密耗时测试,结果如下:
图 RSA-512在电脑上运行耗时测试
PC端运行加密算法耗时377966.9us,运行解密算法耗时11083.7us。
通过仿真在GD-MCU端进行RSA-512运行耗时测试,结果如下:
图 RSA-512在mcu上运行耗时测试
GD-MCU运行加密算法测试耗时41.9s,运行解密算法测试耗时1.2s。算法耗时过长,不适配mcu应用场景。
表 RSA-512参数特性总结
加密方式 | RSA-512 |
密文长度 | 64字节 |
秘钥长度 | 64字节 |
占用代码空间 | 5.6kB |
占用RAM | 0.3kB |
PC运行耗时 | 加密377966.9us 解密11083.7us |
MCU运行耗时 | 加密41.9s 解密1.2s |
评估结论 | 不适配应用场景 |
3.RSA-512 + AES-128可行评估
RSA秘钥交换+AES加密同样因为无线协议32字节限制和耗时问题不适配当前应用场景。
4.ECDH + AES-128可行评估
ECDH秘钥协商需要通信双方先自行生成2组秘钥/公钥,然后再进行公钥交换,最后通过ECC算法运算得到最终秘钥。最终秘钥将适配为AES-128的通信秘钥。
查阅资料比较适配的ECDH标准算法为sect163,协商秘钥长度为48个字节。如要适配AES-128的16字节秘钥,可以做截取操作。
将ECDH算法移植至sub-g无线模块工程,移植前程序空间如下:
Program Size: Code=25618 RO-data=1162 RW-data=1304 ZI-data=2152
移植后程序空间显示如下:
Program Size: Code=28050 RO-data=1282 RW-data=1304 ZI-data=2416
计算可得算法共使用代码空间2432字节,RAM空间 384字节,另外考虑AES-128会使用代码空间3396字节,RAM空间 2412字节,因此ECDH+AES总共使用代码空间5828字节,RAM空间2816字节,满足空间限制条件。
在PC端测试ECDH秘钥交换耗时测试,结果如下:
图 ECDH在电脑上运行耗时测试
PC端生成秘钥对平均耗时17639.3us,运行秘钥交换算法平均耗时16529.4us。
通过仿真在GD-MCU端进行RSA-512运行耗时测试,结果如下:
图 ECDH在mcu上运行耗时测试
GD-MCU生成密钥对平均耗时4.13s,运行秘钥交换算法平均耗时4.14s。算法耗时较长但仍处于可评估范围。
表 ECDH-SECT163+AES-128参数特性总结
加密方式 | ECDH-SECT163+AES-128 |
协商秘钥长度 | 48字节 |
密文长度 | 16字节 |
秘钥长度 | 16字节 |
占用代码空间 | 5.8kB |
占用RAM | 2.8kB |
PC运行耗时 | 生成密钥对17639.3us 协商秘钥16529.4us |
MCU运行耗时 | 生成密钥对4.13s 协商秘钥4.14s |
评估结论 | 协商过程较长,其余满足条件 |
5.总结
结合上述数据,总结加密方案可行性分析统计表格如下:
表 各加密方案评估特性总结
加密方式 | 算法复杂度 | 安全级别 | 方案可行性 | 限制 |
AES | 低 | 标准 | 简单可行 | 秘钥安全性低 |
RSA | 高 | 标准 | 不可行 | 加密长度长,耗时 |
RSA秘钥交换+AES | 秘钥交换过程高 使用过程低 | 较高 | 不可行 | 加密长度长, 耗时 |
ECDH秘钥协商+AES | 秘钥协商过程中 使用过程低 | 较高 | 可行但是协商过程耗时长 | 协商过程耗时长 |
- 加密方案设计
略