用優(yōu)化的NB-IoT模塊:硬件安全、密鑰管理與選型實(shí)戰(zhàn))
這幾年窄帶物聯(lián)網(wǎng)NB-IoT模塊在智能表計(jì)、煙霧報(bào)警器、資產(chǎn)追蹤這些場(chǎng)景里鋪量鋪得很猛。但有個(gè)問(wèn)題一直容易被忽略不少項(xiàng)目在選型時(shí)只看功耗和信號(hào)覆蓋等到設(shè)備部署出去才被安全問(wèn)題打個(gè)措手不及。我最近經(jīng)手的一個(gè)園區(qū)表計(jì)項(xiàng)目因?yàn)樾酒碳嬖诒贿h(yuǎn)程篡改的隱患差點(diǎn)導(dǎo)致整批次設(shè)備需要回廠重刷。所以在選“NB-IoT模塊”時(shí)“是否為安全應(yīng)用做了專(zhuān)項(xiàng)優(yōu)化”必須放在和功耗、成本同等重要的位置。這篇內(nèi)容就圍繞“面向安全應(yīng)用優(yōu)化的窄帶物聯(lián)網(wǎng)模塊”來(lái)拆解講清楚它到底優(yōu)化了哪些東西、怎么判斷一顆模塊是否夠安全、以及在實(shí)際工程項(xiàng)目里要怎么集成和排查問(wèn)題。適合正在做物聯(lián)網(wǎng)終端設(shè)計(jì)、表計(jì)抄表、智慧城市傳感節(jié)點(diǎn)的工程師或者正在制定產(chǎn)品選型方案的朋友參考。1. 項(xiàng)目概述這是一顆什么樣的NB-IoT模塊1.1 核心需求解析為什么安全應(yīng)用需要專(zhuān)用模塊先回答一個(gè)基本問(wèn)題普通NB-IoT模塊和面向安全應(yīng)用優(yōu)化的NB-IoT模塊差別到底在哪常規(guī)的NB-IoT模塊核心目標(biāo)是低功耗、廣覆蓋和低成本。芯片內(nèi)部有RF射頻前端、基帶處理器、協(xié)議棧、電源管理單元標(biāo)準(zhǔn)方案通常會(huì)把大量的安全責(zé)任推給外部MCU和應(yīng)用層軟件。典型做法是MCU跑一個(gè)加密庫(kù)密鑰存在Flash某個(gè)扇區(qū)通過(guò)軟件算法做AES加密再配合云平臺(tái)的TLS證書(shū)通道。這種方案在項(xiàng)目原型階段看著夠用但一旦進(jìn)入批量部署問(wèn)題就暴露了。第一軟件加密占資源。NB-IoT模塊主頻低、內(nèi)存小軟件跑一次ECDH密鑰協(xié)商或者大塊數(shù)據(jù)AES加解密既費(fèi)時(shí)間又費(fèi)電。對(duì)于電池供電、上報(bào)周期長(zhǎng)的設(shè)備這是不能接受的浪費(fèi)。第二密鑰的存儲(chǔ)位置不安全。普通MCU的Flash可以被調(diào)試接口讀出來(lái)或者在固件升級(jí)過(guò)程中被截獲。哪怕加載了安全啟動(dòng)也不意味著密鑰能高枕無(wú)憂(yōu)——很多成本敏感的IoT設(shè)備壓根沒(méi)有獨(dú)立的安全存儲(chǔ)區(qū)域。第三沒(méi)有硬件級(jí)防篡改能力。物理接觸攻擊、側(cè)信道分析、故障注入攻擊……這些詞聽(tīng)起來(lái)像搞芯片安全的實(shí)驗(yàn)室才關(guān)心的事但如果你做的設(shè)備是智能燃?xì)獗怼㈦姳怼⒐芫W(wǎng)壓力傳感器這類(lèi)基礎(chǔ)設(shè)施攻擊者是有充分的物理接觸時(shí)間的。所以“面向安全應(yīng)用的NB-IoT模塊”本質(zhì)上就是把安全能力從軟件層下沉到硬件層增加獨(dú)立安全單元或安全島、集成硬件加解密引擎、設(shè)計(jì)安全的密鑰管理路徑、提供防篡改和防調(diào)試的物理防護(hù)。這就像普通門(mén)鎖和保險(xiǎn)柜的區(qū)別門(mén)鎖靠復(fù)雜結(jié)構(gòu)防住普通人保險(xiǎn)柜則是從材料、鎖芯、報(bào)警機(jī)制整個(gè)體系去對(duì)抗蓄意破壞者。1.2 適用場(chǎng)景畫(huà)像哪些項(xiàng)目真正需要“安全優(yōu)化”我接觸過(guò)不少項(xiàng)目需求一上來(lái)就說(shuō)“我要一個(gè)NB-IoT模塊”但細(xì)問(wèn)之后發(fā)現(xiàn)差異巨大。有的只是把一個(gè)溫濕度傳感器每半小時(shí)報(bào)一次數(shù)據(jù)數(shù)據(jù)丟了、被篡改了危害也不大有的是給燃?xì)獗碜鰯?shù)據(jù)采集和閥門(mén)控制一旦數(shù)據(jù)被劫持或指令被偽造后果就是安全事故。需要重點(diǎn)考慮安全優(yōu)化型NB-IoT模塊的大致是這幾類(lèi)應(yīng)用場(chǎng)景安全風(fēng)險(xiǎn)點(diǎn)需要安全模塊的原因智能燃?xì)獗?水表計(jì)費(fèi)數(shù)據(jù)被篡改、遠(yuǎn)程閥門(mén)控制指令被偽造涉及民生計(jì)費(fèi)和遠(yuǎn)程控制指令必須經(jīng)過(guò)簽名和完整性校驗(yàn)煙感/消防設(shè)備報(bào)警事件被偽造或抑制導(dǎo)致誤報(bào)漏報(bào)消防鏈路的價(jià)值就是“關(guān)鍵時(shí)刻一定可靠”不能被人為干擾電力管網(wǎng)監(jiān)測(cè)采集數(shù)據(jù)影響調(diào)度決策節(jié)點(diǎn)暴露在公共環(huán)境基礎(chǔ)設(shè)施級(jí)網(wǎng)絡(luò)對(duì)終端認(rèn)證、數(shù)據(jù)加密有硬性要求資產(chǎn)追蹤/物流鎖定位狀態(tài)和開(kāi)鎖指令被攻擊鎖控類(lèi)終端對(duì)命令源認(rèn)證要求高且節(jié)點(diǎn)常處于無(wú)人看管環(huán)境智慧醫(yī)療設(shè)備患者隱私數(shù)據(jù)泄露、設(shè)備被遠(yuǎn)程操控醫(yī)療數(shù)據(jù)合規(guī)要求高設(shè)備本身價(jià)值高、易被物理攻擊反過(guò)來(lái)說(shuō)如果你的項(xiàng)目是農(nóng)業(yè)大棚的溫濕度采集、垃圾桶滿(mǎn)溢監(jiān)測(cè)等數(shù)據(jù)非敏感、無(wú)控制指令的場(chǎng)景用普通NB-IoT模塊完全可以沒(méi)必要為安全功能額外買(mǎi)單。2. 安全優(yōu)化的核心技術(shù)拆解2.1 硬件安全底座不止是“加個(gè)加密芯片”先說(shuō)結(jié)論現(xiàn)在的安全優(yōu)化型NB-IoT模塊主流方案不是在模塊外面掛一顆獨(dú)立的SE安全芯片而是直接在SoC內(nèi)部集成一個(gè)獨(dú)立的安全域。很多人對(duì)這個(gè)概念有誤解以為“安全優(yōu)化在板上加個(gè)ATECC608A或者SE050”。這種外掛方案的思路沒(méi)錯(cuò)但工程上會(huì)帶來(lái)幾個(gè)麻煩一是硬件設(shè)計(jì)復(fù)雜多一顆芯片就多一路供電、多一條I2C/SPI總線(xiàn)BOM成本和調(diào)試工作量都會(huì)增加二是外掛安全芯片和模塊主控之間的通信接口本身可能成為攻擊點(diǎn)攻擊者可以嘗試在這條總線(xiàn)上做中間人截獲三是兩顆芯片之間的安全聯(lián)動(dòng)在軟件上做不好就會(huì)出現(xiàn)“模塊已經(jīng)安全了但另一顆芯片里存的密鑰還是明文”這種擰巴局面。所以真正面向安全應(yīng)用優(yōu)化的模塊會(huì)把下面這幾塊東西直接做進(jìn)芯片里。安全啟動(dòng)模塊上電后ROM里的引導(dǎo)代碼先對(duì)固件做簽名校驗(yàn)驗(yàn)證通過(guò)才允許運(yùn)行。這個(gè)機(jī)制保證了固件被篡改后設(shè)備起不來(lái)。注意很多模塊標(biāo)稱(chēng)支持安全啟動(dòng)但具體實(shí)現(xiàn)有差別。有的只是啟動(dòng)時(shí)算一下哈希并沒(méi)有做非對(duì)稱(chēng)簽名驗(yàn)證有的則是從ROM到應(yīng)用固件每一級(jí)都做了鏈?zhǔn)叫r?yàn)。做選型時(shí)要看模塊的啟動(dòng)鏈?zhǔn)欠裼型暾暮灻?yàn)證而不是單看宣傳頁(yè)上的“Secure Boot”兩個(gè)字。硬件加解密引擎AES、DES/3DES、RSA、ECC、SHA等算法直接由硬件電路完成不占用CPU。這一點(diǎn)對(duì)NB-IoT模塊很重要——基帶協(xié)議棧本身已經(jīng)占了相當(dāng)多的處理資源再來(lái)跑大量軟件加密要么導(dǎo)致協(xié)議棧響應(yīng)延遲要么被迫降低上報(bào)頻率。硬件引擎不僅算得快更重要的是能在計(jì)算過(guò)程中把密鑰保護(hù)在安全域內(nèi)密鑰不會(huì)暴露給應(yīng)用程序。安全存儲(chǔ)模塊內(nèi)部劃分出獨(dú)立的安全存儲(chǔ)區(qū)域密鑰、證書(shū)、設(shè)備唯一ID等敏感信息存進(jìn)去之后應(yīng)用處理器和外部調(diào)試接口都讀不到。有些模塊還支持防Dump機(jī)制即使攻擊者把Flash芯片拆下來(lái)放到編程器上也無(wú)法直接提取出內(nèi)容。這類(lèi)似于手機(jī)里的TrustZone和TEE的配合普通世界跑系統(tǒng)安全世界管密鑰。防篡改與防護(hù)機(jī)制更高階的模塊會(huì)做電壓、溫度、光線(xiàn)的物理攻擊檢測(cè)一旦檢測(cè)到異常環(huán)境自動(dòng)擦除敏感數(shù)據(jù)。還有隨機(jī)數(shù)發(fā)生器TRNG和高精度時(shí)鐘用來(lái)生成會(huì)話(huà)密鑰、構(gòu)造隨機(jī)挑戰(zhàn)值防止重放攻擊。2.2 軟件與通信層面的安全閉環(huán)這部分的核心邏輯是硬件安全底座提供了信任根軟件和協(xié)議層需要在信任根之上建立安全閉環(huán)。設(shè)備身份認(rèn)證采用一機(jī)一密每顆模塊在出廠時(shí)燒錄獨(dú)立的設(shè)備證書(shū)或預(yù)置根密鑰聯(lián)網(wǎng)后通過(guò)證書(shū)或基于預(yù)置密鑰的雙向認(rèn)證完成身份確認(rèn)。在NB-IoT場(chǎng)景里常見(jiàn)做法是使用基于PSK的TLS/DTLS或者輕量的LWM2M安全模式避免在信令開(kāi)銷(xiāo)上付出太高代價(jià)。需要提醒的是在選型時(shí)要和模塊原廠確認(rèn)安全憑證的寫(xiě)入方式——是模塊出廠前燒錄好還是開(kāi)放給整機(jī)廠商在SMT產(chǎn)線(xiàn)上寫(xiě)入。這一點(diǎn)直接影響產(chǎn)線(xiàn)流程。通信加密NB-IoT本身運(yùn)行在運(yùn)營(yíng)商授權(quán)頻段上空口鏈路有3GPP定義的加密和完整性保護(hù)機(jī)制調(diào)制方式也和Wi-Fi、藍(lán)牙這種ISM頻段技術(shù)完全不同從射頻層面做中間人攻擊的難度要大得多。但這不是說(shuō)應(yīng)用層就可以裸奔了。業(yè)務(wù)數(shù)據(jù)在端到端鏈路上往往還要經(jīng)過(guò)IoT平臺(tái)、業(yè)務(wù)服務(wù)器等多個(gè)節(jié)點(diǎn)空口安全只能保護(hù)無(wú)線(xiàn)這一段所以建議在應(yīng)用層再疊加一層TLS/DTLS加密。安全優(yōu)化模塊的硬件引擎在這里再次發(fā)揮作用應(yīng)用層加密的運(yùn)算基本不額外消耗電能也不會(huì)明顯增加復(fù)位恢復(fù)時(shí)間。安全OTA固件升級(jí)是NB-IoT設(shè)備最容易引入安全漏洞的環(huán)節(jié)。如果升級(jí)包沒(méi)有簽名驗(yàn)證攻擊者可以偽造一個(gè)帶后門(mén)的固件誘導(dǎo)設(shè)備下載。安全模塊要求升級(jí)包必須帶有合法簽名且固件解密在安全域內(nèi)完成更新過(guò)程中出現(xiàn)斷電等情況也不會(huì)導(dǎo)致設(shè)備變磚——因?yàn)榘踩珕?dòng)會(huì)在下次上電時(shí)發(fā)現(xiàn)固件校驗(yàn)失敗并回退到出廠版本的備份區(qū)。安全生命周期管理這個(gè)點(diǎn)容易被忽略。設(shè)備從出廠、安裝使用到退役報(bào)廢中間涉及密鑰更新、證書(shū)吊銷(xiāo)、設(shè)備注銷(xiāo)等環(huán)節(jié)。安全模塊應(yīng)該支持遠(yuǎn)程更新密鑰或證書(shū)以及在設(shè)備報(bào)廢時(shí)安全銷(xiāo)毀密鑰。選型時(shí)建議問(wèn)清楚模塊是否支持安全銷(xiāo)毀指令以及銷(xiāo)毀后能否重新灌裝密鑰再利用——有些行業(yè)客戶(hù)對(duì)設(shè)備利舊率有要求這個(gè)問(wèn)題不問(wèn)后期復(fù)用的邊際成本會(huì)很可觀。2.3 安全與功耗、性能的工程權(quán)衡NB-IoT本身就拼低功耗加了一堆安全機(jī)制之后如果設(shè)計(jì)處理不好功耗可能直接翻倍。這個(gè)權(quán)衡點(diǎn)值得展開(kāi)講。在實(shí)際測(cè)試中一次完整的安全鑒權(quán)流程比如TLS握手或LWM2M引導(dǎo)比普通數(shù)據(jù)傳輸多消耗的時(shí)間和電流大致如下基于某個(gè)典型模塊在實(shí)驗(yàn)室的實(shí)測(cè)數(shù)據(jù)操作階段未開(kāi)啟安全功能開(kāi)啟完整安全握手差異說(shuō)明入網(wǎng)附著約1.0s平均電流約90mA約1.2s平均電流約95mA安全模塊在附著階段通常會(huì)進(jìn)行控制面完整性校驗(yàn)業(yè)務(wù)數(shù)據(jù)上報(bào)AES加密約0.3s平均電流約110mA約0.35s平均電流約115mA硬件引擎幾乎不增加額外耗時(shí)應(yīng)用層安全握手無(wú)約0.6s平均電流約105mA若采用會(huì)話(huà)復(fù)用可顯著降低PSM睡眠電流約1.5μA約1.8μA安全電路在深度睡眠時(shí)仍需極小功耗維持隔離區(qū)狀態(tài)從這個(gè)表能看出硬件安全引擎對(duì)常規(guī)上報(bào)的影響確實(shí)很小主要代價(jià)集中在安全握手階段。所以工程上要做的不是“為了安全把每次上報(bào)都做一次完整握手”而是設(shè)法復(fù)用會(huì)話(huà)、延長(zhǎng)安全會(huì)話(huà)生命周期盡量把握手頻率降下來(lái)。具體來(lái)說(shuō)可以這樣設(shè)計(jì)設(shè)備首次上電注冊(cè)時(shí)做一次完整的密鑰協(xié)商之后的N次上報(bào)都復(fù)用同一個(gè)安全會(huì)話(huà)定時(shí)在低峰時(shí)段例如每天凌晨刷新一次會(huì)話(huà)。這樣既能保證數(shù)據(jù)通道加密又不會(huì)因?yàn)榘踩珯C(jī)制拖慢正常業(yè)務(wù)。還有一個(gè)經(jīng)驗(yàn)值是NB-IoT模塊在PSM省電模式下RRC連接完全釋放此時(shí)TLS會(huì)話(huà)一般也無(wú)法保持模塊從PSM醒來(lái)后重新建立RRC連接時(shí)可以先發(fā)起會(huì)話(huà)恢復(fù)請(qǐng)求而不是直接重新握手這樣能省掉一部分最耗時(shí)的操作。3. 安全NB-IoT模塊的選型與集成實(shí)操3.1 選型要點(diǎn)六個(gè)必須問(wèn)清楚的問(wèn)題選型階段如果只看模塊的“安全特性列表”很容易踩坑。我把自己總結(jié)的一套選型問(wèn)題清單列出來(lái)可以直接拿去做選型問(wèn)卷第一安全啟動(dòng)是否逐級(jí)校驗(yàn)要確認(rèn)ROM→Bootloader→應(yīng)用固件每一級(jí)都有簽名校驗(yàn)而不是只校驗(yàn)了第一級(jí)。如果只有第一級(jí)校驗(yàn)攻擊者可以繞過(guò)后續(xù)加載環(huán)節(jié)直接替換應(yīng)用固件相當(dāng)于安全啟動(dòng)形同虛設(shè)。第二密鑰是否可遠(yuǎn)程更新設(shè)備部署后如果密鑰因泄露、工廠重置等原因需要更換模塊能不能通過(guò)安全通道遠(yuǎn)程更新密鑰能支持遠(yuǎn)程更新的模塊在長(zhǎng)生命周期項(xiàng)目里價(jià)值很大。第三安全存儲(chǔ)容量和數(shù)量。模塊支持保存多少組密鑰和證書(shū)每組密鑰的可用空間是多大有的模塊安全存儲(chǔ)區(qū)很小只能放一把根密鑰多設(shè)備、多項(xiàng)目的場(chǎng)景就不夠用。第四是否支持國(guó)密算法。如果你做的是燃?xì)獗怼⑺磉@類(lèi)可能接入國(guó)資云或政務(wù)平臺(tái)的項(xiàng)目需要確認(rèn)模塊的硬件引擎是否支持SM2、SM3、SM4。很多海外平臺(tái)的方案只支持國(guó)際算法遇到合規(guī)要求就得換料非常耽誤項(xiàng)目。第五認(rèn)證與合規(guī)情況。模塊有沒(méi)有通過(guò)PSA Certified、Common Criteria EAL之類(lèi)的安全認(rèn)證有沒(méi)有通過(guò)對(duì)應(yīng)運(yùn)營(yíng)商的入庫(kù)測(cè)試認(rèn)證情況在招標(biāo)和目視檢查環(huán)節(jié)經(jīng)常被要求提供提前確認(rèn)清楚能省去很多麻煩。第六安全功能的生命周期。模塊原廠有沒(méi)有承諾安全補(bǔ)丁的更新周期NB-IoT模塊的使用周期比較長(zhǎng)表計(jì)類(lèi)設(shè)備常要求10年以上如果模塊原廠對(duì)漏洞響應(yīng)不及時(shí)后面想修復(fù)漏洞就只能整機(jī)換新代價(jià)非常大。3.2 硬件與供電設(shè)計(jì)注意事項(xiàng)選型之后進(jìn)入硬件設(shè)計(jì)安全模塊和普通模塊在外部電路上需要特別留意兩點(diǎn)一是供電余量要留足。安全模塊在固件校驗(yàn)、密鑰協(xié)商等階段瞬時(shí)電流可能比普通模塊更高尤其是某些模塊在做RSA簽名時(shí)會(huì)短暫拉高電流。為此建議在模塊電源輸入端預(yù)留至少30%的電流余量并且在模塊附近放置足夠的儲(chǔ)能電容典型值100μF陶瓷電容470μF電解電容并聯(lián)避免瞬間壓降導(dǎo)致模塊復(fù)位。實(shí)測(cè)經(jīng)驗(yàn)如果模塊在入網(wǎng)喚醒瞬間掉電重啟整個(gè)業(yè)務(wù)流程會(huì)被打斷返工排查的工時(shí)遠(yuǎn)大于多放一個(gè)電容的成本。二是調(diào)試接口的管控。做產(chǎn)品開(kāi)發(fā)時(shí)研發(fā)工程師肯定需要調(diào)試接口但量產(chǎn)版本必須把模塊調(diào)試口的物理訪問(wèn)通道封掉防止攻擊者通過(guò)調(diào)試口讀取Flash或注入指令。安全模塊一般會(huì)支持配置關(guān)閉調(diào)試口可以在初始化流程里顯式關(guān)閉。工程上建議在量產(chǎn)固件里就把調(diào)試口配置為關(guān)閉狀態(tài)并用日志系統(tǒng)替代物理調(diào)試這樣即使拿到整機(jī)也沒(méi)有調(diào)試通道可以攻擊。3.3 安全功能的初始化配置示例在模塊交付到整機(jī)產(chǎn)線(xiàn)時(shí)通常需要做一次初始化配置把安全功能和云平臺(tái)信息灌進(jìn)去。下面用一套典型的AT指令流程來(lái)說(shuō)明不同模塊的指令集可能略有差異但思路一致。# 1. 恢復(fù)出廠設(shè)置確保模塊狀態(tài)干凈 ATNRB # 2. 配置APN和網(wǎng)絡(luò)參數(shù)NB-IoT通常使用專(zhuān)屬APN ATCGDCONT1,IP,nbiot.example.com # 3. 入網(wǎng)并查看是否注冊(cè)成功 ATCGATT1 ATCEREG1 # 等約5秒后查詢(xún)注冊(cè)狀態(tài) ATCEREG? # 返回 CEREG: 1 或 列表中的某個(gè)值代表注冊(cè)成功 # 4. 配置安全會(huì)話(huà)參數(shù)PSK格式根據(jù)各家模塊定義 ATSSLMODE1 ATSSLPKEY客戶(hù)端私鑰標(biāo)識(shí) ATSSLPSKPSK密鑰十六進(jìn)制字符串 # 5. 開(kāi)啟安全啟動(dòng)校驗(yàn)這個(gè)開(kāi)關(guān)一般只能在出廠前配置一次 ATSECBOOT1 # 6. 關(guān)閉調(diào)試口防止量產(chǎn)設(shè)備被物理接入 ATDBGPORT0 # 7. 保存配置并重啟 ATCSDF ATNRB執(zhí)行完這套流程后模塊和平臺(tái)建立連接時(shí)就會(huì)自動(dòng)走加密通道后續(xù)應(yīng)用層通過(guò)MQTT或LWM2M協(xié)議上報(bào)數(shù)據(jù)時(shí)傳輸層已經(jīng)有完整性保護(hù)和加密保障。另外要特別留意一句話(huà)安全配置的很多開(kāi)關(guān)是一次性燒錄不可逆的。所以批量產(chǎn)線(xiàn)上一定要在產(chǎn)線(xiàn)測(cè)試階段先跑通全部流程再批量執(zhí)行避免因?yàn)榕渲缅e(cuò)誤導(dǎo)致整批模塊需要退回原廠重置。產(chǎn)線(xiàn)上的流程通常是先燒錄固件和密鑰再執(zhí)行初始化腳本然后做連接平臺(tái)的安全握手測(cè)試最后關(guān)閉調(diào)試口。這樣一個(gè)順序下來(lái)出問(wèn)題的模塊在測(cè)試環(huán)節(jié)就會(huì)被攔截。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 安全握手失敗、連接被平臺(tái)拒絕這是NB-IoT安全設(shè)備上線(xiàn)時(shí)最常遇到的問(wèn)題。故障現(xiàn)象是模塊已經(jīng)注冊(cè)到運(yùn)營(yíng)商網(wǎng)絡(luò)但連接IoT平臺(tái)時(shí)報(bào)認(rèn)證失敗或者握手超時(shí)。排查思路按照下面幾步走通常能快速定位先做協(xié)議棧層面的基礎(chǔ)檢查。確認(rèn)模塊注冊(cè)狀態(tài)是已入網(wǎng)SIM卡沒(méi)有被欠費(fèi)停用APN參數(shù)正確。如果這些都沒(méi)問(wèn)題再往下查安全配置。最常見(jiàn)的原因是根密鑰或證書(shū)不一致。很多整機(jī)廠商在打樣階段設(shè)備側(cè)的密鑰和平臺(tái)側(cè)的密鑰是分開(kāi)錄入的兩邊如果有一個(gè)字節(jié)不一致握手就會(huì)失敗。建議先核對(duì)兩端密鑰的十六進(jìn)制字符串再檢查是不是存在大小端或ASCII/Hex格式的轉(zhuǎn)換問(wèn)題——這個(gè)坑我踩過(guò)不止一次平臺(tái)側(cè)存的是ASCII字符串設(shè)備側(cè)存的是Hex解碼后的字節(jié)看起來(lái)“一樣的密鑰”實(shí)際完全不同。還有一種情況是設(shè)備側(cè)安全存儲(chǔ)區(qū)的密鑰沒(méi)有成功寫(xiě)入或者模塊內(nèi)還有出廠默認(rèn)的測(cè)試密鑰。可以通過(guò)AT指令查詢(xún)密鑰狀態(tài)確認(rèn)實(shí)際生效的密鑰ID和指紋再判斷是否需要重新灌裝。4.2 數(shù)據(jù)上報(bào)偶爾超時(shí)或掉線(xiàn)安全模塊因?yàn)槲帐至鞒涕L(zhǎng)對(duì)網(wǎng)絡(luò)環(huán)境更敏感。如果某片區(qū)域信號(hào)偏弱模塊可能需要在覆蓋增強(qiáng)級(jí)別下進(jìn)行多次重傳握手包來(lái)回次數(shù)一多很容易觸發(fā)超時(shí)。這時(shí)要把覆蓋等級(jí)參數(shù)CE Level調(diào)大讓模塊有更多的重傳機(jī)會(huì)同時(shí)把安全握手的超時(shí)時(shí)間也相應(yīng)調(diào)大。另外運(yùn)營(yíng)商網(wǎng)絡(luò)的PSM和eDRX參數(shù)配置也會(huì)影響連接保持。如果網(wǎng)絡(luò)側(cè)的T3324定時(shí)器設(shè)置過(guò)短模塊在空閑態(tài)很快被釋放下一次上報(bào)就得重新走完整鏈路數(shù)據(jù)量和功耗都會(huì)上升。遇到這種情況可以和運(yùn)營(yíng)商確認(rèn)基站側(cè)PSM定時(shí)器配置或者讓平臺(tái)側(cè)在設(shè)備上報(bào)后主動(dòng)做一次“下行可達(dá)性檢測(cè)”減少無(wú)效重連。4.3 固件升級(jí)后安全功能失配項(xiàng)目運(yùn)行過(guò)程中模塊原廠可能會(huì)發(fā)布新固件修復(fù)漏洞或增加功能特性。但由于安全模塊涉及安全存儲(chǔ)區(qū)和啟動(dòng)校驗(yàn)升級(jí)固件后偶爾會(huì)出現(xiàn)兩種情況一是升級(jí)后安全域數(shù)據(jù)被重置設(shè)備需要重新灌裝密鑰二是新固件默認(rèn)開(kāi)啟某些新的安全策略導(dǎo)致原有流程不兼容。處理這類(lèi)問(wèn)題建議升級(jí)前必須做備份確認(rèn)升級(jí)包的簽名有效并在測(cè)試環(huán)境開(kāi)發(fā)板或少量樣機(jī)上先跑一版完整的上報(bào)流程再放到批量設(shè)備上執(zhí)行。尤其要注意如果設(shè)備已經(jīng)在現(xiàn)場(chǎng)運(yùn)行OTA升級(jí)一旦因?yàn)閿嚯娀蚓W(wǎng)絡(luò)原因中斷設(shè)備可能會(huì)進(jìn)入恢復(fù)區(qū)等待重傳。別急著切斷電源多數(shù)情況下讓模塊重新聯(lián)網(wǎng)、恢復(fù)升級(jí)流程就能解決如果模塊進(jìn)入“安全恢復(fù)模式”則需要清除升級(jí)標(biāo)記重新推送或者按原廠指引處理。5. 幾個(gè)實(shí)操心得這些踩坑經(jīng)驗(yàn)雖然不是教條但都是真金白銀換回來(lái)的。第一安全模塊的選型千萬(wàn)不要拍腦袋。建議用一個(gè)統(tǒng)一的安全能力評(píng)估表去打分而不是聽(tīng)銷(xiāo)售介紹。打分項(xiàng)包括安全啟動(dòng)級(jí)別、密鑰存儲(chǔ)容量、硬件算法支持含國(guó)密、安全OTA能力、防篡改硬件機(jī)制、原廠安全響應(yīng)承諾、認(rèn)證資質(zhì)。把每項(xiàng)按權(quán)重打分最終橫向?qū)Ρ缺戎豢磪?shù)表和品牌口碑靠譜得多。第二安全調(diào)試需要預(yù)留充足時(shí)間。項(xiàng)目排期里安全模塊的公網(wǎng)聯(lián)調(diào)時(shí)間至少要比普通模塊多預(yù)留一周。因?yàn)榘踩帐稚婕暗脑O(shè)備和平臺(tái)側(cè)問(wèn)題很多時(shí)候不是單方可以解決的需要同時(shí)拉通模塊原廠、云平臺(tái)技術(shù)支持和網(wǎng)關(guān)/基站側(cè)一起排查。這周的緩沖時(shí)間能讓你在大批量試產(chǎn)前把問(wèn)題暴露干凈。第三密鑰管理要從第一天就開(kāi)始設(shè)計(jì)不能臨時(shí)補(bǔ)。很多團(tuán)隊(duì)先開(kāi)發(fā)完功能再思考密鑰管理結(jié)果發(fā)現(xiàn)密鑰在開(kāi)發(fā)環(huán)境里已經(jīng)被寫(xiě)死在大量測(cè)試代碼中。建議從一開(kāi)始就建立密鑰的分級(jí)管理制度開(kāi)發(fā)環(huán)境用開(kāi)發(fā)密鑰測(cè)試環(huán)境用測(cè)試密鑰生產(chǎn)環(huán)境用生產(chǎn)密鑰三套體系完全隔離。哪怕規(guī)模小也要走這個(gè)流程否則后期密鑰整改的代價(jià)會(huì)大得驚人。第四不要忽略模塊原廠的安全公告郵件列表。NB-IoT模塊不像手機(jī)系統(tǒng)那樣天天修漏洞但安全更新確實(shí)會(huì)不定期發(fā)布。訂閱原廠的安全公告定期檢查模塊是否有已知漏洞和修復(fù)版本這是設(shè)備在整個(gè)生命周期內(nèi)保持安全性的底線(xiàn)動(dòng)作。很多從業(yè)者設(shè)備部署完就不管了等到安全隱患爆出來(lái)已經(jīng)晚了。