最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

信息安全專(zhuān)題 | 安全存儲(chǔ)(1)STM32H7的密鑰存儲(chǔ)

2021-03-17 14:10 作者:電堂科技  | 我要投稿

《信息安全專(zhuān)題 |?代碼保護(hù)(1)使用STM32H7新特性保護(hù)片上代碼的機(jī)密性一文中,與大家探討了如何利用STM32H7的安全用戶(hù)存儲(chǔ)區(qū)(又稱(chēng)“安全訪問(wèn)模式”)實(shí)現(xiàn)安全調(diào)試。

本文繼續(xù)為大家介紹STM32H7系列如何實(shí)現(xiàn)密鑰的安全存儲(chǔ)與使用。


使用STM32H7 安全新特性實(shí)現(xiàn)敏感數(shù)據(jù)(密鑰)的安全存儲(chǔ)與使用

密鑰的安全存儲(chǔ)與使用

安全通信、用戶(hù)數(shù)據(jù)加密存儲(chǔ)等都離不開(kāi)密鑰,密鑰安全存儲(chǔ)與使用是嵌入式系統(tǒng)中常見(jiàn)的安全功能需求之一。MCU上對(duì)于密鑰的保護(hù)通常會(huì)從幾個(gè)方面著眼 :

  • 調(diào)試端口訪問(wèn):避免通過(guò)調(diào)試端口獲取密鑰,通常通過(guò)調(diào)試端口保護(hù)機(jī)制來(lái)實(shí)現(xiàn)

  • 軟件代碼訪問(wèn):禁止任意軟件直接讀取密鑰,避免由于軟件漏洞可能帶來(lái)的密鑰被惡意代碼獲取的風(fēng)險(xiǎn),可以通過(guò)隔離機(jī)制來(lái)實(shí)現(xiàn)

  • 運(yùn)行期間對(duì)密鑰使用的保護(hù):如果加解密操作通過(guò)軟件實(shí)現(xiàn),那么軟件隔離機(jī)制是方法之一;如果加解密操作可以通過(guò)硬件單元完成,那么讓密鑰只能由硬件直接操作而不允許CPU/DMA訪問(wèn)也是一 種有效的方法

?STM32H7新特性提供基于片上Flash的安全存儲(chǔ)

  • 調(diào)試端口連接可控:在RDP0條件下也可實(shí)現(xiàn)對(duì)調(diào)試端口的保護(hù):上電調(diào)試接口即不可連接(類(lèi)似RDP2的效果);比RDP2更靈活:可以由用戶(hù)代碼控制調(diào)試端口訪問(wèn)權(quán)限,實(shí)現(xiàn)安全調(diào)試,并保留修改選項(xiàng)字節(jié)的可能性

  • PCROP區(qū)域阻斷D-Bus訪問(wèn),防止程序竊取敏感數(shù)據(jù)

  • 用戶(hù)片上Flash進(jìn)一步隔離:保護(hù)根密鑰不被木馬程序盜取

  • CRYP的KEY寄存器具有只寫(xiě)屬性:普通代碼可以使用它對(duì)存儲(chǔ)在普通區(qū)域的敏感數(shù)據(jù)密文做解密操作,但是無(wú)法拿到密鑰本身

PCROP保護(hù)的設(shè)置和撤銷(xiāo)

  • PCROP區(qū)域的設(shè)置:每個(gè)bank可設(shè)置一個(gè)PCROP區(qū):大小從512字節(jié)到整個(gè)bank;粒度,256字節(jié);由以下選項(xiàng)字節(jié)指定有效范圍PROT_AREA_START1/2、*** _END1/2

    ;起始地址 > 結(jié)尾地址,保護(hù)無(wú)效

  • PCROP區(qū)域范圍只能增大,不能減小,除非撤銷(xiāo)區(qū)域保護(hù)后重新設(shè)置范圍

  • PCROP區(qū)域的撤銷(xiāo):RDP降級(jí) + PCROP范圍無(wú)效,同時(shí)進(jìn)行;若此時(shí)RDP=0,要先升級(jí)到RDP1再做降級(jí)

  • PCROP區(qū)域的保留-由于其他原因需要做RDP降級(jí),但同時(shí)想保留PCROP區(qū)域里的內(nèi)容,以及保護(hù)效果:區(qū)域范圍保持不變(起始地址 < 結(jié)束地址);DMEP1/2 = 0


STM32H7上的安全存儲(chǔ)

▲ STM32H7上的安全存儲(chǔ). 啟動(dòng)代碼


▲ STM32H7上的安全存儲(chǔ). 應(yīng)用代碼


▲ 安全STM32H7 安全存儲(chǔ)示例


安全存儲(chǔ)例程使用說(shuō)明

  • 解壓縮軟件包,使用熟悉的IDE分別打開(kāi)Boot和App兩個(gè)工程,分別編譯

  • App工程可以使用IDE或者熟悉的燒錄工具下載

  • Boot工程:Boot工程image,占據(jù)片上Flash第一個(gè)Sector;密鑰恢復(fù)函數(shù)所在的PCROP區(qū)域,也在第一個(gè)Sector里面;使用IDE對(duì)Boot工程編譯即可,得到Boot.hex。不要繼續(xù)使用IDE來(lái)下載

  • 密鑰恢復(fù)函數(shù)的生成和下載:到命令行窗口,分別使用兩個(gè)腳本生成 “密鑰恢復(fù)函數(shù)”,以及下載密鑰 和Boot image到片上Flash的第一個(gè)Sector(如下圖)

  • 打開(kāi)串口調(diào)試助手:115200波特率,8bit數(shù)據(jù)位,1bit停止位;無(wú)校驗(yàn)位,無(wú)流控

  • 啟動(dòng)STM32H753-Nucleo板(復(fù)位按鍵+用戶(hù)按鍵)

▲ Boot 工程菜單

密鑰的預(yù)裝載和后續(xù)使用

  • 密鑰,由運(yùn)行于安全用戶(hù)存儲(chǔ)區(qū)的Boot在上電的時(shí)候從PCROP保護(hù)區(qū)域執(zhí)行代碼,預(yù)裝到CRYP硬件模塊的密鑰寄存器,該寄存器具有“WO”屬性

  • 在后續(xù)的CRYP操作中,HAL驅(qū)動(dòng)不能再去修改密鑰寄存器,因而示例程序中的HAL Driver已經(jīng)做了如下一些修改:僅僅在初始化結(jié)構(gòu)體中,使用空指針賦值pKey是不夠的;還需要對(duì)初始化結(jié)構(gòu)體中的KeyIVConfigSkip成員進(jìn)行特別規(guī)定,添加新的選項(xiàng)(***_Never)


▲ App工程


▲ 加解密操作的驗(yàn)證


▲ AES-GCM 注意事項(xiàng)

注意事項(xiàng)

  • SEC_AREA沒(méi)有安全區(qū)時(shí),只能由RSS來(lái)初始化;有了安全區(qū)后,運(yùn)行在其中的代碼可以修改SEC_AREA;STM32CubeProgrammer是無(wú)法操作SEC_AREA成功的

  • SECURITY=1,IDE下載可能會(huì)失敗;要么從STM32CubeProgramer連接后,清零SECURITY;要么修改工程的復(fù)位連接方式

調(diào)試Boot工程 (對(duì)PCROP區(qū)域代碼的調(diào)用)

  • Flash保護(hù)沒(méi)有打開(kāi)時(shí),可以在Boot工程調(diào)試PCROP區(qū)域里的 “密鑰恢復(fù)函數(shù)”

  • Boot image和 “密鑰恢復(fù)函數(shù)”,在同一個(gè)可擦除Sector,由腳本一起燒錄

  • 調(diào)試Boot image時(shí),需要去掉對(duì)應(yīng)的flash loader設(shè)置:三種IDE配置如下

密鑰恢復(fù)函數(shù)

  • 使用腳本把密鑰數(shù)據(jù)轉(zhuǎn)換成 “密鑰函數(shù)”

  • 把密鑰恢復(fù)到該函數(shù)的調(diào)用參數(shù)中:fp ((uint8_t *)&(CRYP->K2LR)) // 給CRYP使用;fp(&key[0]) // 用于打印到串口屏幕,供第三方 加解密工具做同樣操作,來(lái)比對(duì)加解密結(jié)果

  • 為進(jìn)一步提高安全性:密鑰恢復(fù)函數(shù)不接受任何參數(shù),固定是把密鑰恢復(fù)到CRYP密鑰寄存器中;參見(jiàn) “密鑰函數(shù)” 生成腳本做相應(yīng)修改

小結(jié)

安全STM32H7能夠提供片上存儲(chǔ)的安全性安全硬件,助力安全存儲(chǔ):

  • 安全用戶(hù)存儲(chǔ)區(qū)-選項(xiàng)字節(jié)設(shè)置,上電即生效

  • PCROP保護(hù)-選項(xiàng)字節(jié)設(shè)置,上電即生效

  • CRYP密鑰寄存器WO

  • 調(diào)試端口連接可控 — 上電缺省不可連接


信息安全專(zhuān)題 | 安全存儲(chǔ)(1)STM32H7的密鑰存儲(chǔ)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
罗城| 青浦区| 浦北县| 九龙城区| 梁山县| 内乡县| 永善县| 合川市| 甘孜县| 中西区| 旌德县| 随州市| 威远县| 天水市| 瑞昌市| 灵山县| 托克逊县| 望谟县| 盈江县| 长海县| 加查县| 盐亭县| 达孜县| 安平县| 金阳县| 汉川市| 南澳县| 修水县| 平顶山市| 抚宁县| 格尔木市| 康保县| 尉犁县| 清远市| 三门县| 大渡口区| 仁寿县| 信阳市| 龙海市| 广州市| 泗阳县|