網(wǎng)絡(luò)IBC密鑰管理:SM9算法落地與工程實(shí)踐踩坑實(shí)錄)
工業(yè)現(xiàn)場(chǎng)的設(shè)備身份認(rèn)證和密鑰分發(fā)長(zhǎng)期以來(lái)是個(gè)讓人頭疼的問(wèn)題。傳統(tǒng)PKI體系在產(chǎn)線邊緣側(cè)部署時(shí)證書(shū)鏈的維護(hù)成本高得離譜——幾千臺(tái)PLC、RTU、傳感器每臺(tái)都要簽發(fā)、吊銷(xiāo)、輪換證書(shū)CA服務(wù)器的可用性還成了單點(diǎn)瓶頸。我參與過(guò)幾個(gè)工控安全改造項(xiàng)目每次跟現(xiàn)場(chǎng)運(yùn)維聊到證書(shū)過(guò)期導(dǎo)致設(shè)備離線對(duì)方都是一臉無(wú)奈。這幾年基于標(biāo)識(shí)的密碼體制Identity-Based CryptographyIBC在工業(yè)網(wǎng)絡(luò)里被討論得越來(lái)越多尤其是國(guó)密SM9算法標(biāo)準(zhǔn)落地之后用設(shè)備標(biāo)識(shí)直接當(dāng)公鑰的思路確實(shí)切中了很多現(xiàn)場(chǎng)痛點(diǎn)。這篇內(nèi)容我想把IBC密鑰管理在工業(yè)網(wǎng)絡(luò)中的研究脈絡(luò)和工程實(shí)現(xiàn)講透包括SM9的密鑰生成邏輯、分層密鑰管理架構(gòu)怎么設(shè)計(jì)、工業(yè)場(chǎng)景下密鑰更新和撤銷(xiāo)怎么處理以及我在實(shí)際部署中踩過(guò)的那些坑。適合做工控安全、密碼工程、設(shè)備身份認(rèn)證方向的同行參考也適合剛接觸IBC想搞清楚它和PKI本質(zhì)區(qū)別的讀者。1. 工業(yè)網(wǎng)絡(luò)為什么需要IBC這套密鑰體制1.1 傳統(tǒng)PKI在產(chǎn)線邊緣側(cè)的水土不服工業(yè)網(wǎng)絡(luò)和IT網(wǎng)絡(luò)有個(gè)根本差異設(shè)備數(shù)量大、算力弱、生命周期長(zhǎng)、網(wǎng)絡(luò)拓?fù)湎鄬?duì)固定。一條汽車(chē)焊裝產(chǎn)線可能有上百臺(tái)機(jī)器人控制器每臺(tái)都要和MES、SCADA、其他設(shè)備做雙向認(rèn)證。如果用PKI每臺(tái)設(shè)備出廠時(shí)要預(yù)置證書(shū)上線時(shí)要驗(yàn)證證書(shū)鏈證書(shū)到期前要聯(lián)網(wǎng)更新。問(wèn)題在于很多工業(yè)設(shè)備的設(shè)計(jì)壽命是10到15年而證書(shū)有效期通常1到3年這意味著整個(gè)生命周期內(nèi)要經(jīng)歷多次證書(shū)輪換。更麻煩的是部分老舊設(shè)備根本不支持證書(shū)鏈驗(yàn)證所需的運(yùn)算能力RSA 2048的驗(yàn)簽在低端MCU上要跑幾百毫秒直接影響控制周期。還有一個(gè)容易被忽視的點(diǎn)PKI的信任錨是CA的根證書(shū)一旦根證書(shū)需要更換整個(gè)信任體系要重建。工業(yè)現(xiàn)場(chǎng)最怕的就是這種全局性變更因?yàn)橥C(jī)窗口極其寶貴。我見(jiàn)過(guò)一個(gè)項(xiàng)目因?yàn)镃A根證書(shū)過(guò)期沒(méi)及時(shí)處理導(dǎo)致整條產(chǎn)線的設(shè)備認(rèn)證全部失敗最后只能臨時(shí)降級(jí)到白名單模式才恢復(fù)生產(chǎn)。這種教訓(xùn)讓很多工控安全負(fù)責(zé)人開(kāi)始尋找更輕量的替代方案。1.2 IBC用標(biāo)識(shí)直接當(dāng)公鑰的核心思路IBC最吸引人的地方在于公鑰不再是隨機(jī)字符串而是設(shè)備的身份標(biāo)識(shí)本身。比如一臺(tái)設(shè)備的標(biāo)識(shí)是PLC-LINE3-001那它的公鑰就可以直接由這個(gè)標(biāo)識(shí)計(jì)算出來(lái)不需要額外的證書(shū)來(lái)綁定。這帶來(lái)的直接好處是任何一方想給這臺(tái)設(shè)備發(fā)加密消息或驗(yàn)證它的簽名只需要知道它的標(biāo)識(shí)和一個(gè)公開(kāi)的系統(tǒng)參數(shù)不需要提前獲取證書(shū)。這個(gè)思路的密碼學(xué)基礎(chǔ)是雙線性對(duì)。簡(jiǎn)單類比一下傳統(tǒng)公鑰加密像是一個(gè)帶鎖的箱子公鑰是鎖私鑰是鑰匙鎖和鑰匙是配對(duì)的但鎖可以公開(kāi)IBC則像是所有人都知道一個(gè)公共的配方私鑰生成中心PKG用主密鑰和你的身份標(biāo)識(shí)一起算出你的專屬鑰匙別人用公共配方和你的身份標(biāo)識(shí)就能加密消息給你。這個(gè)配方就是系統(tǒng)公開(kāi)參數(shù)主密鑰只有PKG持有。在工業(yè)場(chǎng)景里這意味著設(shè)備上線時(shí)只需要向PKG申請(qǐng)一次私鑰之后就可以自主完成認(rèn)證和加密不需要維護(hù)證書(shū)鏈也不需要頻繁聯(lián)網(wǎng)。對(duì)于網(wǎng)絡(luò)隔離嚴(yán)格、運(yùn)維窗口有限的工業(yè)環(huán)境這個(gè)特性價(jià)值很大。1.3 SM9標(biāo)準(zhǔn)給IBC落地提供的工程基礎(chǔ)IBC理論提出很早但真正在工業(yè)領(lǐng)域落地需要標(biāo)準(zhǔn)化的算法和參數(shù)。SM9是我國(guó)發(fā)布的標(biāo)識(shí)密碼算法標(biāo)準(zhǔn)包含數(shù)字簽名、密鑰交換、密鑰封裝和公鑰加密四個(gè)部分。它基于橢圓曲線上的雙線性對(duì)安全性建立在橢圓曲線離散對(duì)數(shù)問(wèn)題和雙線性Diffie-Hellman問(wèn)題的困難性上。SM9的工程友好性體現(xiàn)在幾個(gè)方面密鑰長(zhǎng)度短簽名長(zhǎng)度固定適合帶寬受限的工業(yè)總線算法流程清晰便于在嵌入式設(shè)備上實(shí)現(xiàn)有明確的參數(shù)推薦降低了部署時(shí)的參數(shù)選擇風(fēng)險(xiǎn)。我在實(shí)際項(xiàng)目中對(duì)比過(guò)SM9和RSA在低端ARM Cortex-M4上的表現(xiàn)SM9簽名驗(yàn)證的耗時(shí)大約是RSA 2048驗(yàn)簽的三分之一到二分之一對(duì)于控制周期在10毫秒級(jí)別的場(chǎng)景這個(gè)差距是決定性的。2. SM9密鑰生成與分發(fā)的底層邏輯拆解2.1 主密鑰對(duì)與系統(tǒng)參數(shù)的生成過(guò)程SM9體系里有兩個(gè)核心角色密鑰生成中心KGC和用戶。KGC負(fù)責(zé)生成主密鑰對(duì)和系統(tǒng)參數(shù)用戶用自己的標(biāo)識(shí)向KGC申請(qǐng)私鑰。主密鑰對(duì)包括一個(gè)主私鑰和一個(gè)主公鑰主私鑰必須嚴(yán)格保密主公鑰可以公開(kāi)。具體生成流程是這樣的首先選擇一條安全的橢圓曲線確定雙線性對(duì)映射。然后隨機(jī)選取主私鑰計(jì)算主公鑰。系統(tǒng)參數(shù)包括曲線參數(shù)、雙線性對(duì)參數(shù)、主公鑰、以及一些輔助函數(shù)。這些參數(shù)需要固化在設(shè)備里或者通過(guò)安全通道分發(fā)。這里有個(gè)實(shí)操細(xì)節(jié)系統(tǒng)參數(shù)的分發(fā)必須保證完整性。我見(jiàn)過(guò)有項(xiàng)目因?yàn)橄到y(tǒng)參數(shù)在分發(fā)過(guò)程中被篡改導(dǎo)致部分設(shè)備生成的私鑰和主公鑰不匹配認(rèn)證一直失敗。建議系統(tǒng)參數(shù)用SM3計(jì)算摘要后通過(guò)帶外方式核對(duì)或者直接燒錄在設(shè)備的可信存儲(chǔ)區(qū)。2.2 用戶私鑰的申請(qǐng)與安全下發(fā)用戶私鑰的生成是IBC安全性的關(guān)鍵環(huán)節(jié)。用戶把自己的標(biāo)識(shí)發(fā)給KGCKGC用主私鑰和標(biāo)識(shí)計(jì)算出對(duì)應(yīng)的私鑰然后通過(guò)安全通道返回給用戶。這個(gè)過(guò)程中私鑰在KGC內(nèi)部是明文存在的所以KGC的物理安全和運(yùn)行安全至關(guān)重要。在工業(yè)網(wǎng)絡(luò)中私鑰下發(fā)通常有幾種方式產(chǎn)線預(yù)置、現(xiàn)場(chǎng)注冊(cè)、遠(yuǎn)程分發(fā)。產(chǎn)線預(yù)置適合大批量設(shè)備但靈活性差現(xiàn)場(chǎng)注冊(cè)適合已經(jīng)部署的設(shè)備但需要現(xiàn)場(chǎng)有安全終端遠(yuǎn)程分發(fā)適合網(wǎng)絡(luò)條件好的場(chǎng)景但需要額外的傳輸保護(hù)。我比較推薦的是混合模式設(shè)備出廠時(shí)預(yù)置一個(gè)初始身份和臨時(shí)密鑰上線時(shí)通過(guò)臨時(shí)密鑰保護(hù)正式私鑰的下發(fā)這樣兼顧了批量效率和安全性。注意私鑰下發(fā)通道必須做雙向認(rèn)證和加密不能只用單向TLS。工業(yè)現(xiàn)場(chǎng)有過(guò)因?yàn)樗借€下發(fā)通道被中間人攻擊導(dǎo)致攻擊者獲取合法設(shè)備私鑰的案例。2.3 標(biāo)識(shí)命名規(guī)范對(duì)密鑰管理的影響標(biāo)識(shí)是IBC的基石標(biāo)識(shí)的設(shè)計(jì)直接影響密鑰管理的復(fù)雜度。工業(yè)設(shè)備的標(biāo)識(shí)通常包含設(shè)備類型、產(chǎn)線編號(hào)、位置信息、序列號(hào)等。標(biāo)識(shí)一旦確定私鑰就綁定了如果要改標(biāo)識(shí)等于要重新申請(qǐng)私鑰。我建議標(biāo)識(shí)設(shè)計(jì)遵循幾個(gè)原則唯一性、可解析性、穩(wěn)定性、可擴(kuò)展性。比如PLC-FAB1-LINE3-001這樣的結(jié)構(gòu)既能保證唯一又能從標(biāo)識(shí)直接看出設(shè)備歸屬便于權(quán)限管理。但要注意標(biāo)識(shí)里不要包含會(huì)變化的信息比如IP地址、臨時(shí)工單號(hào)否則私鑰更新會(huì)非常頻繁。還有一個(gè)坑標(biāo)識(shí)的長(zhǎng)度會(huì)影響雙線性對(duì)的計(jì)算效率。雖然SM9對(duì)標(biāo)識(shí)長(zhǎng)度沒(méi)有硬性限制但過(guò)長(zhǎng)的標(biāo)識(shí)會(huì)增加哈希到曲線點(diǎn)的計(jì)算量。實(shí)測(cè)下來(lái)標(biāo)識(shí)長(zhǎng)度控制在64字節(jié)以內(nèi)比較合適超過(guò)128字節(jié)在低端設(shè)備上會(huì)有明顯性能下降。3. 分層密鑰管理架構(gòu)在工業(yè)網(wǎng)絡(luò)中的設(shè)計(jì)3.1 單層KGC在大型工業(yè)網(wǎng)絡(luò)中的瓶頸如果整個(gè)工業(yè)網(wǎng)絡(luò)只有一個(gè)KGC所有設(shè)備的私鑰都從它申請(qǐng)會(huì)面臨幾個(gè)問(wèn)題。首先是性能瓶頸大型工廠可能有幾萬(wàn)臺(tái)設(shè)備私鑰生成和分發(fā)的并發(fā)壓力很大。其次是安全風(fēng)險(xiǎn)單點(diǎn)被攻破意味著整個(gè)體系的私鑰都可能泄露。第三是管理半徑問(wèn)題跨地域的工廠如果都連到中心KGC網(wǎng)絡(luò)延遲和可用性都是挑戰(zhàn)。我在一個(gè)跨三地的制造企業(yè)項(xiàng)目里就遇到過(guò)這個(gè)問(wèn)題中心KGC部署在總部分廠的設(shè)備申請(qǐng)私鑰時(shí)要走專線到總部網(wǎng)絡(luò)抖動(dòng)時(shí)申請(qǐng)失敗率很高。后來(lái)改成每個(gè)分廠部署一個(gè)KGC但新的問(wèn)題是不同分廠的設(shè)備之間認(rèn)證時(shí)主公鑰不一致需要額外的信任傳遞機(jī)制。3.2 分層IBC的密鑰委托與信任鏈分層IBC的思路是引入根KGC和子KGC的概念。根KGC生成根主密鑰對(duì)子KGC用自己的標(biāo)識(shí)向根KGC申請(qǐng)私鑰這個(gè)私鑰作為子KGC的主私鑰子KGC再用它給下屬設(shè)備生成私鑰。這樣形成一棵密鑰樹(shù)信任從根向下傳遞。這種架構(gòu)的好處很明顯根KGC只需要管理少量子KGC子KGC負(fù)責(zé)各自域內(nèi)的設(shè)備性能和安全管理都分散了。設(shè)備認(rèn)證時(shí)如果雙方在同一個(gè)子KGC域內(nèi)直接用子KGC的主公鑰驗(yàn)證如果跨域需要用到根KGC的主公鑰和對(duì)方的子KGC標(biāo)識(shí)通過(guò)密鑰委托鏈完成驗(yàn)證。具體實(shí)現(xiàn)時(shí)子KGC的標(biāo)識(shí)設(shè)計(jì)很關(guān)鍵。通常用層級(jí)化的標(biāo)識(shí)比如KGC-FAB1、KGC-FAB2根KGC的主公鑰公開(kāi)子KGC的主公鑰可以由根主公鑰和子KGC標(biāo)識(shí)計(jì)算出來(lái)。這樣設(shè)備只需要預(yù)置根主公鑰就能驗(yàn)證任意子KGC域內(nèi)的設(shè)備大大簡(jiǎn)化了密鑰分發(fā)。3.3 工業(yè)場(chǎng)景下的域劃分與密鑰隔離策略分層架構(gòu)落地時(shí)域怎么劃分是個(gè)需要仔細(xì)考慮的問(wèn)題。按地理劃分是最自然的比如每個(gè)工廠一個(gè)域。但工業(yè)網(wǎng)絡(luò)里還有按功能劃分的需求比如控制域、監(jiān)控域、管理域不同域的安全等級(jí)和通信關(guān)系不同。我的經(jīng)驗(yàn)是采用混合劃分一級(jí)按地理二級(jí)按功能。比如KGC-SH-FAB1-CTRL表示上海工廠一號(hào)車(chē)間控制域的KGC。這樣既保證了管理半徑合理又實(shí)現(xiàn)了功能域的密鑰隔離。控制域的設(shè)備私鑰即使泄露也不會(huì)影響監(jiān)控域和管理域的安全。密鑰隔離還體現(xiàn)在私鑰的使用策略上。不同域的私鑰可以綁定不同的權(quán)限比如控制域私鑰只能用于控制指令簽名監(jiān)控域私鑰只能用于數(shù)據(jù)上報(bào)簽名。這需要在私鑰生成時(shí)就把權(quán)限信息編碼進(jìn)去或者通過(guò)標(biāo)識(shí)的命名規(guī)則來(lái)隱含權(quán)限。域類型標(biāo)識(shí)示例私鑰用途更新周期控制域KGC-SH-FAB1-CTRL控制指令簽名、設(shè)備認(rèn)證12個(gè)月監(jiān)控域KGC-SH-FAB1-MON數(shù)據(jù)上報(bào)簽名、狀態(tài)查詢6個(gè)月管理域KGC-SH-FAB1-ADMIN配置下發(fā)簽名、權(quán)限管理3個(gè)月跨域網(wǎng)關(guān)KGC-SH-GW跨域認(rèn)證、密鑰委托6個(gè)月4. 密鑰更新、撤銷(xiāo)與生命周期管理的工程實(shí)現(xiàn)4.1 工業(yè)設(shè)備密鑰更新的觸發(fā)條件與流程密鑰更新在工業(yè)網(wǎng)絡(luò)里是個(gè)敏感操作因?yàn)楦逻^(guò)程中如果出現(xiàn)問(wèn)題設(shè)備可能無(wú)法認(rèn)證直接影響生產(chǎn)。觸發(fā)更新的條件通常有幾類密鑰有效期到期、設(shè)備歸屬變更、安全事件響應(yīng)、算法升級(jí)。更新流程的設(shè)計(jì)要考慮原子性和可回滾。我的做法是采用雙密鑰過(guò)渡機(jī)制設(shè)備同時(shí)持有當(dāng)前私鑰和下一個(gè)私鑰更新時(shí)先下發(fā)新私鑰驗(yàn)證新私鑰可用后再切換認(rèn)證邏輯最后廢棄舊私鑰。這樣即使更新過(guò)程中出現(xiàn)問(wèn)題設(shè)備仍然可以用舊私鑰維持認(rèn)證不會(huì)立即斷線。具體步驟上KGC先生成新私鑰通過(guò)安全通道下發(fā)給設(shè)備設(shè)備用新私鑰做一次自檢簽名KGC驗(yàn)證通過(guò)后通知設(shè)備切換。切換指令本身要用舊私鑰簽名防止偽造。整個(gè)流程可以在一個(gè)維護(hù)窗口內(nèi)完成對(duì)生產(chǎn)的影響可控。4.2 標(biāo)識(shí)撤銷(xiāo)列表與短周期密鑰的取舍IBC的一個(gè)固有難題是撤銷(xiāo)。PKI有CRL和OCSPIBC沒(méi)有天然的撤銷(xiāo)機(jī)制因?yàn)楣€就是標(biāo)識(shí)沒(méi)法像證書(shū)那樣吊銷(xiāo)。常見(jiàn)的解決方案有兩種一是維護(hù)標(biāo)識(shí)撤銷(xiāo)列表認(rèn)證時(shí)先查列表二是使用短周期密鑰讓私鑰頻繁更新減少泄露后的有效窗口。工業(yè)場(chǎng)景下我傾向于短周期密鑰為主、撤銷(xiāo)列表為輔??刂朴虻拿荑€可以做到按月更新監(jiān)控域按周更新。撤銷(xiāo)列表只用于緊急情況比如設(shè)備被盜或私鑰確認(rèn)泄露。撤銷(xiāo)列表的分發(fā)要保證及時(shí)性可以通過(guò)工業(yè)以太網(wǎng)的組播或者預(yù)置在網(wǎng)關(guān)設(shè)備上。短周期密鑰的代價(jià)是KGC的負(fù)載增加。假設(shè)一個(gè)工廠有5000臺(tái)設(shè)備每月更新一次平均每天要處理約170次私鑰生成請(qǐng)求。這個(gè)量級(jí)對(duì)KGC來(lái)說(shuō)不算大但如果縮短到每周就是每天約700次需要考慮KGC的性能和可用性。我的建議是根據(jù)設(shè)備的安全等級(jí)分級(jí)處理高安全等級(jí)的設(shè)備用短周期低安全等級(jí)的用長(zhǎng)周期。4.3 密鑰生命周期各階段的安全審計(jì)要點(diǎn)密鑰從生成到銷(xiāo)毀每個(gè)階段都需要審計(jì)。生成階段要記錄誰(shuí)申請(qǐng)、什么時(shí)候申請(qǐng)、標(biāo)識(shí)是什么分發(fā)階段要記錄傳輸通道、加密方式、接收確認(rèn)使用階段要記錄簽名次數(shù)、異常行為更新階段要記錄新舊密鑰的對(duì)應(yīng)關(guān)系銷(xiāo)毀階段要確認(rèn)私鑰被安全擦除。工業(yè)網(wǎng)絡(luò)里的審計(jì)有個(gè)特殊要求審計(jì)日志本身不能成為攻擊入口。我見(jiàn)過(guò)有項(xiàng)目把審計(jì)日志存在設(shè)備本地結(jié)果攻擊者通過(guò)日志文件獲取了密鑰更新的時(shí)間規(guī)律進(jìn)而推測(cè)出密鑰輪換策略。建議審計(jì)日志集中存儲(chǔ)設(shè)備本地只保留必要的運(yùn)行狀態(tài)敏感信息脫敏后再上傳。還有一個(gè)實(shí)操細(xì)節(jié)私鑰銷(xiāo)毀要確保不可恢復(fù)。在嵌入式設(shè)備上簡(jiǎn)單的文件刪除是不夠的要用多次覆寫(xiě)或者直接擦除存儲(chǔ)扇區(qū)。對(duì)于有安全芯片的設(shè)備可以利用芯片的密鑰銷(xiāo)毀指令確保私鑰從物理上不可恢復(fù)。5. 工業(yè)現(xiàn)場(chǎng)部署IBC的踩坑實(shí)錄與性能調(diào)優(yōu)5.1 雙線性對(duì)運(yùn)算在低端設(shè)備上的性能瓶頸雙線性對(duì)是SM9的核心運(yùn)算也是性能開(kāi)銷(xiāo)最大的部分。在PC上跑一次雙線性對(duì)可能只要幾毫秒但在低端工業(yè)MCU上可能要到幾十甚至上百毫秒。我實(shí)測(cè)過(guò)幾款常見(jiàn)的工業(yè)級(jí)MCUCortex-M4主頻100MHz左右SM9簽名驗(yàn)證大約需要80到120毫秒簽名生成大約需要60到90毫秒。這個(gè)性能對(duì)于控制周期在10毫秒以內(nèi)的場(chǎng)景是不可接受的。優(yōu)化方向有幾個(gè)一是用硬件加速部分安全芯片內(nèi)置了橢圓曲線運(yùn)算加速器可以把雙線性對(duì)的時(shí)間降到10毫秒以內(nèi)二是優(yōu)化算法實(shí)現(xiàn)比如預(yù)計(jì)算固定點(diǎn)的雙線性對(duì)減少在線計(jì)算量三是調(diào)整認(rèn)證策略把認(rèn)證放在非實(shí)時(shí)任務(wù)里不阻塞控制邏輯。我比較推薦的是硬件加速加預(yù)計(jì)算的組合。預(yù)計(jì)算可以把系統(tǒng)參數(shù)相關(guān)的雙線性對(duì)結(jié)果緩存起來(lái)設(shè)備啟動(dòng)時(shí)算一次之后復(fù)用。實(shí)測(cè)下來(lái)預(yù)計(jì)算能減少約30%到40%的在線計(jì)算時(shí)間。5.2 系統(tǒng)參數(shù)分發(fā)不一致導(dǎo)致的認(rèn)證失敗排查系統(tǒng)參數(shù)分發(fā)不一致是IBC部署中最常見(jiàn)的故障之一。癥狀是設(shè)備之間認(rèn)證隨機(jī)失敗有時(shí)成功有時(shí)失敗或者某些設(shè)備之間完全無(wú)法認(rèn)證。排查時(shí)首先要確認(rèn)所有設(shè)備的系統(tǒng)參數(shù)是否完全一致包括曲線參數(shù)、主公鑰、雙線性對(duì)參數(shù)。我遇到過(guò)一次典型的案例兩個(gè)批次的設(shè)備系統(tǒng)參數(shù)版本不同但版本號(hào)沒(méi)有明顯標(biāo)識(shí)。結(jié)果同批次設(shè)備之間認(rèn)證正??缗握J(rèn)證失敗。排查花了整整兩天最后對(duì)比參數(shù)二進(jìn)制才發(fā)現(xiàn)差異。教訓(xùn)是系統(tǒng)參數(shù)必須帶版本號(hào)并且版本號(hào)要參與認(rèn)證流程版本不匹配時(shí)給出明確錯(cuò)誤碼。另一個(gè)容易忽略的點(diǎn)是系統(tǒng)參數(shù)的編碼格式。不同廠商的實(shí)現(xiàn)可能對(duì)參數(shù)的字節(jié)序、填充方式有不同的處理如果設(shè)備來(lái)自不同供應(yīng)商一定要做互操作性測(cè)試。建議在采購(gòu)規(guī)范里明確系統(tǒng)參數(shù)的編碼格式或者統(tǒng)一由一家供應(yīng)商提供密碼模塊。5.3 密鑰更新過(guò)程中的服務(wù)中斷規(guī)避密鑰更新導(dǎo)致服務(wù)中斷是工業(yè)現(xiàn)場(chǎng)最怕的事故。我經(jīng)歷過(guò)一次因?yàn)槊荑€更新流程設(shè)計(jì)缺陷導(dǎo)致一批設(shè)備在更新后無(wú)法認(rèn)證最后只能現(xiàn)場(chǎng)手動(dòng)恢復(fù)。復(fù)盤(pán)下來(lái)問(wèn)題出在更新指令的確認(rèn)機(jī)制上設(shè)備收到新私鑰后沒(méi)有做自檢就切換了結(jié)果新私鑰和系統(tǒng)參數(shù)不匹配切換后立即失效。改進(jìn)后的流程增加了三個(gè)檢查點(diǎn)新私鑰自檢簽名、KGC驗(yàn)證自檢結(jié)果、設(shè)備確認(rèn)切換。任何一個(gè)檢查點(diǎn)失敗都回滾到舊私鑰。同時(shí)更新操作要分批進(jìn)行先更新少量設(shè)備驗(yàn)證流程確認(rèn)無(wú)誤后再批量執(zhí)行。批次之間要有間隔觀察一段時(shí)間再繼續(xù)。還有一個(gè)細(xì)節(jié)更新窗口的選擇。盡量避開(kāi)生產(chǎn)高峰期選擇計(jì)劃停機(jī)或者低負(fù)荷時(shí)段。如果產(chǎn)線不能??梢岳迷O(shè)備的冗余機(jī)制先更新備用設(shè)備切換后再更新主設(shè)備。5.4 與現(xiàn)有工控協(xié)議的集成注意事項(xiàng)IBC密鑰管理最終要落到具體的工控協(xié)議上比如OPC UA、Modbus、Profinet。不同協(xié)議對(duì)安全集成的支持程度不同。OPC UA有原生的安全通道可以比較方便地集成SM9簽名和密鑰交換Modbus本身沒(méi)有安全機(jī)制需要在應(yīng)用層做封裝Profinet有安全擴(kuò)展但需要設(shè)備支持。集成時(shí)要注意幾個(gè)問(wèn)題一是協(xié)議報(bào)文的長(zhǎng)度限制SM9簽名長(zhǎng)度固定但如果協(xié)議報(bào)文本身很短加上簽名后可能超過(guò)MTU需要考慮分片或者壓縮二是協(xié)議的實(shí)時(shí)性要求安全處理不能阻塞實(shí)時(shí)通信建議把安全處理放在獨(dú)立的協(xié)處理器或者軟件線程里三是協(xié)議的兼容性老設(shè)備可能不支持新的安全擴(kuò)展需要網(wǎng)關(guān)做協(xié)議轉(zhuǎn)換和安全代理。我在一個(gè)OPC UA項(xiàng)目里把SM9簽名集成到安全通道的握手階段替換了原來(lái)的證書(shū)驗(yàn)證。實(shí)測(cè)下來(lái)握手時(shí)間比原來(lái)減少了約40%因?yàn)槭∪チ俗C書(shū)鏈驗(yàn)證的開(kāi)銷(xiāo)。但要注意OPC UA的安全策略需要相應(yīng)調(diào)整否則客戶端可能因?yàn)椴蛔R(shí)別新的安全配置而拒絕連接。6. 從研究到落地IBC密鑰管理的選型與演進(jìn)思考6.1 IBC與PKI在工業(yè)場(chǎng)景的混合部署策略純IBC和純PKI都有各自的局限實(shí)際項(xiàng)目中混合部署往往更務(wù)實(shí)。我的做法是設(shè)備身份認(rèn)證用IBC因?yàn)闃?biāo)識(shí)即公鑰管理簡(jiǎn)單跨域或者與外部系統(tǒng)交互時(shí)用PKI因?yàn)镻KI的互操作性更好。兩者之間通過(guò)網(wǎng)關(guān)做映射網(wǎng)關(guān)持有IBC私鑰和PKI證書(shū)負(fù)責(zé)轉(zhuǎn)換認(rèn)證憑據(jù)。混合部署的關(guān)鍵是信任錨的統(tǒng)一。IBC的根KGC和PKI的根CA需要建立信任關(guān)系通常通過(guò)交叉簽名或者共同的上級(jí)信任錨來(lái)實(shí)現(xiàn)。在工業(yè)網(wǎng)絡(luò)里這個(gè)信任錨可以放在企業(yè)的安全管理中心由它來(lái)協(xié)調(diào)IBC和PKI的信任策略。這種混合模式的好處是兼顧了IBC的輕量和PKI的通用。設(shè)備側(cè)只需要支持IBC降低了算力和存儲(chǔ)要求對(duì)外交互時(shí)通過(guò)網(wǎng)關(guān)轉(zhuǎn)換不影響現(xiàn)有系統(tǒng)的兼容性。缺點(diǎn)是網(wǎng)關(guān)成為新的單點(diǎn)需要做高可用和冗余。6.2 后量子遷移對(duì)IBC密鑰管理的潛在影響量子計(jì)算對(duì)現(xiàn)有公鑰密碼的威脅是實(shí)實(shí)在在的IBC基于雙線性對(duì)同樣面臨量子攻擊的風(fēng)險(xiǎn)。后量子密碼PQC的研究進(jìn)展很快但標(biāo)準(zhǔn)化和工程化還需要時(shí)間。對(duì)于工業(yè)網(wǎng)絡(luò)這種長(zhǎng)生命周期場(chǎng)景現(xiàn)在部署的IBC體系需要考慮未來(lái)的遷移路徑。一個(gè)務(wù)實(shí)的做法是采用密碼敏捷性設(shè)計(jì)密鑰管理架構(gòu)支持算法可替換系統(tǒng)參數(shù)里預(yù)留算法標(biāo)識(shí)字段私鑰格式支持?jǐn)U展。這樣當(dāng)PQC標(biāo)準(zhǔn)成熟后可以在不大改架構(gòu)的前提下切換到新的算法。同時(shí)可以關(guān)注混合密碼方案比如IBC和PQC算法結(jié)合使用即使一個(gè)被攻破另一個(gè)仍然提供保護(hù)。工業(yè)設(shè)備的生命周期長(zhǎng)遷移不可能一蹴而就。我的建議是新部署的設(shè)備優(yōu)先選擇支持密碼敏捷性的密碼模塊已經(jīng)在用的設(shè)備通過(guò)固件升級(jí)逐步獲得新算法支持。遷移過(guò)程中新舊算法可以并行運(yùn)行通過(guò)標(biāo)識(shí)或者參數(shù)來(lái)區(qū)分。6.3 面向工業(yè)互聯(lián)網(wǎng)的IBC密鑰管理演進(jìn)方向工業(yè)互聯(lián)網(wǎng)把工廠內(nèi)的設(shè)備和云端、供應(yīng)鏈、客戶連接起來(lái)密鑰管理的邊界從工廠內(nèi)部擴(kuò)展到整個(gè)生態(tài)。這對(duì)IBC提出了新的要求跨企業(yè)的標(biāo)識(shí)互認(rèn)、大規(guī)模密鑰的分層管理、動(dòng)態(tài)加入和退出的處理。一個(gè)可能的演進(jìn)方向是聯(lián)邦式IBC每個(gè)企業(yè)有自己的根KGC企業(yè)之間通過(guò)聯(lián)邦協(xié)議建立信任關(guān)系設(shè)備跨企業(yè)認(rèn)證時(shí)通過(guò)聯(lián)邦信任鏈驗(yàn)證。這類似于PKI的交叉認(rèn)證但基于IBC的標(biāo)識(shí)體系管理更輕量。另一個(gè)方向是結(jié)合區(qū)塊鏈做密鑰管理的審計(jì)和撤銷(xiāo)。區(qū)塊鏈的不可篡改特性適合記錄密鑰的生命周期事件智能合約可以自動(dòng)化撤銷(xiāo)和更新流程。不過(guò)區(qū)塊鏈的性能和存儲(chǔ)開(kāi)銷(xiāo)在工業(yè)場(chǎng)景下還需要優(yōu)化目前更適合作為審計(jì)層而不是密鑰生成和分發(fā)的核心。我在實(shí)際項(xiàng)目里嘗試過(guò)用聯(lián)盟鏈記錄跨企業(yè)的密鑰委托關(guān)系效果還不錯(cuò)但鏈的維護(hù)成本和參與方的協(xié)調(diào)復(fù)雜度不低。對(duì)于中小規(guī)模的工業(yè)網(wǎng)絡(luò)可能還是中心化的KGC加審計(jì)日志更實(shí)用。技術(shù)選型最終要看具體的業(yè)務(wù)需求和安全等級(jí)要求沒(méi)有一刀切的方案。最后分享一個(gè)我在多個(gè)項(xiàng)目里驗(yàn)證過(guò)的小技巧IBC密鑰管理的測(cè)試環(huán)境一定要模擬真實(shí)的網(wǎng)絡(luò)抖動(dòng)和設(shè)備異構(gòu)性。很多在實(shí)驗(yàn)室里跑得好好的流程到了現(xiàn)場(chǎng)就因?yàn)槟撑_(tái)設(shè)備的時(shí)鐘偏差或者網(wǎng)絡(luò)延遲而失敗。建議在測(cè)試階段就引入網(wǎng)絡(luò)損傷儀模擬丟包、延遲、亂序同時(shí)混入不同廠商、不同批次的設(shè)備提前暴露互操作性問(wèn)題。這個(gè)投入比起現(xiàn)場(chǎng)排障的時(shí)間成本劃算得多。