一、mbedTLS描述
简介
mbed TLS (原名 PolarSSL)旨在为嵌入式产品提供一个完整、易用且高效的加密解决方案。它支持广泛的加密算法和协议,具有代码量小、易于集成、性能优良等特点,被广泛应用于物联网设备、嵌入式网络设备等资源受限的系统中。
主要功能模块
1、加密算法支持
**a、对称加密算法:**支持 AES(高级加密标准)、DES(数据加密标准)、3DES 等常见的对称加密算法。这些算法可以用于对数据进行加密和解密,保护数据的机密性。例如,在嵌入式设备与服务器进行数据传输时,使用 AES 算法对传输的数据进行加密,防止数据在传输过程中被窃取。
**b、非对称加密算法:**提供 RSA、ECC(椭圆曲线密码学)等非对称加密算法的实现。非对称加密算法常用于密钥交换、数字签名等场景。比如,使用 RSA 算法进行设备的身份认证,确保通信双方的身份真实性。
**c、哈希算法:**包含 MD5、SHA - 1、SHA - 256 等哈希算法。哈希算法可以将任意长度的数据转换为固定长度的哈希值,常用于数据完整性校验和数字签名。例如,在下载文件时,通过计算文件的哈希值并与服务器提供的哈希值进行比对,确保文件在传输过程中没有被篡改。
2、SSL/TLS 协议支持
mbed TLS 实现了 SSL(安全套接层)和 TLS(传输层安全)协议,为网络通信提供安全保障。它支持多种 SSL/TLS 版本,包括 TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3,能够在嵌入式设备与服务器之间建立安全的加密通道,防止数据在网络传输过程中被窃听和篡改。
3、X.509 证书处理
支持 X.509 证书的解析、验证和生成。X.509 证书是 SSL/TLS 协议中用于身份验证的重要工具,mbed TLS 可以帮助嵌入式设备处理证书相关的操作,确保通信双方的身份合法。例如,在建立 SSL/TLS 连接时,客户端会验证服务器的证书,以确保连接到的是合法的服务器。
优势
轻量级设计:mbed TLS 的代码量相对较小,对系统资源的占用较少,适合在资源受限的嵌入式设备中使用。它可以根据实际需求进行裁剪,只包含必要的功能模块,进一步减小代码体积。
易于集成:mbed TLS 提供了简洁的 API 接口,方便开发者将其集成到现有的嵌入式项目中。同时,它遵循开源许可证,允许开发者自由使用、修改和分发。
高安全性:mbed TLS 经过了严格的安全审计和测试,能够有效抵御各种常见的安全攻击,如中间人攻击、重放攻击等。它还支持最新的加密标准和协议,确保系统的安全性。
应用场景
**物联网设备:**在物联网应用中,大量的设备需要通过网络进行通信,mbed TLS 可以为这些设备提供安全的通信保障,保护设备之间传输的数据安全。
**嵌入式网络设备:**如路由器、网关等嵌入式网络设备,使用 mbed TLS 可以确保网络通信的安全性,防止网络攻击和数据泄露。
二、详细讲解RSA跟AES的使用:
RSA的使用讲解:
原理
RSA 签名基于 RSA 非对称加密算法,其安全性依赖于大数分解的困难性。签名者使用自己的私钥对数据的哈希值进行处理,生成签名。验证者使用签名者的公钥对签名进行验证,通过比较验证结果与重新计算的哈希值来判断数据是否被篡改以及签名是否由签名者发出。
详细步骤
- 准备数据
首先需要确定要签名的数据。通常,为了提高效率和安全性,不会直接对原始数据进行签名,而是先计算数据的哈希值。常见的哈希算法有 SHA - 256、SHA - 512 等。(这里要进行说明为啥要做RSA签名前,要使用SHA-256对数据进行完整性校验:首先是使用RSA对整体数据进行签名验证会使用到大量的元数据,计算量过大,其次是使用RSA验证数据的来源,再者如果sha-256出现了小概率碰撞再通过RSA的私钥加持做成签名依然可以增加数据的安全性,因为私钥的保密性) - 生成密钥对
选择两个大质数 和 :质数的位数通常为 1024 位、2048 位或更高,以保证足够的安全性。
计算 : 是公钥和私钥的一部分。
计算 : 是 的欧拉函数。
选择公钥指数 :满足 且 与 互质,常见值为 65537。
计算私钥指数 :通过扩展欧几里得算法计算 ,使得 。
公钥为 ,私钥为 。 - 签名过程
计算数据的哈希值:使用选定的哈希算法(如 SHA - 256)对数据进行哈希运算,得到哈希值 。
使用私钥进行签名:对哈希值 进行模幂运算,公式为 ,其中 就是签名。 - 验证过程
接收数据和签名:验证者接收到原始数据和签名 。
重新计算数据的哈希值:使用与签名者相同的哈希算法对原始数据进行哈希运算,得到新的哈希值 。
使用公钥验证签名:对签名 进行模幂运算,公式为 。
比较结果:如果 ,则签名验证通过,说明数据在传输过程中没有被篡改,并且签名是由持有对应私钥的签名者发出的;否则,验证失败。
注:这里使用RSA的如果是STM32的话建议使用2048bit的长度,相对计算时间开销跟跟算法的安全性比较合适。
AES使用讲解
原理
AES 是一个迭代的、对称密钥分组密码算法,它将明文分成固定长度的块(通常为 128 位,即 16 字节),使用相同的密钥对每个块进行加密。密钥长度可以是 128 位、192 位或 256 位,密钥长度越长,加密的安全性通常越高。
AES 的加密过程主要包括以下几个步骤:
密钥扩展:将用户提供的初始密钥扩展为一系列轮密钥,轮密钥的数量取决于密钥长度和加密轮数。例如,128 位密钥需要进行 10 轮加密,对应 11 个轮密钥。
初始轮:将明文块与第一个轮密钥进行异或操作。
多轮迭代:进行多轮(128 位密钥为 9 轮,192 位密钥为 11 轮,256 位密钥为 13 轮)相同的变换操作,每一轮包括字节替换、行移位、列混淆和轮密钥加四个步骤。
最终轮:最后一轮与前面的轮次类似,但不进行列混淆操作。
工作模式
AES 有多种工作模式,不同的工作模式适用于不同的应用场景,常见的工作模式有:
ECB(电子密码本模式):最简单的工作模式,将明文分成多个块,每个块独立加密。相同的明文块会加密成相同的密文块,因此该模式不适合加密长数据,因为容易被分析出数据的模式。
CBC(密码块链接模式):每个明文块在加密前先与前一个密文块进行异或操作,第一个明文块需要与一个初始化向量(IV)进行异或。这种模式可以隐藏明文的模式,提高了加密的安全性,但加密过程是串行的,不适合并行处理。
CFB(密码反馈模式):将前一个密文块作为输入,通过加密算法生成一个密钥流,然后与当前明文块进行异或得到密文。该模式可以将 AES 转换为流密码,适合加密长度可变的数据。
OFB(输出反馈模式):与 CFB 类似,但密钥流的生成不依赖于明文和密文,而是通过不断加密一个初始向量得到。OFB 模式也将 AES 转换为流密码,并且加密和解密可以并行处理。
CTR(计数器模式):使用一个计数器作为输入,通过加密算法生成密钥流,然后与明文进行异或得到密文。计数器模式支持并行处理,效率较高,且加密和解密过程简单。
使用步骤
选择密钥长度和工作模式:根据实际需求选择合适的密钥长度(128 位、192 位或 256 位)和工作模式(如 CBC、CTR 等)。
生成或获取密钥:可以随机生成密钥,也可以从安全的密钥存储中获取。密钥的长度必须与选择的密钥长度一致。
初始化向量(IV):对于某些工作模式(如 CBC、CFB、OFB),需要生成一个初始化向量。IV 的长度通常与明文块的长度相同(128 位),并且每次加密时都应该使用不同的 IV。
加密数据:将明文数据按照所选的工作模式进行分块,使用 AES 算法和密钥对每个块进行加密,得到密文。
解密数据:使用相同的密钥和工作模式,对密文进行解密操作,恢复出原始明文。
注:使用与设备跟平台通信的话可以考虑AES-256,每个设备根据自生情况生成32字节唯一的密钥,通过对发送数据加密后,平台接收到对应设备的数据找到设备对应的密钥对密文进行解密明文操作(STM32可以考虑通过电压ADC的瞬时值进行has-256的计算或者直接使用STM32每个设备的UUID作为密钥,但是建议两者结合更好,因为电压计算的has-256存在万分之几的碰撞)