系統安全基石IP-OTPC :OTPC的概述與工作原理
前言
OTP是為設備提供一次性編程功能的模塊。
這種編程的結果是非易失性的,并且與閃存不同,無法逆轉。OTP功能通過開源OTP控制器和專有OTP IP構建。
OTP控制器提供:
?一個開源抽象接口,軟件可以使用它與下面的專有OTP塊進行交互。
?一種開源抽象接口,硬件組件(例如生命周期控制器和密鑰管理器)可以使用該接口與下面的專有OTP塊進行交互。
?高級邏輯安全保護,如完整性檢查和對敏感內容的加擾。
? OTP內容可讀和可編程時的軟件隔離。
專有OTP IP提供:
?可靠的非易失性存儲。
?技術特定的冗余或糾錯機制。
?物理防御特征,如SCA和FI抵抗。
OTP控制器和IP一起提供了在設備的整個生命周期(LC)中使用的安全一次性編程功能。
特征
?底層OTP IP的多個邏輯分區
?每個分區都可鎖定并檢查完整性
?完整性摘要存儲在每個邏輯庫旁邊
?OTP值的定期/持續檢查
?定期檢查陰影內容與摘要
?定期檢查OTP存儲的內容和陰影內容
?持續檢查即時錯誤
?獨立的生命周期分區和與生命周期控制器的接口
?支持生命周期功能,但不能被完整性鎖定
?使用全局網表常量對秘密OTP分區進行輕量級加擾
?用于RAM加擾機制的輕量級短暫密鑰派生功能
?FLASH加擾機制的輕量級密鑰推導功能
OTP控制器概述
OTP的功能分為開源和閉源兩部分,兩者之間有明確的邊界,如下面簡化的高級框圖所示。
在這里插入圖片描述
開源控制器的任務是為OTP用戶提供一個通用的、非技術特定的接口,該接口具有通用寄存器接口和明確定義的硬件I/O接口。
開源控制器實現了OTP存儲的邏輯隔離和分區,使用戶可以將OTP的不同功能劃分為具有不同屬性的“分區”。
最后,
?開源控制器通過為每個分區提供完整性摘要,
?并在需要時對分區進行加擾,
?為特定分區提供了高級別的安全性。
另一方面,專有IP將通用訪問接口轉換為技術特定的OTP接口,用于功能訪問和調試訪問(例如對宏內部控制結構的寄存器訪問)。
這種分離意味著每個專有的OTP IP都必須實現從標準化OpenTitan接口到底層模塊的轉換層。
這也意味著,無論OTP存儲或文字大小在下面如何變化,開源控制器都必須提供一致和連貫的軟件和硬件接口。
這個標準化接口將在下文中進一步定義,包裝器利用OpenTitan其他部分中使用的相同技術原始機制來包裝和抽象可能是閉源的技術特定宏(如存儲器和時鐘單元)。
工作原理
從概念上講,OTP功能處于高級,分為“前端”和“后端”。
?“前端”包含邏輯分區,這些分區為系統的硬件和軟件使用者接口提供信息。
?“后端”表示硬件和軟件組件用來存儲即將到來的值的編程接口。
下圖說明了這種行為模型。
在這里插入圖片描述
請注意,前端同時包含緩沖分區和非緩沖分區。
每個電源循環感應一次緩沖分區,并將其內容存儲在寄存器中,而按需讀取未緩沖分區。
前者通常是包含硬件配置位、關鍵材料和生命周期狀態等數據的分區,這些數據需要始終可用于硬件,
而后者是很少訪問的大型分區,例如軟件配置。
通過編程接口(與讀取驗證相結合)編程到緩沖分區中的值只是“暫存”的,直到下一次電源循環才生效。
下面的部分描述了OTP控制器的各個部件的操作以及它如何支持所描述的功能。
Logical Partitions
OTP在邏輯上被劃分為表示不同功能的分區。這意味著隔離是虛擬的,由OTP控制器而不是底層OTP IP來維護。
在每個邏輯分區中,都有特定的可執行屬性:
?通過秘密分區進行保密
?這控制特定分區是否包含機密數據。
?如果分區是秘密的,那么一旦鎖定,軟件就無法讀取分區,并在存儲中進行加擾。
?讀取鎖定能力
?這控制特定分區是否禁用后期軟件的軟件可讀性。
?一些分區可以靜態鎖定(通過在OTP中計算和存儲相關摘要),其他分區可以在運行時通過CSR讀取鎖定。
?寫入鎖定能力
?這控制分區是否被鎖定并阻止將來更新。
?鎖定分區與摘要一起存儲,以便稍后用于完整性驗證。
?完整性驗證
?一旦分區通過計算并向其寫入非零摘要而被寫鎖定,它就可以進行周期性驗證(時間范圍可由軟件配置)。這種驗證有兩種形式,分區完整性檢查和存儲一致性檢查。
由于OTP本質上類似于存儲器(每個地址位置只輸出一定數量的位),一些邏輯分區被緩沖在寄存器中,用于硬件的即時和并行訪問。
這是一個關鍵點,因為在通電之后,這些特定的OTP內容被存儲在觸發器中并來源于系統。
也就是說,緩沖分區不是直接來自OTP宏本身。因此,易失性存儲器(OTP控制器)和非易失性存儲(OTP IP)的安全性變得重要。
分區列表和描述
OpenTitan的OTP控制器包含如下所示的七個邏輯分區。
在這里插入圖片描述
一般來說,設備的生產生命周期分為5個階段“制造”->“校準和測試”->“供應”->“任務”->“RMA”。OTP值通常在“校準和測試”、“供應”和“RMA”階段進行編程,
校準和測試-Calibration and Test
在此階段,對設備進行功能測試和校準,以確保一致性。
校準可以集中在許多事情上,但通常以調整時鐘、電壓和定時源為中心,以消除工藝變化。
這些校準值被編程到CREATOR_SW_CFG分區中,因為它們是非機密值,旨在由軟件讀出并編程到相應的外圍設備中。
在這個階段的早期,各種tokens 也被編程到秘密分區中,并由芯片廠商創造者讀出使用。
預配置-Provisioning
在此階段,為設備提供最終固件和“唯一”種子或標識。
秘密分區填充有根秘密和密鑰,這些密鑰對建立設備標識至關重要。
作為注入最終固件的一部分,還對庫存單元特定的硬件和軟件配置進行了編程。
生命周期劃分-Life Cycle Partition
生命周期分區在所有階段都是活動的,因此它是唯一不能鎖定的分區。
設備完成供應并投入生產后,必須保留在發生意外故障時轉換回RMA的能力。
為了支持這種轉換,生命周期狀態和計數器必須始終是可更新的。
生命周期控制器是芯片互連總線上的外圍設備模塊,因此遵循可組裝性規范。
生命周期實施是指包含所有生命周期功能的設計。這涉及以下模塊的功能,這些模塊未按特定順序列出:
?The life cycle controller itself - A new peripheral
?The key manager
?The flash controller
?The OTP controller
?The reset / power controller
?The debug infrastructure, specifically TAP isolation
?Any other peripheral where life cycle information may alter its behavior
生命周期控制器提供以下功能:
?專用OTP接口,用于讀取和更新冗余編碼的設備生命周期狀態。
? CSR和JTAG接口,用于啟動生命周期轉換。
?冗余生命周期狀態的專用并行解碼和冗余編碼的生命周期資格信號的廣播(例如,啟用DFT功能或主處理器)。
?一種令牌哈希和匹配機制,用于保護重要的生命周期轉換。
?警報子系統的升級接收器,它允許作為升級序列的一部分使生命周期狀態無效(另請參閱警報處理程序子系統)。
Locking a Partition
當軟件確定不再對某個分區進行任何更新時,對該分區的寫入訪問可以被永久鎖定。
為了鎖定,完整性常數與該分區的其他數據一起計算和編程。
完整性常數的大小取決于分區大小顆粒,是32位還是64位(另請參閱直接訪問內存映射)。
一旦“完整性摘要”為非零,就不允許進行進一步的更新。如果分區是秘密的,軟件將無法再讀取其內容(請參閱秘密分區描述)。
但是,請注意,在所有分區中,摘要本身總是可讀的。這使軟件有機會確認鎖定操作是否正確進行,如果沒有,則立即報廢零件。
完整性摘要的計算取決于分區是否需要定期的后臺驗證。
供應商測試分區
供應商測試分區旨在用于制造流程中的OTP編程冒煙檢查。
芯片供應商可以在prim_otp包裝器的專有版本中實現這些檢查。
此分區的行為與任何其他SW分區類似,但ECC不可糾正的錯誤不會像在所有其他分區中那樣導致致命錯誤/警報。
這是由于OTP編程煙霧檢查的性質,這可能使某些OTP字處于與OTP讀出時使用的ECC多項式不一致的狀態。
Software Configuration Partitions
軟件配置分區用作標志、配置和校準數據的非易失性存儲器。
因此,作為代碼執行的一部分,這個分區的內容通常被消耗一次,或者被移動到設計中的另一個存儲隔間。
例如,時鐘校準值和LDO校準值在啟動時編程到模擬傳感器頂部(AST)。
因此,沒有必要在OTP源處定期檢查。相反,軟件可以簡單地作為安全引導的一部分進行檢查,并在將這些值編程到外圍設備中時采取其他措施。
因此,對于該分區,軟件有責任計算完整性摘要并將其編程到OTP中。在主內存中對該分區(部分)進行陰影處理也是合理的,并且OTP內容不會對硬件產生直接影響。
Hardware Configuration and Secret Partitions
硬件和秘密分區直接影響下游硬件。
內容必須經過定期的完整性檢查,因此當軟件提供鎖定意圖時,存儲的摘要由硬件計算(而不是必須由軟件計算摘要的軟件分區)。
生命周期劃分
生命周期分區無法鎖定,因此不會包含存儲的摘要。然而,請注意,只有生命周期控制器可以訪問該分區,即,直接訪問接口(DAI)不能從生命周期分區讀取或寫入。
Secret vs Non-Secret Partitions
非機密OTP分區保存可以公開的數據;或對安全性沒有影響的數據。例如,鎖定位的當前值或時鐘校準值。這些值以明文形式存儲在OTP中。
機密分區包含對安全至關重要的數據,例如FLASH加擾密鑰、設備根機密和解鎖令牌。這些值被加擾地存儲在OTP中,并且在讀取時被解擾。目前使用的密碼是PRESENT,因為它很適合迭代分解,而且它是一種已被證明的輕量級分組密碼(另請參閱PRESENT加擾原語。然而,分組密碼的使用意味著秘密分區只能寫入64位塊。
此外,特定秘密分區的內容一旦被鎖定就不能被軟件讀取(除了必須始終可讀的摘要之外);而非秘密分區總是可讀的,除非軟件明確地去除讀取可訪問性。
不幸的是,機密分區必須使用全局網表密鑰進行加擾操作,因為沒有其他非易失性存儲器來存儲唯一密鑰。
Partition Checks
Integrity
一旦鎖定了適當的分區,硬件完整性檢查器就采用兩種完整性檢查來驗證易失性緩沖寄存器的內容:
?所有緩沖分區都有額外的ECC保護(每個64位塊有8位ECC),同時進行監控。
?分區的摘要以半隨機間隔重新計算,并與存儲在分區旁邊的摘要進行比較。
此檢查的目的不是在存儲觸發器和OTP之間進行檢查,而是檢查緩沖寄存器內容是否與計算的摘要保持一致。此驗證主要關注存儲觸發器是否經歷過故障攻擊。此檢查僅適用于HW_CFG和SECRET*分區。
如果遇到故障,OTP控制器將發出致命檢查錯誤警報-fatal_check_error,并將其所有硬件輸出重置為默認值。
Storage Consistency
這種驗證確保存儲在緩沖寄存器中的值與OTP中的值保持一致。
該過程以半隨機間隔重新讀取OTP,并確認讀取的值與存儲的值相同。
注意,如果存在并行的完整性檢查,則某些分區沒有必要檢查所有讀取內容的一致性。
如果存在完整性摘要,則只需要讀取該摘要;否則,必須讀取所有值。
Secret Partition Integrity Checks-秘密分區完整性檢查
由于秘密分區是加擾存儲的,這也意味著完整性摘要是在加擾形式上計算的。
為了平衡所需的緩沖寄存器數量,緩沖寄存器中只保存秘密分區的解密形式。
硬件通過在通過摘要之前對數據進行重新加擾來計算摘要。
Power-up and Sense
重置釋放時,OTP控制器分區存儲必須輸出指定的安全默認值(它不像空白OTP那樣總是0)。此默認輸出必須保持,直到OTP控制器完成所有檢查。
OTP控制器讀取OTP IP。如果讀取通過OTP IP內部檢查(例如ECC或冗余),則更新分區存儲;然而,輸出仍然經由輸出mux保持在默認狀態。
在所有讀取完成后,OTP控制器對HW_CFG和SECRET*分區執行完整性檢查。
如果分區在這一點上沒有通過完整性檢查,它將在狀態CSR中發出初始化錯誤的信號,并中止進一步的初始化。
在所有完整性檢查完成后,OTP控制器釋放輸出門控并將輸出標記為有效。但是,任何標有“error”的分區都會繼續將其輸出保持在默認狀態。
一旦完成上述步驟,緩沖寄存器中的分區存儲就不會再次更新(通過生命周期接口更新生命周期分區除外)。也就是說,通過編程接口編程到OTP的值在下一次電源循環之后才會在緩沖寄存器中可見。
在這一點上,分區存儲的輸出預計不會改變,除非定期檢查突然失敗。發生此故障時,所有輸出都將恢復到默認狀態,并立即向警報處理程序觸發警報。
出于定時目的,OTP輸出可以被視為半靜態,因為這種錯誤事件應該是罕見和特殊的。
Partition Defaults
分區默認值是特定于上下文的。例如,鎖定特定訪問的硬件配置項應默認為“無訪問”。這確保了對OTP的故障攻擊不能輕易地將設計恢復到不安全狀態。
因此,這表明,當OTP都是0和1時,它應該盡可能在受影響項目的編碼空間中反映無效或惰性狀態。這也意味著使用代理的重置狀態(例如密鑰管理器和生命周期)也應默認為無效/惰性狀態。
Program and Read Ports
如前所示,OTP分為前端和后端。后端接口主要用于更新OTP內容,并讀取以進行調試和驗證。盡管是與邏輯分區分離的功能訪問端口,但程序和讀取端口受到相同的訪問控制。
當分區被寫鎖定時,編程訪問被禁止。如果分區是秘密的,則后端接口的讀取訪問也被禁止(摘要必須始終可讀)。軟件還可以通過CSR設置禁用對軟件配置分區的任何讀取訪問,以防止后期軟件讀取任何內容。
上述情況的例外是生命周期分區。生命周期控制器接口還充當“后端”接口,始終具有編程訪問權限,以確保生命周期狀態可以提前。
請注意,程序和讀取端口可能與正在進行的后臺存儲檢查沖突,OTP控制器在這兩方之間進行仲裁。將始終完成正在進行的操作。之后,或者當兩個請求同時到達時,優先級為生命周期>編程接口>通過CSR窗口的按需讀取訪問>背景檢查。
Programming the OTP
OTP控制器有兩條編程路徑:
?通過軟件的功能編程路徑(程序端口),
?通過硬件的生命周期編程路徑。
功能接口用于更新除生命周期之外的所有分區。如前所述,在下一次重新啟動之前,當前電源周期中進行的任何更新都不會反映在緩沖分區中。
生命周期接口僅用于更新生命周期狀態和轉換計數器。命令是從生命周期控制器發出的,類似地,成功或失敗的指示也被發送回生命周期控制器。與功能接口類似,生命周期控制器每個電源周期只允許一次更新,并且在請求的轉換之后恢復到惰性狀態,直到重新啟動。
請注意,req/ack協議在OTP時鐘上運行。擾頻設備的任務是通過實例化prim_sync_repack.sv原語來同步握手協議,如下所示。
在這里插入圖片描述
OTPC對接的信號
?EDN Interface(隨機數熵,之前我們發過哦)
?Power Manager Interface
?Life Cycle Interfaces
?Interface to Key Manager(OTP里面存儲了一些密鑰,肯定要使用到Key Manager)
? Interface to Flash Scrambler 到FLASH加擾設備的接口是一個簡單的req/ack接口,該接口為閃存控制器提供用于數據和地址加擾的兩個128位密鑰。用來加擾解擾內存
在這里插入圖片描述
?Interfaces to SRAM and OTBN Scramblers
-
控制器
+關注
關注
112文章
16334瀏覽量
177814 -
編程
+關注
關注
88文章
3614瀏覽量
93686 -
OTP
+關注
關注
4文章
201瀏覽量
47144
原文標題:工作原理
文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論