使用外接式加密 EEPROM 保護嵌入式系統中的資料
資料提供者:DigiKey 北美編輯群
2019-01-17
有些微控制器配有晶片上 EEPROM。此架構可提供非揮發性資料記憶體,同時節省板空間。然而,隨著資料安全性越趨重要,許多現代化嵌入式系統都需要一種實用的方法,利用非揮發性記憶體來安全地儲存資料,同時抵禦外部駭客的入侵。
本文將說明單晶片安全 EEPROM 如何安全儲存非揮發性資料以抵禦駭客的入侵,且無需涉及加密技術的細節資訊。本文將採用知名供應商提供的安全 EEPROM 為例,說明其運作原理和應用方法。
有關安全 EEPROM 的需求
非揮發性資料記憶體 (通常稱為 EEPROM) 讓許多嵌入式系統都受益匪淺。EEPROM 可在韌體控制下進行讀寫,並可在系統斷電時維持其狀態,反之 RAM 則會在斷電時失去狀態。
雖然微控制器的 EEPROM 能有效儲存必須在斷電時保留的程式資料,但在安全弱點上通常與 RAM 相同。在某些現代化 8 位元、16 位元及 32 位元微控制器中,皆有安全方法可避免資料記憶體區域在韌體控制下遭到讀取,或是阻擋除錯器等外部介面讀取資料。在以往,這種安全措施或許還算堪用,但如今,在駭客可能擁有資金、時間、動機和資源的情況下,即可繞過這些措施,來獲取關鍵系統的存取權。
隨著現代化嵌入式系統日益演進,許多應用如今都需要更強大的資料保護功能。對於某些 IoT 節點、保全系統、車對車通訊、現代醫療器材和自駕車而言,更是如此。此外,若是要避免系統遭到複製,資料安全性也是不可或缺的因素。在某些應用中,駭客惡意攻擊成功會造成 EEPROM 資料受損,進而導致財產損失或更糟糕的狀況。
在此類情況下,就需要有更強大防禦能力的 EEPROM,才能抵禦擁有大量資源的駭客。高安全性的 EEPROM 可輕鬆對密碼、複製雜湊、指紋資料、感測器校正資訊及生物辨識數據等敏感資料進行加密,因此能妥善因應上述狀況。
Microchip Technology 已透過一系列 CryptoAuthentication™ 裝置解決這個設計問題。如果您對這些裝置頗為耳熟,那是因為 Microchip 在購併 Atmel 後將此系列納入自家產品。ATAES132A 32 KB 安全 EEPROM 就是此系列的一個裝置 (圖 1)。
圖 1:ATAES132A 32 KB 序列 EEPROM 採用特殊的安全性功能設計,可保護資料和內部暫存器。(圖片來源:DigiKey)
ATAES132A 的使用方式與標準 32 KB 序列 EEPROM 相同。此裝置採用標準的 SPI 和 I2C 引腳配置,因此可取代現有設計的標準序列 EEPROM,而無須改動硬體。現有設計只需修改應用程式韌體,即可輕鬆升級,享有額外的安全性。
不過,此裝置還具備重要的實體保護、加密以及其他融入設計的安全性功能。啟用這些功能後,即可保護 EEPROM 資料和內部暫存器,以免遭到絕大多數駭客入侵,但意圖堅定的駭客除外。可利用具備多達 16 個 128 位元金鑰的軍事級 AES 加密功能來保護資料。
實體保護
首先,ATAES132A 具備眾多機械安全性機制,可預防裝置遭到實體反向工程。此裝置對環境溫度的特定變化相當敏感,例如會嘗試讓裝置「深度凍結」,以維護記憶體內容等。此裝置可偵測到嘗試露出晶粒的脫蓋動作。晶粒覆有金屬外罩,若取下,晶粒會在偵測到光線後啟動機制來銷毀記憶體內容。
最後,內部記憶體內容會進行加密。此外,此裝置還可能包含僅有 Microchip 工程人員知道的非公開安全機制,Microchip 將這些安全機制的細節視為機密。這可讓安全記憶體享有多種實體安全性,因此開發人員無需構建複雜的外殼,就能為 EEPROM 設下屏障。
啟動後,可將 ATAES132A 設定為以 SPI 或 I2C 介面介接至大部分微控制器。在 I2C 模式下使用時,晶片選擇引腳並不會使用,且必須連接電源或接地。在設定為 SPI 模式時,晶片選擇引腳會照常使用。
AES 資料加密
在 ATAES132A 上,加密將透過 AES-CCM 和 128 位元金鑰實現。簡而言之,要加密的資料會由一系列複雜的數學函數進行處理,並在處理過程中與韌體開發人員編程的一個 128 位元數字進行組合。在 AES 加密和解密操作期間執行的複雜數學運算全部由 ATAES132A 完成,除了設定一些變數和挑選 128 位元金鑰外,此過程對韌體開發人員來說完全透明,能大幅簡化產品的開發工作。
ATAES132A 記憶體對應
此裝置可單純當作標準的非加密序列 EEPROM 使用。不過,若開發人員想使用進階安全功能,則裝置的架構與使用方式會有很大差異。若要瞭解 ATAES132A,最快的方式就是查看記憶體對應,且比標準 EEPROM 的記憶體對應更為深入,如表 1 所示。
|
表 1:ATAES132A 記憶體對應比標準序列 EEPROM 更為深入。(資料來源:Microchip Technology)
此記憶體對應中的大部分位置,都是使用標準 I2C 或 SPI 命令進行讀取或寫入。
EEPROM 與區域安全組態暫存器
此 32 KB 資料 EEPROM 記憶體分為 16 個 2 KB 區域。每個記憶體區域可單獨設定是否具備安全性。在區域安全組態暫存器的區域中,可設定所有 16 個記憶體區域的安全性設定。可針對所有 16 個 2 KB 區域單獨設定的基本安全性設定如下所示:
- 啟用/停用資料讀取加密功能
- 啟用/停用資料寫入加密功能
- 啟用/停用資料讀取驗證功能
- 啟用/停用資料寫入驗證功能
- 將區域永久設定為唯讀
這些設定可在設定應用的安全性時提供極高的靈活性。可將一個區域設定為無加密、無讀/寫存取驗證,即可像標準 EEPROM 一樣進行讀寫。另一個區域則可設定為需要完全加密和驗證,從而為敏感資料提供高度安全性。
裝置組態暫存器
裝置的一般行為會在裝置組態暫存器區域中設定。此區域亦包含裝置的一些唯讀資訊,包括用來識別裝置的唯一 32 位元裝置序號。其他暫存器則可將記憶體區域或其他暫存器設為唯讀,這動作稱為記憶體鎖定。一旦暫存器或記憶體區域鎖定後,就會永久鎖定無法解除。
此外,此區域還有 I2CAddr 暫存器,可針對裝置設定其是要以 I2C 還是 SPI 模式使用。裝置啟動後,會對 1 位元組的 I2CAddr 暫存器進行寫入。I2CAddr 的位元 0 會決定序列介面模式。若韌體寫入 0,則會將裝置設為 SPI 模式。若寫入 1,則會選取 I2C 模式。若選取 I2C 模式,則 7 位元裝置位址為 50h。
命令和回應記憶體緩衝器
雖然可以使用標準 SPI 或 I2C 定址來存取裝置中的記憶體位置,但裝置亦可接受類似於微控制器的命令。命令及其運算元 (稱為命令區塊) 可能為一或多個位元組,且一律會直接寫入至位址為 FE00h 的命令和回應記憶體緩衝器。命令區塊包括一個單位元組指令、一或多個位元組運算元,以及一個 2 位元組核對和。
可用的命令包括資料數據、EPROM 區域的區塊讀數、累加計數器,以及直接讀取任何需要驗證的受保護記憶體或暫存器。命令回應會從同一位置 FE00h 讀回。所有針對 FE00h 的寫入,皆為傳送至命令記憶體緩衝器的命令。所有針對 FE00h 的讀取,皆為來自回應記憶體緩衝器的讀取。
位於 FFE0h 的 I/O 位址重置暫存器是僅限寫入的暫存器,用於重置命令與回應記憶體緩衝器。將任何值寫入到 FFE0h 時都會執行兩項作業:清除命令記憶體緩衝器以便接受新的命令區塊;將回應記憶體緩衝器重置為零,以便從頭讀取內容。
重置回應記憶體緩衝器能讓韌體重新讀取整個回應。當發生中斷而主機微控制器正在讀取回應記憶體緩衝器時,以及從中斷返回後需要重新讀取資料時,此做法非常有用。
此外,還有一些命令可針對 EEPROM 的讀寫進行 AES 加密與解密。這些運算極為複雜,不在本文的討論範圍內。不過,Microchip 提供的微控制器驅動程式和韌體可輕鬆執行所有這些功能,因此程式設計人員只要具備最低限度的 AES 加密知識,即可運用自如。
區域計數暫存器
此暫存器區域包含 16 個與個別區域相關的唯讀計數器。每個記憶體區域皆使用其 128 位元區域金鑰進行加密或解密。每次使用區域金鑰時,會根據關聯的區域計數組態暫存器的設定,來決定是否累加相關的 32 位元區域計數器。基於安全性考量,計數器永遠不會遞減或重置。
韌體可直接對區域計數器進行寫入,將其累加至初始值,但絕不可低於現有的計數值。區域計數器可在製造過程中進行寫入和鎖定,以限制計數數量。若計數器已達到 2,097,151 的最大值,則可永久停用關聯的金鑰,以避免在後續的加密或解密操作中使用此金鑰。這對於有限使用金鑰非常有用,譬如即可讓微控制器韌體以有限次數重新刷新。
若要達到額外安全性,每個 32 位元區域計數器都是完全一樣的。如此一來,若在累加區域計數器的過程中發生斷電,便可偵測到區域計數器是否受損。應用啟動後,韌體應讀取所有區域計數器的兩個計數值。如果在某個完備的應用中,這兩個值有差異,則證明有未授權的斷電事件,而這可能表示有人在未經授權的情況下試圖在運作期間停用應用安全功能。
狀態暫存器
ATAES132A 狀態暫存器是唯讀暫存器,用於指示各種錯誤代碼,包括不正確的核對和以及命令錯誤等等。此外,還可指出 ATAES132A 是處於 I2C 模式還是 SPI 模式,以及命令處理進度和回應有效性。在執行所有讀取、寫入、命令和回應的前後,皆會讀取狀態暫存器。若發生錯誤,則表示有人試圖從外部干擾主機微控制器與 ATAES132A 間的 I2C 或 SPI 連線。主機韌體會判斷並採取適當行動,例如警示操作人員或發出警報聲。
在製造過程中設定 ATAES132A
ATAES132A 裝置的安全性應在最終產品的製造過程中進行設定。為了降低設定錯誤的機率,應在處於系統內部時設定 ATAES132A。首先應設定所有的初始計數器值和計數器設定。接著再對金鑰和加密參數進行編程。最後再對所有的初始 EEPROM 值進行編程。唯一的 32 位元裝置序號可從 ATAES132A 進行讀取,以將其整合至主機微控制器韌體。
建議回讀所有已編程的 EEPROM 值,以確保正確設定 ATAES132A。若有任何值未能正確回讀,或者狀態暫存器指出核對和或命令有誤,則應標示最終產品並將其從生產作業中移除。若有足夠的備用 EEPROM,則可選擇是否進行加密與解密測試。
ATAES132A 的開發
為協助開發,Microchip 提供了 DM320109 Xplained-Pro CryptoAuthentication 入門套件 (圖 2)。ATAES132A 可介接 Microchip 的 ATSAMD21J18A Arm® Cortex®-M0+ 微控制器。
圖 2:Microchip 的 DM320109 Xplained CryptoAuthentication 入門及開發套件能輕鬆評估和開發 ATAES132A 程式碼。此套件提供大量的程式碼範例,並可介接大多數支援 Windows、Linux 或 MacOS 的電腦。(圖片來源:Microchip Technology)
Microchip 的 ATSAMD21J18A 微控制器配備 USB 介面,可連接 PC 開發環境。此微控制器支援 I2C 和 SPI 介面,無論何者均可用於介接 ATAES132A。在使用隨附的 USB 纜線連接目標 PC 後,即可使用此套件來設定和監控所有 ATAES132A 功能。
此套件提供備用 USB 纜線,可監控和記錄 ATAES132A 與 ATSAMD21J18A 之間的數據封包。此纜線一端連接 Xplained 板,另一端連接 PC 上的 USB 連接埠。連接後,開發人員即可監控微控制器與 EEPROM 之間的訊號,觀察兩個裝置之間傳輸的加密資料。
Xplained 套件隨附 ATAES132A 的所有韌體庫以及範例程式碼。在充分瞭解本文所述的 ATAES132A 記憶體對應和暫存器後,開發人員即便對此裝置的加密技術僅有最低程度的知識,也能輕鬆地根據其目標應用對範例程式碼進行自訂。
結論
AES 128 位元加密技術是一門複雜的學問。儘管如此,開發人員仍可以在專為此目的設計的 EEPROM 中保護敏感資料。而這有賴於此類裝置的機械保護機制、強大加密功能、特別的分區與記憶體對應功能,以及僅限公司和/或最終使用者知悉的自訂或保密功能。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。