在 IoT 設計中增添安全元件,建立從邊緣到雲端的全面安全性
資料提供者:DigiKey 北美編輯群
2019-09-10
在設計和部署任何連至公共網際網路的系統時,網路安全仍是普遍存在的問題。在物聯網 (IoT) 中,使用者開始質疑連接的裝置,是否能夠安全地支援智慧家庭、智慧工廠或智慧城市中的應用,因此安全問題就顯得尤其重要。然而,在面對更緊湊的交期時,IoT 裝置的開發人員經常會覺得,他們沒有足夠經費來使用元件資源,更不用說也沒有額外的時間,可像過去一樣,使用廣泛的功能組合,來實作有效的安全解決方案。
半導體廠商可提供更易於部署的安全解決方案,有助於取得折衷作法。本文將討論安全性問題,然後介紹 NXP Semiconductors 提供的一項相關解決方案,即 EdgeLock SE050 安全元件 (SE)。接著向開發人員展示,如何使用這種單晶片元件,在 IoT 裝置中快速實作從邊緣到雲端的安全性。
IoT 安全問題
很不幸,安全性較差的 IoT 裝置,經證實最常成為網路攻擊的目標。裝置一旦受到破壞,便會洩漏使用者的機密資料,並提供偽造裝置副本所需的寶貴資訊。駭客還可以使用這些暴露的裝置來製造更大的攻擊,更深入地滲透到網路中,以入侵其他已連接的裝置、系統和企業資源。因此,受到攻擊的 IoT 裝置,其效應會通過 IoT 層級的多個層次傳播,甚至透過大樓自動化、工業系統、運輸和醫療裝置等新興 IoT 應用,威脅到公共安全。
對於希望推出更高效率 IoT 設計的開發人員而言,由於市場對更高效能和更低功耗的需求不斷增加,因此添加安全機制反而可能不是要項。事實上,若要有效的達到安全目標,就有更多要求需要滿足,以減輕從邊緣到雲端的威脅。
如果獨立運用各種技術,即使是熟悉的技術,如加密和驗證,也不足以單靠這些技術來確保安全性。IoT 安全需要建立在信任根之上,以確保安全機制和協定免受攻擊。同時,安全方法需要更精細地運用,才能保護多個 IoT 裝置之間的連線,以及個別 IoT 設計內的元件之間的連線。
NXP 的 EdgeLock SE050 SE 旨在提供一系列安全機制和協定,以便在 IoT 裝置中打造從邊緣到雲端的安全性。
強大的安全解決方案
NXP 的 SE050 是立即可用的 IoT 裝置安全解決方案,採納 NXP 在智慧卡安全方面的豐富經驗,為 IoT 設計提供硬體式信任根。此元件結合專用微控制器和安全憑證儲存,以及以 Java Card OpenPlatform (JCOP) 智慧卡作業系統 (OS) 打造的軟體堆疊。SE050 操作平台經單獨認證,達到共同準則 (CC) 評估保證等級 (EAL) 第 6 增強級 (EAL 6+) 的 OS 級別,可為高度威脅環境中的操作提供罕見的保證等級 (圖 1)。
圖 1:在認證的產品中,SE050 平台提供了罕見的保證等級,達到 CC EAL 6+ 的作業系統級別。(資料來源:共同準則)
專用的 NXP IoT 安全小程式經過最佳化後,可在這個強大的安全平台上運作,並使用內建的加密資料庫來支援一整套加密演算法,其中包括:
- 使用先進加密標準 (AES) 和資料加密標準 (DES) 演算法的對稱加密技術
- 使用 Rivest-Shamir-Adleman (RSA) 和橢圓曲線加密 (ECC) 演算法的非對稱加密技術,可支援許多 ECC 曲線,包括由美國國家標準暨技術局 (NIST) 指定的標準曲線
- 用來建立訊息認證碼 (MAC) 的多個雜湊函數
- 用於密碼散湊、金鑰協商和密鑰強化等其他方法的多個金鑰推衍函數 (KDF) 演算法
為了提升效能,SE050 元件整合多種硬體加速器,可實施先進加密標準 (AES)、資料加密標準 (DES),以及快速的屬性式訊息加密 (FAME) 技術。
為了保護加密操作期間使用的憑證,此元件提供高達 50 KB 的安全使用者快閃記憶體,並預先配備用來支援典型 IoT 交易的根密鑰。開發人員若要進行高容量設計,還可以利用由 NXP 或授權第三方業者安全佈建的自定義密鑰和憑據。
例如,除了本身的嵌入式快閃記憶體外,此元件還可在相關私鑰保留在安全快閃記憶體時,支援隨機存取存儲體 (RAM) 的存取,以便儲存公共憑證。此外,SE050 IoT 小程式包含安全的匯出/匯入功能,可允許開發人員將密鑰或任意資料,安全地儲存在外部記憶體中。但是,此元件使用記憶體管理單元,使得對記憶體不同部分的存取,僅限於 IoT 的小程式中,以防止透過微控制器進行的未經授權存取。為了進一步防止篡改和複雜的旁路攻擊,此元件還內建多種邏輯屏障和實體屏障,以防止未經授權的存取。
但是,雖然安全性旨在允許存取授權的元件,同樣也要設置屏障來防止未經授權的存取。
元件驗證
作為 IoT 裝置的信任根,SE050 加密機制和安全儲存功能,可直接支援所要求的安全連線,與授權遠端主機 (如雲端伺服器) 進行通訊。實際上,這些同樣的功能可支援開發人員,在使用 SE050 SE 建立的不同 IoT 裝置之間,確保 IoT 層級最低層的連線的真實性。
例如,智慧型 IoT 感測器可以使用類似於傳統網際網路的身份驗證方法,對 IoT 控制元件自我執行身份驗證。此程序一開始時,感測元件會將儲存在其 SE050 安全儲存器中的憑證,傳送到控制元件。控制元件反過來會使用 SE050 加密功能,來驗證接收到的憑證。驗證成功後,控制元件將某個隨機值 (稱為挑戰) 送回至感測器元件。感測器元件接著使用本身的 SE050 SE,透過與先前發送至控制元件之相同憑證關聯的私鑰,來簽署挑戰。由於該簽署的挑戰只能使用相關聯的公鑰進行驗證,因此控制元件可以確保感測器元件最初發送的憑證,確實屬於該元件。因此,控制元件能夠可靠地對感測器元件進行認證。
透過在同一程序中切換角色,控制元件可以向感測器進行反向驗證。
這種相互驗證程序,對於建立可信賴的 IoT 網路至關重要,當更多中間層 (含邊緣運算元件) 出現後更是如此。儘管相互驗證程序簡單明瞭,但是即便是簡單的實作錯誤,或對協定的不同解釋,都可能導致嚴重的安全缺陷。特別是在資源受限的 IoT 設計中,對安全儲存以及快速執行複雜密碼演算法的需求,都會使可靠的實作變得更加複雜。藉著將 SE050 增添到任何 IoT 設計中,開發人員可以實作相互身份驗證等重要的安全功能,而不會影響整體設計的效能或安全性。
簡單安全的整合
除了 SE050 的先進功能,補強優勢是易於導入設計。開發人員可以輕鬆地將元件整合到 IoT 硬體設計中,這樣對設計複雜性或覆蓋區的影響最小。這個 3 mm x 3 mm 元件可當作附加元件使用,提供一組簡單的序列介面 (圖 2)。
圖 2:NXP 的 SE050 SE 提供多個介面,可當作 I2C 從屬元件使用以連接主機微控制器;可當作 I2C 主要元件使用,與數位感測器進行 ISO 7816 為基準的連線;並且當作 ISO 14443 近場通訊 (NFC) 非接觸式介面使用。(圖片來源:NXP)
為了與主機微控制器通訊,此元件可當作 I2C 從屬元件使用。SE050 也可作為 I2C 主要元件使用,與數位感測器等序列元件進行 ISO 7816 為基準的連線。此元件還支援第三種介面,以進行 ISO 14443 NFC 非接觸式連線。
針對不同的連線,SE050 的 IoT 小程式可協調安全金鑰和存取控制規則,以便設定並管理每個連線的工作階段。
為了與主機通訊,SE050 提供工作階段式驗證,旨在防止 I2C 命令和資料受到攔截,以及透過中間人進行的攻擊。如要啟動串聯連接的工作階段,開發人員可以使用使用者 ID 進行驗證,而該使用者 ID 的功用,就像是密碼或個人識別碼 (PIN) 一樣。
對於某些應用而言,在微控制器和 SE050之間使用密碼式的基本認證,有時會不夠用。對於關鍵應用而言,開發人員可能需要確保主機微控制器和 SE050 SE 之間的通訊可保持其機密性,以防止下列攻擊:重複執行工作階段;發送失序的工作階段片段;或將密碼演算法取代成遭駭的版本,導致機密資料遭提取。
安全的匯流排交易
有了 SE050 SE,開發人員可以使用多種驗證方法,建立 SE050 和主機微控制器之間的安全通訊通道。開發人員在此可以利用 SE050 IC 對安全通道協定 (SCP) SCP03 標準的支援;而這項標準則廣泛用於保護 Java Card 元件和主機之間的雙向通訊。
對於使用 SE050 SE 建立的微控制器型設計,若在 I2C 匯流工作階段認證期間使用 SCP03 協定,實質上就是將 SE050 SE 密切結合至主機微控制器,進而允許在工作階段期間使用經過加密的訊息。對於在 SCP03 協定內進行的訊息加密,首先是使用 AES 演算法加密純文字訊息,然後產生出用於加密訊息的 MAC。藉著發送加密訊息和相關的 MAC,這種方法稱為「encrypt-then-MAC」,可保護加密訊息,並使接收器能夠檢測到訊息的改變。
SE050 還將某種形式的保護,延伸至感測器資料。開發人員在此可以使用認證中繼資料,請求 SE050 來增強對主機命令的回應,而這些資料則包括獨一識別碼、每個實例中以隨機數值形式表現的新鮮度資料、時間戳記和簽名。在主機內,軟體可以檢查從 SE050 接收到的認證資料,以便對連接至 SE050 I2C 主介面的感測器,驗證其傳送資料的來源和適時性。
由於來自個別感測器的資料,會在往上游 IoT 層級流動的串流中合併,因此相關應用可以使用此認證資料識別異常資料模式的來源,而這些異常模式可能表示感測器受損、故障或受到影響。透過 SCP03 主機工作階段和感測器資料認證,開發人員可以安全可靠地取得關鍵應用的必要感測器資料。
功能介面
如同主機微控制器和 SE050 SE 間的所有互動一樣,認證請求和回應都會流經通訊堆疊。通訊堆疊如智慧卡元件適用的 ISO 7816 功能介面標準中所定義 (圖 3)。此應用協定資料單元 (APDU) 標準定義了主機元件 (HD) 和 SE 之間訊息交換的格式、內容和協定。
圖 3:NXP 的 SE050 SE 和 HD 之間的通訊是通過 ISO 7816 智慧卡標準堆疊進行,而此標準堆疊包含使用 ISO 7816 APDU 標準的應用層級請求和回應,由使用 ISO 7816-3 T = 1 半雙工協定的資料連結層,透過 I2C 傳輸。(圖片來源:NXP)
資料連結層建立在 I2C 實體層之上,可將來自應用層的請求和回應,分解成一個遵循 ISO 7816-3 T=1 透過 I2C 協定的交易序列,以進行半雙工通訊。在此協定中,HD 和 SE 上的資料連結層在交易序列中的每次傳輸之後,都會等候確認。
例如,針對主機應用發出的讀取請求,主機的資料連結層首先輪詢 SE,並等待一個表示 SE 已經準備好發送的確認 (ACK) 回應 (圖 4)。
圖 4:資料連結層將 HD 請求 (包括此處顯示的讀取請求) 處理為一系列遵循 T = 1 透過 I2C 協定的交易。從一個輪詢循環開始重複請求,直到收到一個表示 SE 準備好傳輸資料的確認 (ACK) 回應。(圖片來源:NXP)
在收到 ACK 就緒回應之後,SE 內的資料連結層會以資料區塊傳輸序列的形式,將資料發送到主機,等待主機的資料連結層對每個區塊傳輸進行確認 (圖 5)。最後,完整的回應會傳送到主機應用。
圖 5:SE 表示已就緒可傳送資料後,會以資料區塊序列傳送資料回應,等到 HD 確認後,才傳送序列裡的下一個區塊。(圖片來源:NXP)
軟體實作
在應用層級中,主機微控制器與 SE050 SE 之間的交換採用 ISO 7816 APDU 標準進行。對 SE050 來說,命令和回應的 APDU 是依據 ISO 7816-4 定義的標記、長度、數值 (TLV) 格式。每個 APDU 至少包含一個等級 (CLA) 位元組 (用於所有 SE050 作業的固定值)、一個指令 (INS) 位元組,以及兩個參數 (P1, P2) 位元組。資料請求與回應也可能包含欲讀取的位元組數 (Le)、資料欄位長度 (Lc),以及資料欄位等其他欄位。
舉例來說,主機應用的讀取請求會使用一對 TLV 來設定 SE050 I2C 介面,並執行讀取請求 (清單 1)。如前所述,主機資料連結層接著會依據 T=1 協定,將此請求分解成一系列的 I2C 匯流排交易。
複製
static smStatus_t i2cm_Read(
ex_sss_boot_ctx_t *pCtx, uint8_t *readbuf, uint32_t readLength)
{
smStatus_t status;
TLV[0].type = kSE05x_I2CM_Configure;
TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS;
TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz;
TLV[1].type = kSE05x_I2CM_Read;
TLV[1].cmd.rd.readLength = readLength;
TLV[1].cmd.rd.rdBuf = readbuf;
status = Se05x_i2c_master_txn(&pCtx->session, &TLV[0], 3);
return status;
}
清單 1:NXP 的 Plug & Trust 中介軟體的原始碼,顯示在主機命令中使用 ISO 7816-4 TLV 格式,例如這個對 NXP SE050 SE 進行基本讀取的命令。(程式碼來源:NXP)
如清單 1 所示,此程式碼使用簡易的 C 語言結構,對用於配置請求和讀取請求的 TLV 進行編碼。每個 TLV 在此都是透過 SE05x_I2CM_cmd_t
結構進行例項化 (清單 2)。
複製
typedef struct _SE05x_I2CM_cmd
{
SE05x_I2CM_TLV_type_t type;
SE05x_I2CM_INS_type_t cmd;
} SE05x_I2CM_cmd_t;
typedef enum _SE05x_I2CM_TLV_type
{
kSE05x_I2CM_None = 0,
kSE05x_I2CM_Configure,
//kSE05x_I2CM_Security,
kSE05x_I2CM_Write = 3,
kSE05x_I2CM_Read,
kSE05x_I2CM_StructuralIssue = 0xFF
} SE05x_I2CM_TLV_type_t;
typedef union _SE05x_I2CM_INS_type {
SE05x_I2CM_configData_t cfg;
SE05x_I2CM_securityData_t sec;
SE05x_I2CM_writeData_t w;
SE05x_I2CM_readData_t rd;
SE05x_I2CM_structuralIssue_t issue;
} SE05x_I2CM_INS_type_t;
typedef struct _SE05x_I2CM_readData
{
uint16_t readLength;
SE05x_I2CM_status_t rdStatus;
/* Output.rdBuf will point to Host buffer */
uint8_t *rdBuf;
} SE05x_I2CM_readData_t;
清單 2:NXP 的 Plug & Trust 軟體發行版可提供相關結構,以定義請求類型 (綠色螢光部分) 和相關命令參數 (藍色螢光部分)。(程式碼來源:NXP)
在 SE05x_I2CM_cmd_t
結構內,type
成員是由 C 列舉 (SE05x_I2CM_TLV_type_t
) 所定義,而且列出可能的數值,其中包括讀取請求 ADPU (kSE05x_I2CM_Read
) 的標準值 4。SE05x_I2CM_cmd_t
結構的 cmd
成員是以聯合的結構來定義。在此情況下,cmd 成員屬於 rd 結構,其又包含多個成員,可指明請求資料長度 (readLength
) 及目標緩衝區指標 (rdBuf
)。
這組定義能以少數幾行程式碼來予以抽象化,以設定清單 1 中的 TLV[1]
實例 type
成員,進而指出讀取請求 (kSE05x_I2CM_Read
) 並將 cmd
成員設定至想要的 readLength
和 readBuf
緩衝區指標。
開發支援
為簡化軟體開發,NXP 通過 Plug & Trust 中介軟體以及關聯的資料庫應用程式開發介面 (API),將與 SE050 SE 的主機互動予以抽象化 (圖 6)。NXP 的 Plug & Trust 中介軟體發行版套件,不但包含中介軟體及 API,而且附加一組以 mbed TLS、OpenSSL 和其他套件打造的應用程式範例。此外,Python 型命令行介面 (CLI) 可供開發人員在互動模式下使用 SE050 功能。
圖 6:除了樣本軟體,NXP 的 Plug & Trust 軟體套件還包含中介軟體與關聯的 API,可通過以 ISO 7816 為基準的堆疊,將 SE050 互動的細節予以抽象化,而前述堆疊則包含 APDU 應用層、T=1 透過 I2C 資料連結層,以及 I2C 實體層。(圖片來源:NXP)
除了 NXP 的 Plug & Trust 軟體,開發人員還可使用 OM-SE050ARD 開發套件來快速評估 SE050,此開發套件不但包含 SE050 SE 及簡易型支援電路,還結合多個排針座。除了可適用於外接式 I2C 介面,且可直接存取 SE050 引腳的連接器之外,OM-SE050ARD 板還包含 Arduino-R3 排針座。開發人員可使用 Arduino-R3 排針座,輕鬆地將 OM-SE050ARD 板連接到數個開發板,包括 NXP 的 I.MX 6ULTRALITE 評估板及 NXP 的 FRDM-K64F 評估板。
開發人員可使用支援的評估板,以程式設定方式透過 Plug & Trust 軟體範例,或以互動方式透過 Python 型 CLI,迅速地探索特定的安全使用案例。在 Plug & Trust 軟體發行版的應用程式範例中,範例軟體說明通過 SE050 I2C 主介面讀取感測器資料的完整程序。開發人員能迅速重新打造這個應用程式範例,以認證讀數取代傳統的 I2C 讀數。使用認證讀數時,不需改變顯示於清單 1 中的 TLV 設定。事實上,大部分的變更都會牽涉到,將顯示於清單 1 的 I2C 讀取函數 Se05x_i2c_master_txn()
,取代成認證讀取版本 Se05x_i2c_master_attst_txn()
,以及此版本的關聯函數參數。
其他應用程式範例則展示,邊緣至雲端安全性中的最終步驟,亦即與雲端服務進行驗證及安全通訊。在 Plug & Trust 軟體範例中,開發人員可找到相關的逐步指示,以使用 SE050 來驗證並保護與 Microsoft Azure、IBM Watson、Amazon Web Services (AWS) 及 Google 雲端平台 (GCP) 等公共雲端服務進行的連線。這些雲端連線範例所涉及的多數工作,主要是建立個別雲端服務的帳戶,以及上傳金鑰與憑證 (也在範例常式中提供)。SE050 SE 可處理開發人員在確保雲端連線安全時,通常需要執行的繁重任務。
採用 NXP 的 Plug & Trust 軟體堆疊並與 NXP 的開發板相結合,開發人員能迅速利用 SE050 SE 對 IoT 裝置邊緣至雲端安全性的全面支援。
結論
安全性不佳的 IoT 裝置有大量機密資料暴露的危險,也會成為其他相連資源的入口點。開發人員需要在安全的基礎上打造 IoT 設計,能從裝置延伸到雲端,並支援整個 IoT 裝置生命週期。如上所述,若要達成此目的,可利用 NXP 的 SE050 來加強設計。開發人員可使用此 SE 來滿足新的要求,讓更有效的安全防護機制從邊緣一路延伸至雲端。

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