无线发送接收模块WiFi芯片esp8266乐鑫官网数据完整性保护,对一段数据进行完整性校验,通常会用到一个称为校验和(也称为摘要、指纹、Hash 值、散列值)的数据。校验和是由相应的完整性校验算法生成的具有固定长度的校验数据,该校验数据基本代表了该数据块的唯一性,就如同一个人的指纹或者身份证号可以唯一地代表这个人一样。完整性校验算法如下所示:
文本或者数据段——完整性校验算法——校验和
无线发送接收模块WiFi芯片esp8266乐鑫官网完整性校验算法具有下列性质:
(1)抗碰撞性。抗碰撞性是指在算法规定的数据长度内,找不到(或很难找到) 任意两个不同的数据段x和y,使得由该算法生成的校验和完全相同。碰撞是指随着数据的增多,出现部分数据丢失或者损坏,但最终能计算出来正确的校验和的情况。
(2)原始数据不可计算性。在已知校验和而未知原始数据段的情况下,很难通过校验和反向推算出原始数据。
若对完整性校验算法输入不同的数据,并得到相同的校验和,则称该现象为发生了一次碰撞常用的完整性校验算法有 CRC、MD5、SHA1和 SHA256 等,它们得到的校验和长度不一样产生碰撞的概率也不同。例如,CRC32 的校验和长度为 32 B,在理论上能保证 512 MB 范围内的数据不发生碰撞,但超出这个范围的数据发生碰撞的概率将增大。
对数据块执行完整性校验的常用方法是为待校验的数据块附加校验和。在数据块的后面追加校验和,在接收到该数据块后或者使用数据前,重新计算该段数据的校验和,对比附加在数据块后面的校验和,无线发送接收模块WiFi芯片esp8266乐鑫官网若计算得到的校验和等于附加的校验和则认为数据是完整的,否则认为数据被篡改过或发生了误码。
固件数据的完整性校验
本节以 OTA 升级过程中固件数据的完整性校验为例,无线发送接收模块WiFi芯片esp8266乐鑫官网介绍固件数据的完整性校验是如何设计的。
在执行 OTA 升级过程中,若使用 HTTPS 协议传输数据,则发送方会在发送数据前生成数据的 CRC 校验和,接收方将重新计算接收到的数据的 CRC 校验和,值得注意的是,当使用 HTTPS 协议传输数据时,完全不必关心 CRC 验过程,HTTPS协议会在内部自动进行 CRC 校验。
此外,当设备使用存储在 Flash上的固件数据时,也会校验固件的完整性。在每次重启设各加载app 固件数据时,都会通过固件数据附带的 CRC 校验和做完整性检查,无线发送接收模块WiFi芯片esp8266乐鑫官网以确保即将运行的app固件数据是未损坏的。该过程是自动发生的,无须手动实现。
然而,仅仅对数据的完整性进行检查,对实现数据安全的保护是远远不够的。因为这些完整性校验算法的原理和实现通常都是开源的,那些别有用心的攻击者同样可以使用相同的 CRC校验算法,对一个自定义的固件附加 CRC 校验和,并烧录到设备的 FIash 中,从而通过设备的CRC 校验,被正常地运行。为了避免这种情况,还需要对数据的来源进行鉴别,这就涉及数据的合法性保护方案--Secure Boot 方案。
示例
Linux 系统中集成了一些用于计算校验和的工具,如 sha256sum和md5sum,我们可以使用这些工具来计算指定文件的校验和,无线发送接收模块WiFi芯片esp8266乐鑫官网并比较在修改文件内容前后生成的校验和的变化。在终端通过 md5sum 命令计算 hello.c 文件修改前后的校验和,命令如下:
$ md5sum hello.c
87cb921a75d421a57ba747275e8bbe6 //原始 hello.c文件的MD5 校验和
$ md5sum hello.c
79c3416910f9ea0d65a72cb720368416 //向 hello.c文件中添加一行打印语句后的MD5 校验和
可见,即便原始文件仅仅修改一句代码,其最终得到的 MD5 校验和也将发生较大的变化。
数据机密性保护
数据加密简介
数据加密的目的是让入侵者无法知道数据的真实含义,同时保证数据的使用者可以正确地解析数据。现在假设要对 Flash 上的数据进行加密,以防止别人读取并查看 Flash 上的数据。 13-6 说明了一些重要的术语,存储在 Flash 上的原始数据称为明文数据,使用加密算法生成的加密数据称为密文,加密数据对任何入侵者来说都是不可理解的。加密算法使用到了-个密钥 Key,它是一串数字或字符。在 13-6 所示的示例中,加密算法的加密规则是将原字符串中的每个字符替换为加 1后的字符,即原字符对应的 ASCI码加1 后得到的字符。加密算法使用的密钥是一个整型数字 1。解密的过程与加密的过程相反,对加密数据的每个字符都替换为减 1后的字符,就可以恢复出明文数据了。
无线发送接收模块WiFi芯片esp8266乐鑫官网所有的数据加密算法都涉及用一组数据替换另一组数据的思想, 13-6 使用了最简单的单码替换加密算法。实际使用的加密算法要比这种简单的加密算法复杂得多,但它们的基本思想
(明文数据/密钥Key)加密算法-->加密数据-->解密算法(明文数据/密钥Key)
13-6
数据加密算法通常可以分为两类: 对称加密算法和非对称加密算法。
(1)对称加密算法。顾名思义,对称加密算法在加密和解密的过程中使用的密钥是相同的,常用的对称加密算法有 DES、3DES 和AES 等。13-6 所示的加密过程就是对称加密的基本过程,加密和解密使用的密钥是相同的,即整型数字 1。
(2)非对称加密算法。在非对称加密算法中,需要使用两个不同的密钥,即公钥和私钥,它们是具有特定关联关系的一对字符串,其中公钥加密的内容,只有与之配对的私钥才能解密如果是私钥加密的内容,则只有与之配对的公钥才能解密。
进行对称加密的一个前提条件是加密者和解密者必须就共享密钥达成一致,即必须提前知道密钥的内容。但是,在某些情况下,加密者和解密者可能从未见过面,也不会通过网络以外的任何途径进行数据交互。此时,无线发送接收模块WiFi芯片esp8266乐鑫官网加密者和解密者还能在没有预先商定密钥的条件下进行加或解密吗?非对称加密算法可以满足这种场景的需求。
组合使用非对称加密和对称加密传输加密数据的基本过程,其中非对称加密用于传输对称加密要使用的密钥,通信双方获取到对称加密的密钥 Key 后,无线发送接收模块WiFi芯片esp8266乐鑫官网使用相对节省资源的对称加密算法保护通信数据的机密性。
常用的非对称加密算法是 RSA 算法,但本文并不详细地介绍加密算法的内容,在学握了上述数据加密的基础知识后,就可以开启下一段的新旅程了。