TW202326488A - 韌體驗證系統及韌體驗證方法 - Google Patents
韌體驗證系統及韌體驗證方法 Download PDFInfo
- Publication number
- TW202326488A TW202326488A TW110149524A TW110149524A TW202326488A TW 202326488 A TW202326488 A TW 202326488A TW 110149524 A TW110149524 A TW 110149524A TW 110149524 A TW110149524 A TW 110149524A TW 202326488 A TW202326488 A TW 202326488A
- Authority
- TW
- Taiwan
- Prior art keywords
- firmware
- entry
- public key
- hash value
- flash memory
- Prior art date
Links
- 238000012795 verification Methods 0.000 title claims abstract description 62
- 238000000034 method Methods 0.000 title claims abstract description 33
- 230000015654 memory Effects 0.000 claims abstract description 78
- 230000006870 function Effects 0.000 claims description 6
- 102100021469 Equilibrative nucleoside transporter 1 Human genes 0.000 description 18
- 101000822020 Homo sapiens Equilibrative nucleoside transporter 1 Proteins 0.000 description 18
- 101100236764 Caenorhabditis elegans mcu-1 gene Proteins 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 3
- 101100042610 Arabidopsis thaliana SIGB gene Proteins 0.000 description 2
- 101100294408 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) MOT2 gene Proteins 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 101150117326 sigA gene Proteins 0.000 description 2
- RZVHIXYEVGDQDX-UHFFFAOYSA-N 9,10-anthraquinone Chemical compound C1=CC=C2C(=O)C3=CC=CC=C3C(=O)C2=C1 RZVHIXYEVGDQDX-UHFFFAOYSA-N 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/44—Program or device authentication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/575—Secure boot
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
一種韌體驗證方法,適用於一安全啟動(secure boot)階段。韌體驗證方法的步驟包含:藉由一唯讀記憶體(ROM,Read-Only Memory)儲存一啟動程式(bootloader);藉由複數個快閃記憶體(flash memory)各自儲存一韌體;其中,此些快閃記憶體各自包含於對應的微控制器中;藉由一非揮發性韌體名單儲存裝置儲存一韌體名單,韌體名單中包含複數個條目(entry);其中,每個條目各自對應到每個快閃記憶體中所儲存的韌體,且每個條目包含複數個欄位;以及藉由啟動程式用以讀取此些條目,並依據每個條目中的此些欄位的內容,以判斷每個微控制器中的每個韌體各自的一公鑰的正確性和一數位簽章的正確性。
Description
本發明是關於一種韌體驗證系統,特別是關於一種適用於一安全啟動(secure boot)階段的韌體驗證系統及韌體驗證方法。
隨著物聯網的蓬勃發展,聯網設備的安全問題越來越受到產業界的重視,包括微控制器 (microcontroller, or MCU) 供應商、軟韌體開發商、終端設備製造商以及政府相關單位等,都在尋找確認設備安全的方案和標準。微控制器做為聯網設備的核心,微控制器的安全性關係到終端設備能否被信任,因此微控制器的安全性顯得更加地重要。
為了保證微控制器的安全,必須確認在微控制器上運行的韌體是正確且未被竄改的。在現今的微控制器上通常會實作一種安全啟動 (Secure Boot) 的功能來達成此一目的。
然而,此種方法需要在所有的韌體開發完成後,必須先整合所有的韌體成單一個韌體映像( firmware image),再由其中一個開發商 (例如,整合者或最重要者) 使用其私鑰來簽署此韌體映像。一旦其中有任一個韌體作修改,必須重跑整個韌體整合和簽署的流程。
因此,如何在安全啟動階段驗證多個微控制器,已成為本領域需解決的問題之一。
為了解決上述的問題,本揭露內容之一態樣提供了一種韌體驗證系統。韌體驗證系統適用於一安全啟動(secure boot)階段,韌體驗證系統包含一唯讀記憶體(ROM,Read-Only Memory)、一微控制器以及一非揮發性韌體名單儲存裝置。唯讀記憶體用以儲存一啟動程式(bootloader)。微控制器中包含一快閃記憶體(flash memory),快閃記憶體用以儲存一韌體。非揮發性韌體名單儲存裝用以儲存一韌體名單,韌體名單中包含複數個條目(entry);其中,每個條目各自對應到快閃記憶體中所儲存的韌體,且每個條目包含複數個欄位。其中,啟動程式用以讀取此些條目,並依據每個條目中的此些欄位的內容,以判斷微控制器中的韌體的一公鑰的正確性和一數位簽章的正確性。
本發明之又一態樣係於提供一種韌體驗證方法,適用於一安全啟動(secure boot)階段。韌體驗證方法的步驟包含:藉由一唯讀記憶體(ROM,Read-Only Memory)儲存一啟動程式(bootloader);藉由一快閃記憶體(flash memory)儲存一韌體;其中,快閃記憶體包含於一微控制器中;藉由一非揮發性韌體名單儲存裝置儲存一韌體名單,韌體名單中包含複數個條目(entry);其中,每個條目各自對應到快閃記憶體中所儲存的韌體,且每個條目包含複數個欄位;以及藉由啟動程式用以讀取此些條目,並依據每個條目中的此些欄位的內容,以判斷微控制器中的韌體的一公鑰的正確性和一數位簽章的正確性。
本發明之又一態樣係於提供一種韌體驗證系統,適用於一安全啟動(secure boot)階段,韌體驗證系統包含:一非揮發性韌體名單儲存裝置,用以儲存一韌體名單,該韌體名單中包含複數個條目(entry);其中,每個條目各自對應到一微控制器中的一快閃記憶體中所儲存的一韌體,且每個條目包含複數個欄位;其中,一啟動程式用以讀取該些條目,並依據每個條目中的該些欄位的內容,以判斷該微控制器中的每個韌體各自的一公鑰的正確性和一數位簽章的正確性。
由上述可知,安全啟動階段藉由驗證數位簽章來確認微控制器中存放的韌體來源是否正確,韌體本身是否未被篡改。因此,在微控制器上必須存放正確的公鑰以便用於數位簽章的驗證。在實際應用上,微控制器中可存放多個韌體,包括應用程式代碼和第三方函數庫,這些韌體由不同的軟體開發商所發布,便需要有各個開發商的公鑰才能驗證每個不同的韌體。本發明提出的韌體驗證系統及韌體驗證方法,不需要在微控制器中存放多把公鑰。藉由 韌體名單存放韌體相關資料,並配合啟動程式的操作,可以在系統啟動階段,確認每個快閃記憶體中的每個韌體的公鑰和數位簽章的正確性,達成認證多個韌體的安全性之功效。
以下說明係為完成發明的較佳實現方式,其目的在於描述本發明的基本精神,但並不用以限定本發明。實際的發明內容必須參考之後的權利要求範圍。
必須了解的是,使用於本說明書中的”包含”、”包括”等詞,係用以表示存在特定的技術特徵、數值、方法步驟、作業處理、元件以及/或組件,但並不排除可加上更多的技術特徵、數值、方法步驟、作業處理、元件、組件,或以上的任意組合。
於權利要求中使用如”第一”、"第二"、"第三"等詞係用來修飾權利要求中的元件,並非用來表示之間具有優先權順序,先行關係,或者是一個元件先於另一個元件,或者是執行方法步驟時的時間先後順序,僅用來區別具有相同名字的元件。
一般而言,為了支持安全啟動,在微控制器中有一不可更改 (immutable) 的記憶體,用來存放啟動程式 (bootloader)。啟動程式在系統開機時此啟動程式即被執行,並利用加密的數位簽章 (cryptographic digital signatures) 來驗證存放在快閃記憶體(flash memory)中的韌體 (firmware) 的真實性和完整性,防止惡意韌體 (malware) 被執行。
上述安全啟動的方法是基於非對稱式的密碼學原理。在實際操作時需要生成一對公鑰和私鑰,稱作密鑰對。私鑰由軟體開發商秘密保存,而公鑰則加載到微控制器中,此公鑰稱作安全公鑰 (Secure Public Key)。如果軟體開發商發布新的程式代碼 (因為量產或韌體更新),則需要使用私鑰生成新的數位簽章,此動作稱為簽署 (signing)。在將程式代碼加載到微控制器的 快閃記憶體時,必須同時加載數位簽章。基於非對稱式密碼學的數學原理,只有對應的公鑰才能解開此數位簽章,成功通過驗證。若快閃記憶體記憶體中存放的韌體是由同一個開發商所發布,上述的方法可順利的運行。但如果快閃記憶體中存放多個由不同開發商所發布的韌體 (例如應用程式和一個以上的函數庫),此一方法的使用將會受到限制。例如,所有的韌體開發完成後,必須先整合成單一個韌體映像,再由其中一個開發商 (整合者或最重要者) 使用其私鑰來簽署此韌體映像。一旦其中有任一個韌體作修改,必須重跑整個韌體整合和簽署的流程。
因此,以下敘述在安全啟動階段驗證多個微控制器的韌體驗證系統及韌體驗證方法。
請參照第1、2A~2B圖,第1圖係依照本發明一實施例繪示韌體名單之示意圖。第2A圖係依照本發明一實施例繪示韌體驗證系統100之示意圖。第2B圖係依照本發明一實施例繪示韌體驗證系統150之示意圖。
如第1圖所示,於一實施例中,為了在安全啟動時,啟動程式可以驗證每個開發商所發布的韌體,韌體驗證系統100的微控制器內部存放著一組非揮發(non-volatile)的韌體名單。
於一實施例中,韌體驗證系統100中用以運行啟動程式的微控制器可以將韌體驗證系統100中現有的快閃記憶體切割出一塊空間儲存韌體名單,也可以特別設計韌體驗證系統100的微控制器中獨立的一可多次編寫(MTP,Multi-Time-Programing)記憶體來儲存韌體名單。
於一實施例中,韌體名單可以儲存於一非揮發性條目儲存裝置ST1中。非揮發性條目儲存裝置ST1可以為一唯讀記憶體、可多次編寫記憶體或一一次性可編程芯片(One-time programmable,OTP)。
韌體名單中包含複數個條目(entry)ENT0、ENT1…等等,條目ENT1位於條目ENT1之後。每個條目ENT0、ENT1包含複數個欄位,例如,條目ENT0包含一韌體資訊欄位E01、一安全版本號欄位E02及一公鑰哈希值欄位E03,條目ENT1包含一韌體資訊欄位E11、一安全版本號欄位E12及一公鑰哈希值欄位E13。
於一實施例中,韌體資訊欄位E01的內容包含一韌體FW0的一韌體的長度、一韌體存放地址、一韌體資訊存放地址。韌體資訊欄位E02的內容包含一韌體FW1的一韌體的長度、一韌體存放地址、一韌體資訊存放地址。
於一實施例中,安全版本號欄位E02、E12用以存放一安全版本號,用於防止回滾(roll-back)攻擊。回滾攻擊指的是將已經發生的狀態恢復成它未發生時候的樣子,使得資料或程序執行錯誤。安全版本號是指經過測試或修正的韌體當前版本編號,數字越大代表越新版,若啟動程式執行韌體FW0時,發現韌體FW0的版本編號VS0小於安全版本號欄位E02中的安全版本號,代表韌體FW0錯誤,韌體FW0的版本可能被更動過。
於一實施例中,啟動程式判斷儲存於快閃記憶體中的韌體資訊中的韌體版本VS0是否大於或等於對應之條目中的安全版本號(安全版本號欄位E02的內容)。當啟動程式判斷儲存於快閃記憶體中的韌體資訊中的韌體版本VS0小於對應之條目中的安全版本號時,不執行對應韌體版本的韌體FW0。
於一實施例中,公鑰哈希值欄位E03用以存放一韌體資訊(例如韌體FW0的資訊)中的一公鑰之哈希(Hash)值,公鑰哈希值欄位E13用以存放一韌體資訊(例如韌體FW1的資訊)中的一公鑰之哈希(Hash)值。
於一實施例中,如第2A圖所示的韌體驗證系統100,適用於一安全啟動(secure boot)階段,韌體驗證系統100包含:一唯讀記憶體(ROM,Read-Only Memory)BT、多個微控制器MCU0、MCU1及一非揮發性韌體名單儲存裝置ST1。
於一實施例中,如第2B圖所示,一種韌體驗證系統,適用於一安全啟動階段,韌體驗證系統150包含:一唯讀記憶體(ROM,Read-Only Memory)BT、一微控制器MCU0及一非揮發性韌體名單儲存裝置ST1。
第2B圖與第2A圖的不同之處在於,在第2B圖的韌體驗證系統150中,每個韌體FW0、FW1都位於同一個微控制器MCU0中,微控制器MCU0中的快閃記憶體用以儲存韌體FW0、FW1。
藉此,第2B圖繪示的韌體驗證系統150,僅需要一個微控制器MCU0即可運行多個韌體FW0、FW1。其於細節與第2A圖相同,故不贅述。
於一實施例中,唯讀記憶體BT用以儲存一啟動程式。
於一實施例中,多個微控制器MCU0、MCU1中的韌體可以整合到同一塊儲存裝置ST2上。於一實施例中,儲存裝置ST2可以以快閃記憶體實現之。
於一實施例中,單一個微控制器MCU0中的一或多個韌體可以整合到同一塊儲存裝置ST2上。於一實施例中,儲存裝置ST2可以以快閃記憶體實現之。
於一實施例中,多個微控制器MCU0、MCU1中的韌體可以儲存到不同的儲存裝置,儲存裝置可以以快閃記憶體實現之。
於一實施例中,單一個微控制器MCU0中的一或多個韌體可以儲存到不同的儲存裝置,儲存裝置可以以快閃記憶體實現之。
於一實施例中,微控制器MCU0、MCU1各自亦可以為微控制單元(microcontroller)、微處理器(microprocessor)、數位訊號處理器(digital signal processor)、特殊應用積體電路(application specific integrated circuit,ASIC)或一邏輯電路以實現之。
於一實施例中,微控制器MCU0、MCU1各自包含一快閃記憶體,每個快閃記憶體用以儲存一韌體FW0、FW1,即,微控制器MCU0中的快閃記憶體用以儲存韌體FW0,微控制器MCU1中的快閃記憶體用以儲存韌體FW1。
於一實施例中,微控制器MCU0包含一快閃記憶體,快閃記憶體用以儲存一韌體FW0、FW1,即,微控制器MCU0中的快閃記憶體用以儲存韌體FW0及韌體FW1。
於一實施例中,非揮發性韌體名單儲存裝置ST1用以儲存一韌體名單,韌體名單中包含複數個條目 (例如,條目ENT0、條目ENT1),條目ENT0、條目ENT1各自對應到每個快閃記憶體中所儲存的韌體,例如,條目ENT0對應到韌體FW0,條目ENT1對應到韌體FW1,且每個條目ENT0、ENT1各自包含複數個欄位,例如,條目ENT0包含一韌體資訊欄位E01、一安全版本號欄位E02及一公鑰哈希值欄位E03,條目ENT1包含一韌體資訊欄位E11、一安全版本號欄位E12及一公鑰哈希值欄位E13。
於一實施例中,在安全啟動階段,啟動程式讀取條目ENT0中的韌體資訊欄位E01,以取得韌體FW0的韌體的長度、韌體存放地址、韌體資訊存放地址。
於一實施例中,啟動程式用以讀取條目ENT0、ENT1,並依據每個條目中的欄位的內容,以判斷每個微控制器MCU0、MCU1中的每個韌體FW0、FW1各自的一公鑰的正確性和一數位簽章的正確性。其中,微控制器MCU0、MCU1中各自包含的快閃記憶體用以存放各自的韌體資訊,例如,韌體FW0中包含一韌體資訊,韌體資訊包含數位簽章SIG0、公鑰KY0及韌體版本VS0,韌體FW1中包含一韌體資訊,韌體資訊包含數位簽章SIG1、公鑰KY1及韌體版本VS1。
請參閱第3圖係依照本發明一實施例繪示韌體驗證方法300之流程圖。韌體驗證方法300可以由韌體驗證系統100或韌體驗證系統150實現之。韌體驗證方法300適用於一安全啟動階段。於步驟310中,藉由一唯讀記憶體BT儲存一啟動程式;於步驟320中,藉由多個快閃記憶體各自儲存一韌體(也可以由單一微控制器中的一個快閃記憶體儲存一或多個韌體);其中,此些快閃記憶體各自包含於對應的微控制器中,於步驟330中,藉由一非揮發性韌體名單儲存裝置儲存一韌體名單,韌體名單中包含多個條目;其中,每個條目各自對應到每個快閃記憶體中所儲存的韌體,且每個條目包含多個欄位(也可以是每個條目各自對應到單一快閃記憶體中所儲存的韌體);於步驟340中,藉由啟動程式用以讀取此些條目,並依據每個條目中的此些欄位的內容,以判斷每個微控制器中的每個韌體各自的一公鑰的正確性和一數位簽章的正確性(也可以依據每個條目中的此些欄位的內容,以判斷單一微控制器中的每個韌體各自的一公鑰的正確性和一數位簽章的正確性)。
請參閱第4A~4C圖係依照本發明一實施例繪示韌體驗證方法400之流程圖。第4A~4C圖將更詳細的說明安全啟動階段時進行的韌體驗證方法400。
於步驟401中,啟動程式將一錯誤狀態設定為零。
此步驟可以透過執行事先於啟動程式中寫入的程式碼,以將錯誤狀態設定為零(例如,ErrorStatus=0)。
於步驟402中,啟動程式從非揮發性條目儲存裝置ST1中讀取韌體名單。
於步驟403中,啟動程式讀取韌體名單中的一條目。
於一實施例中,啟動程式事先讀取韌體名單中的所有條目,並統計條目數量。
於一實施例中,啟動程式讀取韌體名單中的所有條目,並找到最後一個條目中的一結束代碼,以得知條目數量。
於步驟404中,啟動程式判斷此條目是否為最後一個條目。
於一實施例中,啟動程式可以由已處理過的條目數量或結束代碼判斷此條目是否為最後一個條目。
於一實施例中,當啟動程式判斷此條目為最後一個條目,則進入步驟411;當啟動程式判斷此條目為最後一個條目,則進入步驟405。
為方便說明,以下以條目ENT0作為非最後一個條目為例,以條目ENT1作為最後一個條目為例。
於步驟405中,啟動程式讀取微控制器MCU0的快閃記憶中所儲存的一第一韌體資訊中的一公鑰KY0,並將公鑰KY0代入哈希函式,以計算出公鑰KY0之哈希值。
於一例子中,第一韌體資訊是微控制器MCU0的快閃記憶中所儲存的韌體資訊,此韌體資訊用以描述韌體FW0。
於步驟406中,啟動程式將計算出的公鑰KY0之哈希值與條目ENT0中的初始公鑰之哈希值相比,啟動程式判斷計算出的公鑰KY0之哈希值與條目ENT0中的初始公鑰之哈希值是否相同。
其中,條目ENT0中的初始公鑰之哈希值儲存於公鑰哈希值欄位E03中。
當啟動程式判斷計算出的公鑰KY0之哈希值與條目ENT0中的初始公鑰之哈希值相同,則判斷公鑰KY0正確,接著執行步驟407。
當啟動程式判斷計算出的公鑰KY0之哈希值與條目ENT0中的初始公鑰之哈希值不相同,則判斷公鑰KY0錯誤,將一公鑰錯誤資訊儲存於第一韌體資訊中,再回到執行步驟403,讀取下一個條目(例如為條目ENT1,啟動程式開始讀取條目ENT1中的韌體資訊欄位E11,以取得韌體FW1的韌體的長度、韌體存放地址、韌體資訊存放地址)。
於步驟407中,啟動程式依據條目ENT0中包含的一第一韌體的長度及一第一韌體存放地址,計算韌體FW0的哈希值。
於步驟408中,啟動程式藉由公鑰KY0解密韌體FW0的一數位簽章SIG0,以得到一解密結果。
於一實施例中,其中,數位簽章SIG0是由將韌體FW0的哈希值以一私鑰加密所產生。此例中的私鑰與公鑰KY0對應,其數學原理是應用非對稱式密碼學。
於步驟409中,啟動程式將韌體FW0的哈希值與解密結果比對。
當韌體FW0的哈希值與解密結果相同,則判斷第一數位簽章正確,執行步驟409。
當韌體FW0的哈希值與解密結果不相同,則判斷韌體FW0內容有錯誤,執行步驟410。
於步驟410中,啟動程式將一韌體錯誤資訊儲存於第一韌體資訊中,例如將錯誤狀態設定為1(例如,ErrorStatus=1),並直接執行步驟403,讀取下一個條目ENT1。
於步驟411中,啟動程式判斷是否所有條目各自對應的韌體資訊欄位中的錯誤數為零,且當啟動程式判斷儲存於快閃記憶體中的韌體資訊中的韌體版本大於或等於對應之條目中的安全版本號。
當啟動程式判斷當所有條目各自對應的韌體資訊欄位中的錯誤數為零,且當啟動程式判斷儲存於快閃記憶體中的韌體資訊中的韌體版本大於或等於對應之條目中的安全版本號時,執行步驟412。
當啟動程式判斷當所有條目各自對應的韌體資訊欄位中的錯誤數不為零,或當啟動程式判斷儲存於快閃記憶體中的韌體資訊中的韌體版本小於對應之條目中的安全版本號時,代表韌體中有錯誤,不執行任何韌體。
其中,步驟411的前一個步驟是步驟404,步驟404是判斷是否最後一個條目已被執行,若是,則進入步驟411,因此在步驟411中,可以知道所有條目各自對應的韌體資訊欄位中的錯誤數及韌體版本。
於步驟412中,啟動程式開始執行所有韌體ENT0、ENT1。執行完則結束流程。
於一實施例中,韌體驗證系統100可以應用於無人機上,因為無人機需要運行飛行應用程式的微控制器,也需要許多微控制器(或感應器)偵測高度、角度跟其他資訊,以此例而言,韌體ENT0例如是無人機上微控制器中的飛行控制主要應用程式,韌體ENT1是無人機上用以判斷角度的另一微控制器的韌體。
由上述可知,安全啟動階段藉由驗證數位簽章來確認微控制器中存放的韌體來源是否正確,韌體本身是否未被篡改。因此,在微控制器上必須存放正確的公鑰以便用於數位簽章的驗證。在實際應用上,微控制器中可存放多個韌體,包括應用程式代碼和第三方函數庫,這些韌體由不同的軟體開發商所發布,便需要有各個開發商的公鑰才能驗證每個不同的韌體。本發明提出的韌體驗證系統及韌體驗證方法,不需要在微控制器中存放多把公鑰。藉由 韌體名單存放韌體相關資料,並配合啟動程式的操作,可以在系統啟動階段,確認每個快閃記憶體中的每個韌體的公鑰和數位簽章的正確性,達成認證多個韌體的安全性之功效。
本發明之方法,或特定型態或其部份,可以以程式碼的型態存在。程式碼可以包含於實體媒體,如軟碟、光碟片、硬碟、或是任何其他機器可讀取(如電腦可讀取)儲存媒體,亦或不限於外在形式之電腦程式產品,其中,當程式碼被機器,如電腦載入且執行時,此機器變成用以參與本發明之裝置。程式碼也可以透過一些傳送媒體,如電線或電纜、光纖、或是任何傳輸型態進行傳送,其中,當程式碼被機器,如電腦接收、載入且執行時,此機器變成用以參與本發明之裝置。當在一般用途處理單元實作時,程式碼結合處理單元提供一操作類似於應用特定邏輯電路之獨特裝置。
雖然本發明已以實施方式揭露如上,然其並非用以限定本發明,任何熟習此技藝者,在不脫離本發明之精神和範圍內,當可作各種之更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
ENT0、ENT1:韌體
E01、E11:韌體資訊欄位
E02、E12:安全版本號欄位
E03、E13:公鑰哈希值欄位
100、150:韌體驗證系統
BT:唯讀記憶體
ST1,ST2:儲存裝置
FW0,FW1:韌體
SIG0,SIG1:數位簽章
KY0,KY1:公鑰
VS0,VS1:韌體版本
MCU0,MCU1:微控制器
300,400:韌體驗證方法
310~340,401~414:步驟
第1圖係依照本發明一實施例繪示韌體名單之示意圖。
第2A圖係依照本發明一實施例繪示韌體驗證系統之示意圖。
第2B圖係依照本發明一實施例繪示韌體驗證系統之示意圖。
第3圖係依照本發明一實施例繪示韌體驗證方法之流程圖。
第4A~4C圖係依照本發明一實施例繪示韌體驗證方法之流程圖。
300:韌體驗證方法
310~340:步驟
Claims (10)
- 一種韌體驗證系統,適用於一安全啟動(secure boot)階段,該韌體驗證系統包含: 一唯讀記憶體(ROM,Read-Only Memory),用以儲存一啟動程式(bootloader); 一微控制器,該微控制器中包含一快閃記憶體(flash memory),該快閃記憶體用以儲存一韌體; 以及 一非揮發性韌體名單儲存裝置,用以儲存一韌體名單,該韌體名單中包含複數個條目(entry);其中,每個條目各自對應到該快閃記憶體中所儲存的該韌體,且每個條目包含複數個欄位; 其中,該啟動程式用以讀取該些條目,並依據每個條目中的該些欄位的內容,以判斷該微控制器中的該韌體的一公鑰的正確性和一數位簽章的正確性。
- 如請求項1之韌體驗證系統,其中,每個條目包含一韌體資訊欄位、一安全版本號欄位及一公鑰哈希值欄位; 其中,該韌體資訊欄位的內容包含一韌體的長度、一韌體存放地址、一韌體資訊存放地址; 其中,該安全版本號欄位用以存放一安全版本號,用於防止回滾(roll-back)攻擊; 其中,該公鑰哈希值欄位用以存放一韌體資訊中的一公鑰之哈希(Hash)值。
- 如請求項1之韌體驗證系統,其中,該微控制器中包含的該快閃記憶體用以存放複數個韌體各自的一韌體資訊,該些韌體資訊各自包含一數位簽章、該公鑰及一韌體版本。
- 如請求項3之韌體驗證系統,其中,該啟動程式判斷儲存於該快閃記憶體中的每一個該些韌體資訊中的該韌體版本是否大於或等於對應之條目中的該安全版本號; 當該啟動程式判斷儲存於該快閃記憶體中的每一個該些韌體資訊中的該韌體版本小於對應之條目中的該安全版本號時,不執行對應該韌體版本的該韌體。
- 如請求項1之韌體驗證系統,其中,該些條目包含一第一條目與一第二條目,該第二條目位於該第一條目之後,該第一條目中包含一第一初始公鑰哈希值欄位,該第一初始公鑰哈希值欄位中儲存一第一初始公鑰哈希值,該第二條目中包含一第二初始公鑰哈希值欄位,該第二初始公鑰哈希值欄位中儲存一第二初始公鑰哈希值; 其中,在該安全啟動階段,該啟動程式讀取該第一條目中的一第一韌體資訊欄位,以取得一第一韌體的長度、一第一韌體存放地址、一第一韌體資訊存放地址。
- 如請求項5之韌體驗證系統,其中,該啟動程式讀取一第一韌體資訊中的一第一公鑰,並將該第一公鑰代入哈希函式,以計算出一第一公鑰之哈希值,再將計算出的該第一公鑰之哈希值與該第一條目中的該第一初始公鑰之哈希值相比; 當計算出的該第一公鑰之哈希值與該第一條目中的該第一初始公鑰之哈希值相同,則判斷該第一公鑰正確; 當計算出的該第一公鑰之哈希值與該第一條目中的該第一初始公鑰之哈希值不相同,則判斷該第一公鑰錯誤,該啟動程式將一公鑰錯誤資訊儲存於該第一韌體資訊中,並直接讀取該第二條目。
- 如請求項6之韌體驗證系統,其中,當該啟動程式判斷計算出的該第一公鑰之哈希值與該第一條目中的該第一初始公鑰之哈希值相同,該啟動程式依據該第一條目中包含的該第一韌體的長度及該第一韌體存放地址,計算該第一韌體的哈希值,再用該第一公鑰解密該第一韌體的一第一數位簽章,以得到一解密結果,將該第一韌體的哈希值與該解密結果比對; 當該第一韌體的哈希值與該解密結果相同,則判斷該第一數位簽章正確; 當一第二韌體的哈希值與該解密結果不相同,則判斷該第一韌體內容有錯誤,該啟動程式將一韌體錯誤資訊儲存於該第一韌體資訊中,並直接讀取該第二條目。
- 一種韌體驗證方法,適用於一安全啟動(secure boot)階段,該韌體驗證方法包含: 藉由一唯讀記憶體(ROM,Read-Only Memory)儲存一啟動程式(bootloader); 藉由一快閃記憶體(flash memory)儲存一韌體;其中,該快閃記憶體包含於一微控制器中; 藉由一非揮發性韌體名單儲存裝置儲存一韌體名單,該韌體名單中包含複數個條目(entry);其中,每個條目各自對應到該快閃記憶體中所儲存的該韌體,且每個條目包含複數個欄位;以及 藉由該啟動程式用以讀取該些條目,並依據每個條目中的該些欄位的內容,以判斷該微控制器中的該韌體的一公鑰的正確性和一數位簽章的正確性。
- 如請求項8之韌體驗證方法,其中,該啟動程式判斷當所有條目各自對應的韌體資訊欄位中的錯誤數為零,且當該啟動程式判斷儲存於該快閃記憶體中的該韌體資訊中的該韌體版本大於或等於對應之條目中的該安全版本號時,對應該韌體版本的該韌體才能被執行。
- 一種韌體驗證系統,適用於一安全啟動(secure boot)階段,該韌體驗證系統包含: 一非揮發性韌體名單儲存裝置,用以儲存一韌體名單,該韌體名單中包含複數個條目(entry);其中,每個條目各自對應到一微控制器中的一快閃記憶體中所儲存的一韌體,且每個條目包含複數個欄位; 其中,一啟動程式用以讀取該些條目,並依據每個條目中的該些欄位的內容,以判斷該微控制器中的每個韌體各自的一公鑰的正確性和一數位簽章的正確性。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW110149524A TWI797932B (zh) | 2021-12-30 | 2021-12-30 | 韌體驗證系統及韌體驗證方法 |
CN202211075991.0A CN116415225A (zh) | 2021-12-30 | 2022-09-02 | 固件验证***及固件验证方法 |
US17/965,165 US20230214491A1 (en) | 2021-12-30 | 2022-10-13 | Firmware verification system and firmware verification method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW110149524A TWI797932B (zh) | 2021-12-30 | 2021-12-30 | 韌體驗證系統及韌體驗證方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI797932B TWI797932B (zh) | 2023-04-01 |
TW202326488A true TW202326488A (zh) | 2023-07-01 |
Family
ID=86945044
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110149524A TWI797932B (zh) | 2021-12-30 | 2021-12-30 | 韌體驗證系統及韌體驗證方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230214491A1 (zh) |
CN (1) | CN116415225A (zh) |
TW (1) | TWI797932B (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8812854B2 (en) * | 2009-10-13 | 2014-08-19 | Google Inc. | Firmware verified boot |
US9721101B2 (en) * | 2013-06-24 | 2017-08-01 | Red Hat, Inc. | System wide root of trust chaining via signed applications |
CN102339227A (zh) * | 2010-07-28 | 2012-02-01 | 环旭电子股份有限公司 | 多固件嵌入式***及其固件更新方法 |
US9959125B2 (en) * | 2015-08-05 | 2018-05-01 | Samsung Electronics Co., Ltd. | Field update of boot loader using regular device firmware update procedure |
US10049218B2 (en) * | 2016-12-07 | 2018-08-14 | Google Llc | Rollback resistant security |
CN109214168B (zh) * | 2018-08-27 | 2020-08-18 | 阿里巴巴集团控股有限公司 | 固件升级方法及装置 |
US10956576B2 (en) * | 2018-09-06 | 2021-03-23 | Micron Technology, Inc. | Secure boot via system and power management microcontroller |
TWI788594B (zh) * | 2019-10-07 | 2023-01-01 | 系微股份有限公司 | 安全執行可延伸韌體應用程式的方法及計算機設備 |
-
2021
- 2021-12-30 TW TW110149524A patent/TWI797932B/zh active
-
2022
- 2022-09-02 CN CN202211075991.0A patent/CN116415225A/zh active Pending
- 2022-10-13 US US17/965,165 patent/US20230214491A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230214491A1 (en) | 2023-07-06 |
CN116415225A (zh) | 2023-07-11 |
TWI797932B (zh) | 2023-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10740468B2 (en) | Multiple roots of trust to verify integrity | |
CN101657792B (zh) | 可信部件更新***和方法 | |
CN100454322C (zh) | 具有启动验证功能的信息处理装置 | |
US11829479B2 (en) | Firmware security verification method and device | |
US20110246778A1 (en) | Providing security mechanisms for virtual machine images | |
TW201516733A (zh) | 用以核對uefi認證變量變化之系統及方法 | |
US10181956B2 (en) | Key revocation | |
US10803176B2 (en) | Bios security | |
US10853472B2 (en) | System, apparatus and method for independently recovering a credential | |
TWI570591B (zh) | 允許測試金鑰用於bios安裝之技術 | |
CN109814934B (zh) | 数据处理方法、装置、可读介质和*** | |
CN112148314B (zh) | 一种嵌入式***的镜像验证方法、装置、设备及存储介质 | |
CN111095200A (zh) | 嵌入式程序的安全升级方法、装置、设备及存储介质 | |
TWI760752B (zh) | 應用加速驗證映像檔方法的系統 | |
CN114003915A (zh) | 基于芯片的安全启动方法及装置 | |
JP6744256B2 (ja) | 確認システム、制御装置及び確認方法 | |
TWI797932B (zh) | 韌體驗證系統及韌體驗證方法 | |
TW202318196A (zh) | 韌體映像檢查系統、韌體映像檢查方法及電腦系統 | |
KR20190118894A (ko) | 안전한 usb 장치를 보장하는 부트 방법 | |
TW202022660A (zh) | 映像檔打包方法及映像檔打包系統 | |
US20240193275A1 (en) | Electronic device and secure booting method thereof | |
US20240070329A1 (en) | Applying trusted backup configuration to a node | |
JP2023026017A (ja) | 起動検証プログラム、情報処理装置および起動検証方法 | |
US20220400004A1 (en) | Generating keys | |
KR20230130413A (ko) | Etcs와 관련된 보안 방법 |