• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      SoPC 安全啟動(dòng)模型與設(shè)計(jì)實(shí)現(xiàn)

      2021-12-22 07:08:24蘇振宇徐崢劉雁鳴
      電子技術(shù)應(yīng)用 2021年12期
      關(guān)鍵詞:鏡像文件數(shù)字簽名公鑰

      蘇振宇,徐崢,劉雁鳴

      (浪潮電子信息產(chǎn)業(yè)股份有限公司 安全技術(shù)部,山東 濟(jì)南 250101)

      0 引言

      可編程片上系統(tǒng)(System on a Programmable Chip,SoPC)是一種特殊的嵌入式系統(tǒng)[1],由單個(gè)芯片完成整個(gè)系統(tǒng)的主要邏輯功能,通過軟硬件在系統(tǒng)可編程的功能使得設(shè)計(jì)方式具備可裁剪、可擴(kuò)充、可升級(jí)等靈活特性。在SoPC 啟動(dòng)過程中存在一定的安全風(fēng)險(xiǎn),惡意軟件有可能會(huì)修改引導(dǎo)加載程序等固件,使SoPC 受到Rootkit 攻擊[2]。Rootkit 等惡意軟件通過修改系統(tǒng)的啟動(dòng)過程,安裝到系統(tǒng)內(nèi)以達(dá)到持久駐留系統(tǒng)的目的[3],SoPC 一旦受到Rootkit等惡意代碼感染,即使重新安裝系統(tǒng)也無法清除。因此有必要對SoPC 進(jìn)行安全保護(hù),防止在啟動(dòng)過程中固件被惡意篡改。安全啟動(dòng)對于保護(hù)設(shè)計(jì)的知識(shí)產(chǎn)權(quán)和防止惡意軟件在系統(tǒng)上運(yùn)行至關(guān)重要。相關(guān)研究工作存在的問題主要有:(1)采用外接可信平臺(tái)模塊(Trusted Platform Module,TPM)[4]實(shí)現(xiàn)可信啟動(dòng)[5],該方式增加了硬件成本且系統(tǒng)集成度低;(2)在構(gòu)建信任鏈的過程中僅采用雜湊算法進(jìn)行度量[6],缺少驗(yàn)證的過程,因此安全性較低;(3)嵌入式系統(tǒng)上電時(shí)由最先啟動(dòng)的引導(dǎo)加載程序Boot Loader 調(diào)用TPM 對后續(xù)加載的模塊進(jìn)行度量[7-8],Boot Loader 默認(rèn)是安全的,但Boot Loader 一旦被攻擊篡改,整個(gè)信任鏈就處于非可信的狀態(tài)。

      1 SoPC 安全啟動(dòng)模型

      基于現(xiàn)有技術(shù)的不足,提出一種SoPC 安全啟動(dòng)模型,目的是確保SoPC 的引導(dǎo)加載程序等固件是可信的,安全啟動(dòng)模型如圖1 所示。信任根是創(chuàng)建安全啟動(dòng)最關(guān)鍵的部分,能夠確保安全級(jí)別配置正確并且安全密鑰受到保護(hù)。在該模型中信任根是SoPC 中受信任的第一階段的引導(dǎo)固件Boot ROM,作為引導(dǎo)SoPC 可信的、固有的安全起點(diǎn)。

      圖1 SoPC 安全啟動(dòng)模型

      為了確??尚判?,在安全啟動(dòng)過程中通過建立信任鏈,使每個(gè)固件在加載運(yùn)行前都經(jīng)過數(shù)字簽名的驗(yàn)證,只有當(dāng)前階段對后續(xù)待啟動(dòng)的模塊進(jìn)行驗(yàn)證通過后,才會(huì)加載和執(zhí)行后續(xù)的模塊。具體為:依次對第二、三、四階段的Boot Loader、操作系統(tǒng)和應(yīng)用程序的鏡像文件添加數(shù)字簽名后存儲(chǔ),在SoPC 上電啟動(dòng)建立信任鏈的過程中,首先由第一階段的Boot ROM 驗(yàn)證第二階段Boot Loader的簽名,確保Boot Loader 是受信任的;之后由Boot Loader驗(yàn)證操作系統(tǒng)的簽名,依次類推,從而確保各模塊是受信任的。為了進(jìn)一步提高啟動(dòng)過程的安全性,可以對固件鏡像加密后再進(jìn)行數(shù)字簽名操作,并且將相關(guān)的密鑰存儲(chǔ)于SoPC 的安全區(qū)域中。

      在安全啟動(dòng)之前,對Xi的數(shù)字簽名SIGi 定義如下:

      其中每階段待啟動(dòng)的模塊為Xi,第一階段的引導(dǎo)程序X0為信任根。E 代表加密運(yùn)算,D 代表解密運(yùn)算,H 代表雜湊運(yùn)算,K為對稱密碼算法的密鑰,PK、SK為非對稱密碼算法的公鑰、私鑰。SIGi為數(shù)字簽名值,H(Xi)表示對Xi進(jìn)行雜湊運(yùn)算后生成的摘要值。式(1)表示用私鑰SK 對H(Xi)進(jìn)行數(shù)字簽名,即對H(Xi)做解密運(yùn)算;為進(jìn)一步提高安全性,式(2)在進(jìn)行數(shù)字簽名之前,利用密鑰K 對H(Xi)進(jìn)行了對稱加密運(yùn)算。

      在啟動(dòng)過程中,由Xi-1對Xi進(jìn)行校驗(yàn)。驗(yàn)證Xi的數(shù)字簽名SIGi的定義為:

      式(3)與式(1)對應(yīng),驗(yàn)證簽名時(shí)利用公鑰PK 對數(shù)字簽名值SIGi進(jìn)行加密運(yùn)算后恢復(fù)出Xi的標(biāo)準(zhǔn)摘要值H(Xi),之后計(jì)算待加載模塊Xi鏡像的摘要值H(),并與H(Xi)進(jìn)行比對,當(dāng)H()=H(Xi)時(shí)說明Xi未篡改(即=Xi),數(shù)字簽名驗(yàn)證通過;如果Xi的鏡像被篡改為,由于Xi′≠Xi,故H()≠H(Xi),校驗(yàn)不通過。式(4)與式(2)對應(yīng),先利用公鑰PK 對SIGi進(jìn)行加密運(yùn)算,再利用K 進(jìn)行解密運(yùn)算后恢復(fù)出標(biāo)準(zhǔn)摘要值H(Xi)。

      以信任根X0為信任起點(diǎn)逐級(jí)進(jìn)行驗(yàn)證,如果每個(gè)模塊Xi的數(shù)字簽名都驗(yàn)證通過,則啟動(dòng)過程是安全可信的,最終構(gòu)建一個(gè)安全可信的信任鏈:X0→X1→X2…→Xi,如果在啟動(dòng)過程中任意Xi的數(shù)字簽名驗(yàn)證不通過,則信任鏈的建立終止,系統(tǒng)不會(huì)啟動(dòng)。

      2 模型設(shè)計(jì)

      2.1 SoPC 硬件架構(gòu)設(shè)計(jì)

      安全啟動(dòng)模型采用了Intel Arria10 現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)開發(fā)平臺(tái)[9]進(jìn)行設(shè)計(jì)和驗(yàn)證,EDA 工具采用的是Quartus II 19.1[10]、嵌入式開發(fā)套件為EDS[11]、操作系統(tǒng)為Linux Ubuntu 14.0。SoPC 安全啟動(dòng)硬件架構(gòu)設(shè)計(jì)如圖2 所示,包括硬件處理器系統(tǒng)(Hard Processor System,HPS)和FPGA 可編程邏輯區(qū)域,其中HPS 包括微控制器MPU、安全管理器(Security Manager,SM)、Boot ROM、On-chip RAM 等;FPGA區(qū)域包括配置邏輯(Configuration Logic,CL)、安全熔絲Fuse、Flash/SD 卡等。

      圖2 SoPC 安全啟動(dòng)硬件架構(gòu)

      主要功能模塊的作用如下:

      (1)SM:用于系統(tǒng)初始化和引導(dǎo),在SoPC 上電復(fù)位后根據(jù)熔絲寄存器(Fuse_REG)對系統(tǒng)進(jìn)行配置。

      (2)Boot ROM:管理安全引導(dǎo)過程的第一階段,并對第二階段的引導(dǎo)程序Boot Loader 進(jìn)行驗(yàn)證。

      (3)CL:發(fā)送配置信息給SM,另外包括256 位橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm,ECDSA-256)[12]、256 位安全散列算法(Secure Hash Algorithm,SHA-256)[13]和高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)[14],作為對鏡像加密和簽名的密碼算法模塊。

      (4)Fuse:一次性可編程區(qū)域,作為安全存儲(chǔ)區(qū)存儲(chǔ)公鑰PK、對稱密鑰K 以及系統(tǒng)安全配置信息。

      (5)Flash/SD 卡:為片外非易失存儲(chǔ)器,存儲(chǔ)經(jīng)過加密和簽名的Boot Loader、OS 等鏡像文件,啟動(dòng)過程中鏡像驗(yàn)證通過后才能加載到SoPC 片內(nèi)RAM 運(yùn)行。

      SoPC 上電復(fù)位后,CL 初始化并將Fuse 安全配置信息發(fā)送到HPS 中的SM,配置信息保存在SM 中的Fuse_REG寄存器中。SM 根據(jù)Fuse_REG 中的配置信息執(zhí)行安全檢查并發(fā)送系統(tǒng)初始化信號(hào),控制Fuse 信息自動(dòng)發(fā)送到時(shí)鐘管理器,內(nèi)存控制Fuse 信息自動(dòng)發(fā)送到復(fù)位管理器,認(rèn)證、加密、公鑰等配置信息存儲(chǔ)在相應(yīng)的存儲(chǔ)器映射位置,由Boot ROM 代碼讀取。

      之后HPS 在安全狀態(tài)下退出復(fù)位狀態(tài),Boot ROM 開始執(zhí)行。此時(shí),HPS 處于受信任狀態(tài),并且保證Boot ROM代碼按預(yù)期執(zhí)行。Boot ROM 讀取安全報(bào)頭,如圖3 所示,確定根密鑰的存儲(chǔ)位置并驗(yàn)證第二階段Boot Loader 鏡像安全報(bào)頭中的數(shù)字簽名值。如果校驗(yàn)通過,Boot ROM允許Boot Loader 鏡像加載和執(zhí)行。

      圖3 Boot Loader 鏡像的驗(yàn)證報(bào)頭和安全報(bào)頭

      2.2 鏡像簽名

      ECDSA-256 算法的私鑰用于對鏡像進(jìn)行簽名,公鑰用于對鏡像進(jìn)行驗(yàn)證。公鑰可通過Fuse_REG 寄存器選擇配置為3 種類型,如表1 所示。

      表1 公鑰類型

      (1)安全密鑰:安全性最高,公鑰PK 經(jīng)過SHA-256雜湊運(yùn)算后的摘要值H(PK)存儲(chǔ)于Fuse 中,使用前先驗(yàn)證公鑰完整性,校驗(yàn)通過才允許加載;若公鑰被篡改為PK′,則H(PK′)≠H(PK),禁止公鑰加載。

      (2)FPGA 密鑰:安全性較高,公鑰直接存儲(chǔ)于FPGA區(qū)域的RAM 中,未經(jīng)過雜湊運(yùn)算。

      (3)測試密鑰:安全性最差,公鑰直接存儲(chǔ)于鏡像文件的報(bào)頭中,僅在測試階段使用。

      3 模型驗(yàn)證

      3.1 安全鏡像文件創(chuàng)建

      鏡像文件有兩種創(chuàng)建方式,對應(yīng)兩種安全級(jí)別,可通過Fuse_REG 寄存器進(jìn)行選擇配置。

      (1)簽名驗(yàn)證方式

      該方式首先需要利用OpenSSL[15]生成簽名密鑰對,OpenSSL 是一個(gè)支持安全套接字協(xié)議SSL 的開源工具包,集成于EDS 嵌入式命令shell 中。生成密鑰對的具體方式是在Linux 中啟動(dòng)Boot Loader 生成器后調(diào)用OpenSSL,運(yùn)行如下命令使OpenSSL 生成密鑰對:# openssl ecparam-genkey -name prime256v1 -out root_key.pem。

      創(chuàng)建的簽名密鑰對存儲(chǔ)于root_key.pem 文件中,使用安全引導(dǎo)鏡像工具alt-secure-boot 對鏡像進(jìn)行簽名的命令為:# alt-secure-boot sign-i Image.bin-o Image_sign.bin-t user。

      其中user 代表的公鑰類型是測試密鑰,在測試階段的安全啟動(dòng)過程中,直接讀取鏡像文件中的公鑰,不對公鑰進(jìn)行SHA-256 雜湊校驗(yàn)比對。Image.bin和Image_sign.bin 分別為簽名之前和添加數(shù)字簽名之后鏡像文件,將Image_sign.bin 文件存儲(chǔ)于片外SD 卡中。

      (2)加密+簽名驗(yàn)證方式

      為了在引導(dǎo)期間提供最高級(jí)別的安全性,可以對鏡像文件加密后再添加數(shù)字簽名,以便在校驗(yàn)階段提供雙重保護(hù)。在Boot Loader 生成器中通過文件encrypt.key生成加密密鑰key,用于對鏡像加密。具體為EDS 工具調(diào)用Boot Loader 生成器讀取encrypt.key 文件中的二進(jìn)制位流生成加密密鑰key。對鏡像進(jìn)行加密的命令為:# alt-secure-boot encrypt-i Image.bin-o Image_enc.bin-k key。

      其中key為AES 對稱算法的密鑰,Image.bin和Image_enc.bin 分別為加密之前和加密之后鏡像文件。

      3.2 安全啟動(dòng)功能測試驗(yàn)證

      驗(yàn)證過程如圖4 所示,具體說明如下。啟動(dòng)過程的每個(gè)階段利用公鑰PK和雜湊算法校驗(yàn)下一階段鏡像的數(shù)字簽名,首先恢復(fù)出鏡像文件的標(biāo)準(zhǔn)摘要值H(Xi),如果鏡像被加密了,根據(jù)式(3)需要利用PK和對稱密鑰K 恢復(fù)出標(biāo)準(zhǔn)摘要值H(Xi)。在鏡像加載之前計(jì)算其摘要值H(Xi′),并與H(Xi)進(jìn)行比對,如果H(Xi)=H(Xi′),說明鏡像未篡改,即Xi=,允許鏡像加載執(zhí)行;如果H(Xi)≠H(),說明鏡像Xi已被篡改為,信任鏈為非可信狀態(tài),啟動(dòng)過程失敗。例如在引導(dǎo)過程中,Boot ROM 首先驗(yàn)證Boot Loader 鏡像的數(shù)字簽名,驗(yàn)證通過后才能加載運(yùn)行,之后由Boot Loader 對后續(xù)階段的Linux 系統(tǒng)鏡像進(jìn)行驗(yàn)證和加載。如果驗(yàn)證數(shù)字簽名失敗,啟動(dòng)過程終止。

      圖4 安全啟動(dòng)驗(yàn)證流程圖

      表2為Boot Loader和Linux 的鏡像文件經(jīng)過雜湊運(yùn)算后的摘要值。為了驗(yàn)證安全啟動(dòng)的功能,對原始值的前2 個(gè)字節(jié)分別篡改為了“0x12,0x34”。

      表2 鏡像文件摘要值篡改

      表3為兩種安全啟動(dòng)方式的測試結(jié)果,如果鏡像未篡改,SoPC 正常啟動(dòng);如果對Boot Loader 或Linux 系統(tǒng)鏡像文件進(jìn)行了篡改,信任鏈建立終止,啟動(dòng)失敗。

      表3 安全啟動(dòng)測試結(jié)果

      圖5 所示為啟動(dòng)方式的啟動(dòng)時(shí)間對比,正常啟動(dòng)時(shí)因未對鏡像進(jìn)行簽名和驗(yàn)證,所以啟動(dòng)時(shí)間最短,但安全性最差;若采用簽名驗(yàn)證方式啟動(dòng),從SoPC 上電到應(yīng)用程序加載的時(shí)間總共為15 s;采用簽名+加密驗(yàn)證方式的整個(gè)啟動(dòng)時(shí)間最長,為25 s,但安全性最高。

      圖5 安全啟動(dòng)模式的啟動(dòng)時(shí)間對比

      4 結(jié)論

      SoPC 在啟動(dòng)過程中通過校驗(yàn)啟動(dòng)階段各固件鏡像的數(shù)字簽名方式提升了安全性,保證了啟動(dòng)過程中引導(dǎo)加載程序、操作系統(tǒng)及應(yīng)用程序的安全可信,從而構(gòu)建起完整的信任鏈。此外,測試階段為了避免把密鑰永久寫入一次性可編程區(qū)域而造成Fuse 資源浪費(fèi),靈活采用了把密鑰寫入文件和FPGA RAM 區(qū)域的方式進(jìn)行功能的驗(yàn)證。后續(xù)工作可以將該安全啟動(dòng)模型應(yīng)用于實(shí)際SoPC 的設(shè)計(jì)開發(fā)過程,實(shí)現(xiàn)對SoPC 啟動(dòng)過程的安全保護(hù),并且將密鑰固化在安全區(qū)域以防止被非法篡改,提高安全性。

      猜你喜歡
      鏡像文件數(shù)字簽名公鑰
      淺析計(jì)算機(jī)安全防護(hù)中數(shù)字簽名技術(shù)的應(yīng)用
      一種基于混沌的公鑰加密方案
      沒光驅(qū)不要緊 裝個(gè)免費(fèi)虛擬的
      用RamOS降低公用機(jī)的維護(hù)工作量
      基于數(shù)字簽名的QR碼水印認(rèn)證系統(tǒng)
      HES:一種更小公鑰的同態(tài)加密算法
      SM2橢圓曲線公鑰密碼算法綜述
      Win7升級(jí)Win10教程
      電腦迷(2015年9期)2015-05-30 22:08:35
      基于格的公鑰加密與證書基加密
      基于數(shù)字簽名和HSM的數(shù)據(jù)庫篡改檢測機(jī)制
      南靖县| 武隆县| 娱乐| 民丰县| 彭山县| 峨山| 炉霍县| 绥阳县| 客服| 灵台县| 班玛县| 新建县| 巨野县| 余江县| 泗洪县| 临城县| 鄂托克旗| 隆昌县| 兴仁县| 屯门区| 房山区| 大厂| 邹城市| 治多县| 晋城| 邵阳市| 深圳市| 即墨市| 慈溪市| 鄢陵县| 将乐县| 额尔古纳市| 克山县| 中阳县| 舞阳县| 平度市| 鹰潭市| 龙江县| 湄潭县| 宣威市| 白朗县|