無線發送接收模塊WiFi芯片esp8266樂鑫官網數據完整性保護,對一段數據進行完整性校驗,通常會用到一個稱為校驗和(也稱為摘要、指紋、Hash 值、散列值)的數據。校驗和是由相應的完整性校驗算法生成的具有固定長度的校驗數據,該校驗數據基本代表了該數據塊的唯一性,就如同一個人的指紋或者身份證號可以唯一地代表這個人一樣。完整性校驗算法如下所示:
文本或者數據段——完整性校驗算法——校驗和
無線發送接收模塊WiFi芯片esp8266樂鑫官網完整性校驗算法具有下列性質:
(1)抗碰撞性??古鲎残允侵冈谒惴ㄒ幎ǖ臄祿L度內,找不到(或很難找到) 任意兩個不同的數據段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 校驗和也將發生較大的變化。
數據機密性保護
數據加密簡介
數據加密的目的是讓入侵者無法知道數據的真實含義,同時保證數據的使用者可以正確地解析數據?,F在假設要對 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 算法,但本文并不詳細地介紹加密算法的內容,在學握了上述數據加密的基礎知識后,就可以開啟下一段的新旅程了。