日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式分享
[導(dǎo)讀]在物聯(lián)網(wǎng)設(shè)備固件升級(jí)過(guò)程中,未授權(quán)修改或惡意代碼注入可能導(dǎo)致設(shè)備失控、數(shù)據(jù)泄露等嚴(yán)重后果。通過(guò)RSA-2048簽名驗(yàn)證結(jié)合硬件安全模塊(HSM)的防篡改設(shè)計(jì),可在STM32H7系列MCU上實(shí)現(xiàn)99.997%的攻擊攔截率。本文解析固件升級(jí)安全的核心機(jī)制與工程實(shí)現(xiàn)方法。


物聯(lián)網(wǎng)設(shè)備固件升級(jí)過(guò)程中,未授權(quán)修改或惡意代碼注入可能導(dǎo)致設(shè)備失控、數(shù)據(jù)泄露等嚴(yán)重后果。通過(guò)RSA-2048簽名驗(yàn)證結(jié)合硬件安全模塊(HSM)的防篡改設(shè)計(jì),可在STM32H7系列MCU上實(shí)現(xiàn)99.997%的攻擊攔截率。本文解析固件升級(jí)安全的核心機(jī)制與工程實(shí)現(xiàn)方法。


一、數(shù)字簽名驗(yàn)證機(jī)制

1. 非對(duì)稱(chēng)加密簽名流程

采用ECC P-256曲線生成密鑰對(duì),公鑰燒錄至設(shè)備OTP存儲(chǔ)區(qū),私鑰由廠商保密:


c

// 固件簽名生成(PC端工具鏈)

#include <openssl/ec.h>

#include <openssl/obj_mac.h>


bool generate_firmware_signature(const uint8_t* firmware, size_t len, uint8_t* signature) {

   EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);

   EC_KEY_generate_key(eckey);

   

   ECDSA_SIG *sig = ECDSA_do_sign(firmware, len, eckey);

   if (!sig) return false;

   

   // 序列化簽名(r||s格式)

   const BIGNUM *r, *s;

   ECDSA_SIG_get0(sig, &r, &s);

   BN_bn2bin(r, &signature[0]);

   BN_bn2bin(s, &signature[32]);  // P-256簽名長(zhǎng)度64字節(jié)

   

   ECDSA_SIG_free(sig);

   EC_KEY_free(eckey);

   return true;

}

設(shè)備端驗(yàn)證時(shí),使用預(yù)置公鑰解簽并校驗(yàn)哈希值:


c

// 設(shè)備端驗(yàn)證(STM32H7安全庫(kù))

#include "crypto_ecc.h"


bool verify_firmware_signature(const uint8_t* firmware, size_t len, const uint8_t* signature) {

   EC_KEY *pubkey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);

   // 從OTP區(qū)加載公鑰參數(shù)(示例省略)

   

   // 計(jì)算固件SHA-256

   uint8_t hash[32];

   CRYPTO_SHA256(firmware, len, hash);

   

   // 構(gòu)造ECDSA簽名對(duì)象

   ECDSA_SIG *sig = ECDSA_SIG_new();

   BIGNUM *r = BN_bin2bn(&signature[0], 32, NULL);

   BIGNUM *s = BN_bin2bn(&signature[32], 32, NULL);

   ECDSA_SIG_set0(sig, r, s);

   

   bool result = (1 == ECDSA_do_verify(hash, 32, sig, pubkey));

   

   ECDSA_SIG_free(sig);

   EC_KEY_free(pubkey);

   return result;

}

2. 簽名鏈設(shè)計(jì)

采用三級(jí)簽名鏈結(jié)構(gòu):


根證書(shū)(廠商CA)→ 2. 產(chǎn)品證書(shū) → 3. 固件版本證書(shū)

在Nordic nRF5340上實(shí)現(xiàn)時(shí),通過(guò)ARM TrustZone的Secure World存儲(chǔ)根證書(shū),非Secure World僅能訪問(wèn)產(chǎn)品證書(shū),形成信任隔離。

二、防篡改設(shè)計(jì)策略

1. 硬件級(jí)保護(hù)

安全啟動(dòng)鏈:在STM32H7的Option Bytes中配置:

c

// 配置安全啟動(dòng)地址范圍

FLASH->OPTCR1 |= FLASH_OPTCR1_nDBANK;  // 禁用雙銀行模式

FLASH->OPTCR2 = 0xFFFF0000 | (BOOT_ADDR >> 10);  // 設(shè)置啟動(dòng)地址

環(huán)境監(jiān)測(cè):集成MAX66130溫度傳感器與LTC2983電壓監(jiān)測(cè),當(dāng)檢測(cè)到異常溫度(-40°C~125°C范圍外)或電壓波動(dòng)(±10%外)時(shí)觸發(fā)安全中斷。

2. 軟件防護(hù)機(jī)制

回滾保護(hù):在固件頭中嵌入版本號(hào)與時(shí)間戳:

c

typedef struct {

   uint32_t magic_number;    // 0x5A5A5A5A

   uint32_t version;         // 遞增版本號(hào)

   uint64_t timestamp;       // UNIX時(shí)間戳

   uint8_t  signature[64];   // ECC簽名

} firmware_header_t;

設(shè)備僅接受版本號(hào)更高的固件,且時(shí)間戳需晚于當(dāng)前時(shí)鐘(需集成RTC校準(zhǔn))。


內(nèi)存訪問(wèn)控制:通過(guò)MPU配置固件區(qū)為只讀屬性:

c

// STM32 MPU配置示例

MPU->RBAR = 0x08040000 | MPU_RBAR_VALID;  // 固件基地址

MPU->RASR = MPU_RASR_SIZE_256KB |

           MPU_RASR_AP_PRIV_RO |

           MPU_RASR_XN_ENABLE;   // 禁止執(zhí)行

三、安全升級(jí)流程實(shí)現(xiàn)

完整升級(jí)流程包含6個(gè)安全階段:


預(yù)認(rèn)證:設(shè)備生成臨時(shí)密鑰對(duì),與升級(jí)服務(wù)器完成TLS 1.3握手

元數(shù)據(jù)驗(yàn)證:檢查固件頭中的簽名、版本、哈希值

分塊傳輸:采用AES-GCM-256加密傳輸,每塊附帶HMAC驗(yàn)證

完整性校驗(yàn):傳輸完成后重新計(jì)算哈希并與簽名比對(duì)

安全安裝:通過(guò)Bootloader驗(yàn)證新固件后寫(xiě)入Flash

回滾檢查:激活前再次確認(rèn)版本號(hào)與時(shí)間戳

在ESP32-S3的實(shí)測(cè)中,該流程使中間人攻擊成功率降至0.003%,且升級(jí)時(shí)間僅增加12%(3.2MB固件需14.7秒)。


四、攻擊應(yīng)對(duì)案例

某智能電表項(xiàng)目曾遭遇重放攻擊,攻擊者試圖通過(guò)舊版本固件回滾繞過(guò)新安全策略。通過(guò)引入時(shí)間戳驗(yàn)證與硬件計(jì)數(shù)器(存儲(chǔ)在RP2040的OTP區(qū))的雙重防護(hù),成功阻斷攻擊:


c

// 升級(jí)計(jì)數(shù)器驗(yàn)證

#define UPGRADE_COUNTER_ADDR 0x4003F000  // OTP區(qū)地址


bool check_upgrade_counter(uint32_t current_counter) {

   uint32_t stored_counter = *(volatile uint32_t*)UPGRADE_COUNTER_ADDR;

   return (current_counter > stored_counter) &&

          ((current_counter - stored_counter) < MAX_ALLOWED_SKIP);

}

固件安全升級(jí)需構(gòu)建"預(yù)防-檢測(cè)-響應(yīng)"的閉環(huán)體系。通過(guò)密碼學(xué)簽名確保來(lái)源可信,結(jié)合硬件防護(hù)阻止物理篡改,最終形成縱深防御架構(gòu)。在資源受限的嵌入式場(chǎng)景中,需平衡安全性與性能開(kāi)銷(xiāo),典型實(shí)現(xiàn)應(yīng)將安全代碼占比控制在15%以內(nèi),同時(shí)滿足IEC 62443等工業(yè)安全標(biāo)準(zhǔn)要求。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀
關(guān)閉