置HSM的32位MCU:讓物聯(lián)網(wǎng)設(shè)備安全從硬件信任根開始)
1. 為什么MCU里面必須塞一個(gè)硬件安全模塊Microchip這次放出的新款32位MCU最抓眼球的點(diǎn)就是“內(nèi)置硬件安全模塊Hardware Security Module, HSM”。很多人一看“安全模塊”四個(gè)字第一反應(yīng)是“哦又是一顆安全芯片”然后劃走。但實(shí)際不是這么簡單——這顆MCU是把過去需要單獨(dú)一顆安全芯片才能干的事直接集成到了主控內(nèi)部。對(duì)做物聯(lián)網(wǎng)網(wǎng)關(guān)、工業(yè)控制器、智能門鎖、充電樁、抄表終端、醫(yī)療設(shè)備的朋友來說這是一件值得坐下來聊清楚的事它意味著你可以在不增加BOM成本、不改變PCB面積的前提下把設(shè)備身份認(rèn)證、密鑰存儲(chǔ)、安全啟動(dòng)、OTA固件防篡改這些能力一次性補(bǔ)齊。我這兩年接觸的不少嵌入式項(xiàng)目里安全需求其實(shí)一直在漲但實(shí)際落地卻很掙扎。掙扎的點(diǎn)不在“要不要加密”而在“怎么在不犧牲成本、不折騰產(chǎn)線的前提下把安全做進(jìn)去”。這顆帶HSM的32位MCU本質(zhì)上就是沖著這個(gè)矛盾去的。這篇文章我會(huì)從設(shè)計(jì)思路、模塊原理、場(chǎng)景差異、開發(fā)流程和常見坑五個(gè)層面拆開講文章里會(huì)結(jié)合我自己在類似項(xiàng)目里的實(shí)操經(jīng)驗(yàn)盡量把“為什么這么設(shè)計(jì)”和“實(shí)際怎么用”都寫透。1.1 傳統(tǒng)MCU的安全困局鑰匙和鎖放在同一個(gè)房間先聊一個(gè)很多項(xiàng)目都踩過的坑。早期做聯(lián)網(wǎng)產(chǎn)品MCU里的固件和密鑰都是明文存在Flash里的。有人覺得“我的產(chǎn)品不起眼沒人會(huì)去抄”但現(xiàn)實(shí)是只要設(shè)備里存了私有密鑰、第三方服務(wù)的API Key或者云端通信證書就一定會(huì)有人想辦法把它讀出來。常規(guī)手段是開蓋、讀Flash、通過調(diào)試接口導(dǎo)出再反匯編固件提取算法和密鑰。對(duì)一個(gè)幾塊錢的消費(fèi)類設(shè)備來說攻擊成本幾百塊錢但一旦被提取了根密鑰整個(gè)產(chǎn)品線都有可能被仿冒。傳統(tǒng)MCU的問題恰恰在于加密算法跑在CPU里密鑰也放在同一片F(xiàn)lash里相當(dāng)于把鑰匙和鎖放在了同一個(gè)房間。軟件加密做得再復(fù)雜最終密鑰還是要以明文形式出現(xiàn)在內(nèi)存或Flash中只要攻擊者能拿到固件就有機(jī)會(huì)分析出來。哪怕你做了一層簡單的加密存儲(chǔ)密鑰本身也還是得有個(gè)安身之處這個(gè)“本身”往往就是突破口。所以行業(yè)里才慢慢形成共識(shí)安全能力必須“硬件化”密鑰必須存放在一個(gè)CPU本身也讀不走的硬件邊界里。這個(gè)思路聽起來直接但MCU成本本來就敏感把一套完整的安全硬件塞進(jìn)去芯片面積和價(jià)格都會(huì)上來。這也是為什么很長一段時(shí)間帶硬件安全模塊的MCU只在車規(guī)、金融支付這類高單價(jià)領(lǐng)域出現(xiàn)普通工業(yè)控制和消費(fèi)電子根本用不起。1.2 外掛安全芯片、純軟件算法、內(nèi)置HSM三條路線的取舍在做產(chǎn)品安全方案時(shí)基本有下面三條技術(shù)路線。第一條路線是外掛獨(dú)立安全芯片比如Microchip自己的ATECC608系列。方案很成熟密鑰存儲(chǔ)在獨(dú)立芯片內(nèi)內(nèi)部邏輯與外部MCU完全隔離攻擊者即使破解了主控也拿不到密鑰。但代價(jià)也很直觀多一顆芯片就多一份BOM成本多一塊PCB面積還要額外占用I2C或SPI接口。對(duì)本來單片機(jī)就夠用的產(chǎn)品來說這相當(dāng)于為了安全直接升級(jí)了硬件成本很多消費(fèi)類產(chǎn)品項(xiàng)目組聽到報(bào)價(jià)就搖頭。第二條路線是純軟件算法方案也就是在MCU里跑AES、SHA、RSA這類加密庫密鑰存在Flash里或者用UID唯一ID之類派生出密鑰。這個(gè)方案成本幾乎為零開發(fā)也快但安全性很弱。我在幫客戶做安全評(píng)估時(shí)見得最多的情況就是密鑰硬編碼在代碼里只要dump出固件就能逆向出來。而且軟件加解密會(huì)持續(xù)占用CPU時(shí)間在電機(jī)控制這類對(duì)實(shí)時(shí)性要求很高的場(chǎng)景里你還得掂量算力夠不夠用。第三條路線就是這次講的“MCU內(nèi)置HSM”。主MCU和HSM在同一顆硅片里但物理上分成兩個(gè)獨(dú)立的安全域。HSM內(nèi)有自己的CPU、加解密引擎和存儲(chǔ)密鑰從出廠就不離開安全域。主核可以調(diào)用HSM接口來做簽名、驗(yàn)簽、加解密但沒法讀取HSM內(nèi)部的密鑰明文。這樣既省掉了外掛芯片的BOM成本和面積又拿到了接近獨(dú)立安全芯片的防護(hù)強(qiáng)度對(duì)工業(yè)和消費(fèi)類應(yīng)用來說是目前綜合性價(jià)比最平衡的方案。三條路線放到一起對(duì)比邏輯會(huì)清楚很多方案成本增加安全強(qiáng)度開發(fā)復(fù)雜度適用場(chǎng)景外掛安全芯片高高中對(duì)成本不敏感、認(rèn)證要求高的行業(yè)市場(chǎng)純軟件加密低低低低風(fēng)險(xiǎn)產(chǎn)品、原型驗(yàn)證階段MCU內(nèi)置HSM中高中工業(yè)控制、消費(fèi)電子、IoT設(shè)備的量產(chǎn)產(chǎn)品1.3 32位MCU的新門檻算力夠了安全也得跟上還有一個(gè)背景值得講為什么這個(gè)時(shí)候出現(xiàn)“內(nèi)置HSM的32位MCU”這跟MCU本身的性能升級(jí)是同步的。過去32位MCU主要解決“算力不夠”的問題主頻從幾十MHz提到上百M(fèi)HzFlash和RAM也越來越大。但算力提升之后產(chǎn)品開始聯(lián)網(wǎng)、開始跑協(xié)議棧、開始OTA升級(jí)安全短板就暴露出來了。你想想一個(gè)設(shè)備如果性能強(qiáng)到能跑MQTT、TLS、甚至本地AI推理那它處理的數(shù)據(jù)價(jià)值一定不低。與這些業(yè)務(wù)數(shù)據(jù)配套的必然有設(shè)備證書、會(huì)話密鑰、固件簽名密鑰等高價(jià)值資產(chǎn)。這些資產(chǎn)如果還靠軟件保護(hù)等于一個(gè)裝滿貨物的倉庫只掛了把普通掛鎖。所以32位MCU往中高端走的時(shí)候把硬件安全模塊集成就成了一個(gè)很自然的演進(jìn)方向?,F(xiàn)在這顆帶HSM的MCU等于把“32位算力”和“硬件安全”兩個(gè)本來分開配置的東西打包在了一起。對(duì)開發(fā)者來說你不用再糾結(jié)要不要為了安全犧牲算力也不用為了安全去買兩顆芯片。選型的時(shí)候把它當(dāng)成一個(gè)“帶鎖的32位MCU”來理解很多產(chǎn)品設(shè)計(jì)就會(huì)順很多。2. 拆解核心MCU內(nèi)置HSM到底是怎么工作的既然HSM是這次的主角那就有必要把它掰開來看。很多時(shí)候文檔里寫著“內(nèi)置硬件安全模塊”工程師就稀里糊涂地當(dāng)普通加密外設(shè)用了其實(shí)它內(nèi)部的架構(gòu)、隔離邊界、信任根機(jī)制才是決定安全性的關(guān)鍵。2.1 HSM的內(nèi)部構(gòu)成一個(gè)自成體系的小世界HSM不是簡單的一個(gè)“加密寄存器組”它本質(zhì)上是MCU內(nèi)部一個(gè)獨(dú)立的安全子系統(tǒng)。以Microchip這類帶HSM的MCU為例HSM內(nèi)部通常包含幾個(gè)關(guān)鍵部分一個(gè)獨(dú)立的小型處理器內(nèi)核用來處理安全協(xié)議邏輯一個(gè)專門的加解密引擎支持AES、ECC、RSA、SHA之類的算法一個(gè)真隨機(jī)數(shù)發(fā)生器TRNG用于生成密鑰和隨機(jī)數(shù)以及一塊完全獨(dú)立的安全存儲(chǔ)區(qū)域密鑰就放在這里。這幾點(diǎn)放到實(shí)際開發(fā)里體驗(yàn)是完全不一樣的。以前用軟件加密你要自己注意RSA大數(shù)運(yùn)算的時(shí)序、內(nèi)存清零、密鑰生命周期管理還要擔(dān)心CPU在計(jì)算過程中被中斷打斷導(dǎo)致泄露風(fēng)險(xiǎn)。現(xiàn)在很多運(yùn)算直接交給HSM引擎主核只要把數(shù)據(jù)和操作指令發(fā)過去HSM算完把結(jié)果送回來全程不直接接觸密鑰。這不僅僅是“變快了”更重要的是安全邊界清晰了攻擊面小了很多。還有一個(gè)容易被忽略的點(diǎn)就是TRNG。很多MCU雖然有隨機(jī)數(shù)外設(shè)但隨機(jī)源質(zhì)量一般用于加密時(shí)往往心里沒底。HSM里面的真隨機(jī)數(shù)發(fā)生器經(jīng)過專門的評(píng)估用于生成證書或者密鑰對(duì)時(shí)安全性更有保障。對(duì)做安全終端、支付終端的人來說這是硬指標(biāo)。2.2 硬件隔離主核被攻破密鑰也不會(huì)被拖走HSM和主核之間的關(guān)系是理解整個(gè)方案安全性的核心。主核Application Core跑你的應(yīng)用邏輯HSM跑安全邏輯兩者之間通過硬件機(jī)制隔離開而不是靠軟件約定。隔離的維度包括物理上獨(dú)立的內(nèi)存空間、獨(dú)立的時(shí)鐘與電源域、以及獨(dú)立的調(diào)試控制邏輯。主核的調(diào)試接口就算被人用JTAG打開也摸不到HSM區(qū)域。這種隔離意味著一個(gè)關(guān)鍵的安全屬性即使主核上的應(yīng)用被攻擊者拿到了完全控制權(quán)攻擊者依然無法直接讀取HSM里的私鑰。他只能通過HSM提供的接口提交數(shù)據(jù)、請(qǐng)求簽名或解密拿不到密鑰本身。這就像一把鎖你可以隔著玻璃柜看到里面的鑰匙但手伸不進(jìn)去。實(shí)際項(xiàng)目中這個(gè)“無法直接讀取密鑰”的屬性非常值錢。比如工業(yè)設(shè)備被逆向工程了攻擊者能拷貝固件但無法復(fù)制設(shè)備私鑰。那么云端可以通過簽名校驗(yàn)識(shí)別出克隆設(shè)備仿冒品在業(yè)務(wù)層就會(huì)被攔截。這在防仿冒、防竄貨、設(shè)備認(rèn)證場(chǎng)景里是真正的護(hù)城河。2.3 安全啟動(dòng)的完整鏈路信任根是怎么建立的有了HSM之后MCU的啟動(dòng)流程也會(huì)發(fā)生變化。傳統(tǒng)MCU上電后直接從Bootloader跳到App中間沒有任何校驗(yàn)。帶HSM的MCU則會(huì)多一步上電后先由片內(nèi)固化代碼Boot ROM驗(yàn)證Bootloader的簽名Bootloader再驗(yàn)證應(yīng)用固件的簽名任意一級(jí)校驗(yàn)失敗就拒絕啟動(dòng)。這就是“信任根”機(jī)制每一級(jí)都只信任上一級(jí)的簽名結(jié)果鏈路里的第一個(gè)信任點(diǎn)就是HSM內(nèi)部的安全存儲(chǔ)。這個(gè)機(jī)制落地到開發(fā)上有一個(gè)很實(shí)用的效果固件被篡改后設(shè)備根本起不來。即使攻擊者拿到了固件二進(jìn)制想自行修改后刷回去簽名校驗(yàn)這關(guān)就過不了。對(duì)工業(yè)設(shè)備來說被人非法篡改固件是可能導(dǎo)致安全事故的有了安全啟動(dòng)這個(gè)風(fēng)險(xiǎn)就控住了。安全啟動(dòng)的配置通常分幾步先生成根密鑰對(duì)把公鑰燒入OTP或HSM安全存儲(chǔ)區(qū)然后用私鑰對(duì)Bootloader簽名Bootloader再持有App的公鑰。這里要特別注意私鑰的存放和管理是整個(gè)安全體系的命脈如果私鑰泄露所有設(shè)備的安全啟動(dòng)都會(huì)失效。3. 工業(yè)與消費(fèi)應(yīng)用完全不一樣的安全需求標(biāo)題里同時(shí)提到了“工業(yè)Industrial”和“消費(fèi)Consumer”兩大類應(yīng)用這其實(shí)不是營銷話術(shù)而是這兩類場(chǎng)景對(duì)HSM的訴求差異非常大。理解這些差異有助于你在產(chǎn)品定義階段就選對(duì)配置和開發(fā)方式。3.1 工業(yè)場(chǎng)景更看重“可溯、可控、不可仿”工業(yè)設(shè)備的安全需求首先落在設(shè)備身份可信上。你想想一個(gè)智能工廠里幾十臺(tái)上位機(jī)、上千個(gè)傳感器和執(zhí)行器如果某個(gè)節(jié)點(diǎn)被替換成仿冒設(shè)備輕則數(shù)據(jù)錯(cuò)誤重則整個(gè)產(chǎn)線停機(jī)甚至引發(fā)安全事故。帶HSM的MCU可以給每一臺(tái)設(shè)備燒錄唯一的設(shè)備證書由HSM持有對(duì)應(yīng)私鑰云端或本地網(wǎng)關(guān)在通信握手時(shí)直接做證書校驗(yàn)仿冒設(shè)備的證書對(duì)不上第一輪就會(huì)被拒之門外。除了設(shè)備認(rèn)證工業(yè)場(chǎng)景非常關(guān)注遠(yuǎn)程運(yùn)維和OTA升級(jí)安全。工業(yè)設(shè)備一旦布到現(xiàn)場(chǎng)生命周期通常長達(dá)十年以上固件往往需要遠(yuǎn)程更新。如果沒有安全啟動(dòng)和簽名校驗(yàn)一條惡意固件下發(fā)到現(xiàn)場(chǎng)設(shè)備上后果不堪設(shè)想。HSM的存在讓固件更新必須攜帶合法簽名且簽名驗(yàn)證在硬件安全域內(nèi)完成徹底杜絕了中間人篡改的可能。還有一類需求很多人沒意識(shí)到就是工藝參數(shù)和核心算法的保護(hù)。很多工業(yè)設(shè)備的核心競爭力就在控制算法和工藝配方里這些參數(shù)一旦被逆向提取產(chǎn)品壁壘就沒了。把關(guān)鍵參數(shù)加密存儲(chǔ)、運(yùn)行時(shí)由HSM解密后使用能在很大程度上提高仿冒門檻。對(duì)于賣設(shè)備、賣軟件許可、按年收服務(wù)費(fèi)的廠商來說這個(gè)能力直接關(guān)系到收入模式。3.2 消費(fèi)場(chǎng)景更關(guān)注“防抄、防篡、防私吞”消費(fèi)類產(chǎn)品和工業(yè)品不一樣它量級(jí)大、單價(jià)低、生命周期短安全需求也更加“現(xiàn)實(shí)”。第一訴求是防抄板和防克隆。一個(gè)智能硬件賣火了市場(chǎng)上馬上會(huì)有外觀一模一樣的仿冒品。如果主控用帶HSM的MCU每臺(tái)設(shè)備都有唯一密鑰仿冒者就算完全抄襲了PCB和固件也無法復(fù)制合法的設(shè)備身份云端一查證書就能封掉一批仿冒設(shè)備。第二訴求是數(shù)據(jù)隱私和通信安全。消費(fèi)類IoT設(shè)備現(xiàn)在普遍要跟手機(jī)App、云平臺(tái)通信設(shè)備與云之間的會(huì)話加密、身份認(rèn)證如果做得太弱用戶的賬戶憑證和個(gè)人隱私就可能被截獲。HSM能把TLS通信中需要的設(shè)備證書和私鑰安全存儲(chǔ)在硬件里通信加密的強(qiáng)度明顯提升用戶數(shù)據(jù)的安全保障也更到位。第三點(diǎn)是業(yè)務(wù)層面的防濫用。比如某種服務(wù)是按設(shè)備授權(quán)收費(fèi)的或者設(shè)備有配套耗材的消耗邏輯HSM可以確保授權(quán)狀態(tài)無法輕易篡改。你可能聽過“刷機(jī)改區(qū)”“繞過激活”之類的灰色操作這些本質(zhì)上就是攻擊者通過篡改存儲(chǔ)狀態(tài)來繞過業(yè)務(wù)邏輯。有了防篡改的安全存儲(chǔ)和狀態(tài)校驗(yàn)這類操作的難度會(huì)高出一個(gè)數(shù)量級(jí)。3.3 同一個(gè)安全能力兩種完全不同的落地姿勢(shì)同樣是HSM工業(yè)開發(fā)和消費(fèi)開發(fā)的落地方式不太一樣。工業(yè)設(shè)備通常數(shù)量少、單價(jià)高、現(xiàn)場(chǎng)環(huán)境復(fù)雜開發(fā)時(shí)更重視安全啟動(dòng)完整鏈路、生產(chǎn)時(shí)密鑰注入的可追溯性、后期遠(yuǎn)程證書輪換等能力。消費(fèi)設(shè)備則相反產(chǎn)量大、產(chǎn)線節(jié)拍快開發(fā)時(shí)更看重密鑰注入能不能自動(dòng)化、能不能跟現(xiàn)有產(chǎn)測(cè)流程整合以及器件的單價(jià)和供貨周期。我見過一個(gè)消費(fèi)電子客戶產(chǎn)品方案定了帶HSM的MCU結(jié)果量產(chǎn)時(shí)發(fā)現(xiàn)密鑰注入工具沒有跟產(chǎn)測(cè)系統(tǒng)打通需要人工燒錄產(chǎn)能直接卡住。后來專門開發(fā)了一版自動(dòng)化的密鑰注入腳本問題才解決。所以做消費(fèi)產(chǎn)品時(shí)你在方案論證階段就要問清楚HSM的初始化、密鑰注入、證書簽發(fā)這套流程能不能半自動(dòng)或全自動(dòng)跑否則后面交產(chǎn)量會(huì)特別痛苦。工業(yè)項(xiàng)目則不太一樣我見過一個(gè)做電網(wǎng)終端的朋友他們對(duì)密鑰注入的要求是全程留痕每一臺(tái)設(shè)備的證書簽發(fā)記錄要能追溯到具體訂單和產(chǎn)線工位還要求產(chǎn)測(cè)過程中私鑰不落盤。這套流程和消費(fèi)類“快速量產(chǎn)”的思路完全不同更像銀行發(fā)卡每一張卡都有一個(gè)獨(dú)立的檔案。4. 開發(fā)者實(shí)操怎樣把一個(gè)帶HSM的MCU跑起來講完原理和場(chǎng)景接下來是大家最關(guān)心的部分作為開發(fā)者怎么把這顆帶HSM的MCU真正用起來。這里我盡量按一個(gè)完整的項(xiàng)目從零到量產(chǎn)的過程來寫你按這個(gè)順序走基本不會(huì)跑偏。4.1 從選型到開發(fā)環(huán)境的準(zhǔn)備先選型號(hào)。Microchip旗下帶HSM的32位MCU目前比較有代表性的產(chǎn)品線是PIC32CK系列它集成了硬件安全模塊同時(shí)保留了PIC32的生態(tài)系統(tǒng)。選擇哪一顆主要看主頻、Flash/RAM、接口數(shù)量和封裝。以做一些中等規(guī)模工業(yè)控制或IoT網(wǎng)關(guān)為例主頻一般在200MHz以內(nèi)就夠用Flash建議512KB起步因?yàn)榘踩珕?dòng)和TLS協(xié)議棧都會(huì)吃掉不少存儲(chǔ)。開發(fā)環(huán)境方面Microchip的IDE是MPLAB X配合MCCMPLAB Code Configurator可以圖形化配置外設(shè)和Bootloader。這里建議大家直接裝最新版因?yàn)閹SM的MCU相關(guān)的配置插件、例程包和庫通常只在較新的版本里。裝完后通過“Device Packs”或“Libraries”把HSM相關(guān)的驅(qū)動(dòng)庫拉下來一般包含安全啟動(dòng)庫、密碼學(xué)API、HSM測(cè)試?yán)倘糠?。?shí)際開發(fā)時(shí)我的習(xí)慣是先跑官方例程不要上來就寫業(yè)務(wù)邏輯。帶安全模塊的MCU跟普通MCU不一樣它的啟動(dòng)流程、鏈接腳本、分區(qū)表都需要適配。官方例程里的鏈接腳本已經(jīng)把安全域和應(yīng)用域分好了你在這個(gè)基礎(chǔ)上改比自己從頭配置要省很多時(shí)間。4.2 配置安全啟動(dòng)與密鑰注入拿到開發(fā)板后第一步通常是配置安全啟動(dòng)。這個(gè)過程大致是用工具生成一對(duì)根密鑰公鑰燒入MCU的OTP一次性可編程區(qū)域私鑰保存在安全的電腦環(huán)境里然后編譯Bootloader使用根私鑰對(duì)Bootloader簽名再編譯應(yīng)用固件用Bootloader持有的App公鑰做驗(yàn)簽。這樣上電后Boot ROM會(huì)先驗(yàn)BootloaderBootloader再驗(yàn)App鏈路就通了。密鑰注入工具方面Microchip有Trust Platform Design Suite和配套的產(chǎn)線工具可以連接開發(fā)板完成密鑰生成、證書簽發(fā)和燒錄。開發(fā)階段你可以用這套工具先把密鑰燒進(jìn)開發(fā)板驗(yàn)證簽名和驗(yàn)簽鏈路是否通暢。量產(chǎn)階段密鑰注入的生產(chǎn)工具需要單獨(dú)配合要么在PC上做簽名要么在產(chǎn)測(cè)工位上接一個(gè)安全盒子私鑰絕不落地到產(chǎn)測(cè)電腦上。這里有一個(gè)關(guān)鍵的操作要點(diǎn)根密鑰的備份和保管。一旦根私鑰丟了工廠里所有已燒錄設(shè)備的后續(xù)固件更新都無法簽名設(shè)備會(huì)變成“孤兒”。我見過有團(tuán)隊(duì)把根私鑰放在研發(fā)同事的電腦里人離職后整個(gè)產(chǎn)品線差點(diǎn)癱瘓。正確的做法是把根私鑰離線存儲(chǔ)在加密的硬件令牌或者專門的安全電腦里并做好多重備份和權(quán)限控制。4.3 在應(yīng)用代碼中調(diào)用HSM的加密接口安全啟動(dòng)配置完成后應(yīng)用代碼里就可以開始調(diào)用HSM了。Microchip為這類MCU提供了密碼學(xué)庫接口風(fēng)格類似mbedTLS但又針對(duì)HSM做了硬件加速。下面是調(diào)用HSM做簽名和驗(yàn)簽的偽代碼示例實(shí)際工程中以官方SDK頭文件為準(zhǔn)#include mchp_hsm_api.h /* 初始化HSM模塊 */ mchp_hsm_init(); /* 在HSM安全域內(nèi)生成一個(gè)設(shè)備密鑰對(duì) */ hsm_key_handle_t key; mchp_hsm_generate_keypair(key, HSM_ALG_ECC_P256); /* 使用HSM對(duì)數(shù)據(jù)做簽名 */ uint8_t digest[32]; /* 待簽名的哈希值 */ uint8_t signature[64]; mchp_hsm_sign(key, digest, sizeof(digest), signature, sizeof(signature)); /* 使用公鑰驗(yàn)簽 */ uint8_t public_key[64]; mchp_hsm_export_public_key(key, public_key, sizeof(public_key)); mchp_hsm_verify(public_key, digest, sizeof(digest), signature, sizeof(signature));這段代碼看起來簡單但有幾個(gè)細(xì)節(jié)值得說明。第一個(gè)是“導(dǎo)出公鑰”這一步公鑰是可以導(dǎo)出的私鑰永遠(yuǎn)不能導(dǎo)出。如果你在代碼里嘗試調(diào)用類似“導(dǎo)出私鑰”的接口大概率會(huì)直接返回錯(cuò)誤碼這是硬件層面的安全策略不是軟件限制。第二個(gè)細(xì)節(jié)是實(shí)際項(xiàng)目里你不會(huì)每次都生成新的密鑰對(duì)而是把密鑰對(duì)在初始化階段生成一次然后把私鑰句柄保存下來。更常見的做法是用HSM的secure storage能力在量產(chǎn)時(shí)就把設(shè)備密鑰注入進(jìn)去應(yīng)用代碼通過密鑰ID引用而不是反復(fù)生成。第三個(gè)細(xì)節(jié)是性能。HSM做一次ECC P-256簽名大約在幾毫秒到十幾毫秒這個(gè)速度完全夠物聯(lián)網(wǎng)設(shè)備使用。如果做大量數(shù)據(jù)的對(duì)稱加密建議直接用HSM支持的AES硬件引擎效率比軟件高不少。4.4 量產(chǎn)階段的密鑰與證書管理流程開發(fā)完成后進(jìn)入量產(chǎn)階段。這個(gè)環(huán)節(jié)是整個(gè)HSM方案最容易“翻車”的地方我多說幾句。量產(chǎn)時(shí)的密鑰注入本質(zhì)上是一個(gè)“為每一臺(tái)設(shè)備生成唯一身份”的過程。通常的做法是產(chǎn)測(cè)工位連上設(shè)備后調(diào)用HSM的初始化流程在HSM內(nèi)部生成設(shè)備密鑰對(duì)然后把公鑰上報(bào)給證書簽發(fā)服務(wù)器服務(wù)器用根私鑰給設(shè)備簽發(fā)證書再把證書寫回設(shè)備存儲(chǔ)。整個(gè)過程里設(shè)備私鑰只在HSM內(nèi)部產(chǎn)生任何產(chǎn)測(cè)電腦都沒有接觸過私鑰明文這才符合安全規(guī)范。實(shí)際流水線上這一步要跟產(chǎn)測(cè)系統(tǒng)配合好。帶HSM的MCU通常支持在測(cè)試模式下跳過安全啟動(dòng)方便產(chǎn)測(cè)軟件灌入密鑰但在產(chǎn)品出廠前必須把調(diào)試接口鎖死并切換到正常的強(qiáng)制校驗(yàn)啟動(dòng)模式。很多團(tuán)隊(duì)會(huì)在這里漏掉“調(diào)試鎖定”這一步導(dǎo)致出廠設(shè)備還能被調(diào)試器連接后面出問題就晚了。還有一類比較隱蔽的問題產(chǎn)線如果有多條測(cè)試線每臺(tái)PC上用的證書簽發(fā)工具版本不一致或者時(shí)間不同步可能導(dǎo)致設(shè)備拿到的證書有效期有偏差。建議產(chǎn)線腳本里統(tǒng)一封裝證書簽發(fā)接口所有工位用同一個(gè)版本的工具和后端服務(wù)避免“這個(gè)工位出的設(shè)備能上云那個(gè)工位出的不能上云”這種詭異問題。5. 常見問題與排查技巧實(shí)錄最后這部分寫給已經(jīng)拿到開發(fā)板開始踩坑的人。我根據(jù)自己的經(jīng)驗(yàn)和行業(yè)內(nèi)的交流把帶HSM的MCU開發(fā)中最常遇到的問題整理成一張速查表再挑幾個(gè)典型問題展開講。5.1 問題速查表現(xiàn)象可能原因解決方案上電后設(shè)備不啟動(dòng)安全啟動(dòng)校驗(yàn)失敗Boot ROM進(jìn)入錯(cuò)誤處理流程檢查根公鑰是否燒入OTP檢查Bootloader簽名是否對(duì)應(yīng)調(diào)試器連不上目標(biāo)板安全調(diào)試鎖定已生效確認(rèn)是否在生產(chǎn)流程提前鎖定了調(diào)試口開發(fā)板可檢查鎖定狀態(tài)位HS M接口調(diào)用返回錯(cuò)誤密鑰使用權(quán)限配置不對(duì)或安全域未初始化檢查密鑰訪問策略確認(rèn)調(diào)用前已執(zhí)行初始化流程固件升級(jí)后設(shè)備變磚升級(jí)包簽名無效或簽名版本校驗(yàn)不匹配確認(rèn)OTA包簽名流程核對(duì)版本號(hào)和簽名證書鏈多臺(tái)設(shè)備證書相同量產(chǎn)密鑰注入流程錯(cuò)誤檢查證書簽發(fā)邏輯確保每臺(tái)設(shè)備生成獨(dú)立密鑰對(duì)隨機(jī)數(shù)不隨機(jī)TRNG初始化失敗或使用前未等待足夠熵檢查TRNG啟動(dòng)狀態(tài)初始化完成后調(diào)用質(zhì)量測(cè)試接口5.2 安全調(diào)試鎖定后怎么辦這個(gè)是我見過最多人問的。帶HSM的MCU在量產(chǎn)前會(huì)把調(diào)試接口鎖定防止攻擊者通過JTAG/SWD讀取Flash。但開發(fā)階段如果早早把調(diào)試鎖打開或鎖錯(cuò)了就會(huì)出現(xiàn)“板子徹底連不上”的情況讓人很崩潰。解決思路是這樣首先分清楚“鎖定”和“永久損壞”的區(qū)別。很多MCU的調(diào)試鎖定是可逆的只要你有足夠權(quán)限比如通過擦除整個(gè)Flash或利用HSM的解鎖機(jī)制就能重新打開調(diào)試口。但擦除Flash會(huì)把固件和證書清掉所以在嘗試解鎖前先確認(rèn)自己是否需要保留現(xiàn)場(chǎng)數(shù)據(jù)。另外我建議大家開發(fā)階段就把“調(diào)試鎖定”做成一個(gè)獨(dú)立配置項(xiàng)放到量產(chǎn)腳本里最后一步執(zhí)行而不是手動(dòng)去點(diǎn)。這樣開發(fā)板上始終保持調(diào)試可連接只有真正出貨前才自動(dòng)鎖定。我踩過最大的坑就是調(diào)試板上也量產(chǎn)燒錄了一套完整腳本結(jié)果腳本里帶著鎖定步驟開發(fā)板直接變磚最后只能重新?lián)Q芯片。5.3 性能開銷、密鑰備份、返廠維修等幾個(gè)容易被忽視的坑除了明顯的啟動(dòng)或調(diào)試問題還有幾個(gè)“軟問題”容易被忽視但它們?cè)趯?shí)際項(xiàng)目里往往影響很大。第一個(gè)是HSM調(diào)用對(duì)實(shí)時(shí)性的影響。HSM雖然用硬件加速但每次加解密、簽名驗(yàn)簽仍需要一定時(shí)間而且有些HSM在同一時(shí)刻只能處理一個(gè)操作。如果你的主核在實(shí)時(shí)性要求很高的中斷里調(diào)用HSM接口可能會(huì)導(dǎo)致任務(wù)超時(shí)。我的建議是把HSM的長耗時(shí)操作放到后臺(tái)任務(wù)里封裝成異步調(diào)用不要在定時(shí)器中斷里直接做簽名。特別是在電機(jī)控制這類場(chǎng)景主核要同時(shí)處理FOC算法和安全協(xié)同合理劃分任務(wù)優(yōu)先級(jí)很關(guān)鍵。第二個(gè)是密鑰備份策略。前面提到根私鑰要離線備份但設(shè)備本身的密鑰往往是不備份的。這帶來一個(gè)連鎖問題設(shè)備返修時(shí)如果沒能從生產(chǎn)系統(tǒng)里恢復(fù)出該設(shè)備的密鑰文件這臺(tái)設(shè)備要重新配網(wǎng)、重新激活。所以量產(chǎn)時(shí)一定要把設(shè)備公鑰和證書標(biāo)識(shí)存檔到數(shù)據(jù)庫返修流程里可以重新簽發(fā)設(shè)備證書而不是把整塊板子報(bào)廢。第三個(gè)是OTP資源的規(guī)劃。安全啟動(dòng)的根公鑰、證書鏈、一些校準(zhǔn)參數(shù)都要占用一次性可編程存儲(chǔ)。開發(fā)時(shí)如果頻繁燒寫OTP會(huì)逐漸耗盡。我之前有個(gè)項(xiàng)目在調(diào)試階段反復(fù)用同一個(gè)工具燒寫根密鑰后來發(fā)現(xiàn)OTP快滿了最后只能換芯片重來。建議開發(fā)初期就定好安全配置的最終版本避免重復(fù)寫入。還有一個(gè)很多人忽略的點(diǎn)帶HSM的MCU選型時(shí)不要只看支持多少種加密算法算法列表是“錦上添花”真正決定開發(fā)順不順的是密鑰注入工具鏈、證書簽發(fā)流程和產(chǎn)線支持成熟度。這個(gè)我前面也提過但確實(shí)是血的教訓(xùn)。工程師通常關(guān)注性能和算法但采購和生產(chǎn)經(jīng)理會(huì)關(guān)注產(chǎn)測(cè)效率這兩邊在器件選型時(shí)就得對(duì)齊。最后再分享一個(gè)小技巧如果你的產(chǎn)品上云別把HSM只是當(dāng)成“加密芯片”用可以把它和云端的設(shè)備認(rèn)證體系打通。設(shè)備在HSM里生成密鑰對(duì)公鑰上報(bào)到云端做注冊(cè)之后所有通信都基于這個(gè)硬件根身份。這樣做的好處是即使設(shè)備應(yīng)用層被攻擊云端依然能通過HSM的簽名能力驗(yàn)證設(shè)備身份快速阻斷異常設(shè)備。我在幾個(gè)IoT項(xiàng)目里用這套思路實(shí)測(cè)下來設(shè)備仿冒難度提高了好幾個(gè)量級(jí)運(yùn)維那邊的安全告警也少了很多。關(guān)于這顆帶HSM的32位MCU能做什么、怎么做這篇文章基本講透了。從我個(gè)人的經(jīng)驗(yàn)來看安全的落地從來不只靠一顆芯片而是靠“硬件信任根 完整流程 產(chǎn)線執(zhí)行力”三者的配合。芯片上的HSM補(bǔ)上了最核心的硬件信任根這一環(huán)但生產(chǎn)環(huán)節(jié)的密鑰管理、開發(fā)環(huán)節(jié)的調(diào)試鎖定、應(yīng)用環(huán)節(jié)的合理封裝每一環(huán)都不能松。把這套邏輯想清楚你的產(chǎn)品在安全這件事上就已經(jīng)比大多數(shù)同行走得靠前了。