汽車ECU實現數據安全存儲(機密性保護)的一種方案

一、 綜述

??在車輛ECU中總是有一些密鑰或重要數據需進行機密性保護,但因產品選型、成本等考慮,導致一些ECU的芯片不支持硬件安全模塊(例如HSM、TEE等)。此時,為保障數據的機密性,可考慮通過軟件實現數據的安全存儲:將需保護的數據加密后存儲到NVM中。

二、方案

2.1 方案概述

??對業務數據使用AES-256算法(AES-256算法使用的密鑰稱為保護密鑰)進行加密,隨后將加密后的業務數據密文存儲在NVM中。此時將對業務數據的保護轉換對保護密鑰的保護,后續只需保障保護密鑰不被泄露和被篡改,即可保障業務數據的安全性。方案通過特定的密鑰派生算法,基于種子,生成保護密鑰。

??將種子拆分成多份的主要目的是提升攻擊者通過逆向方法獲取保護密鑰的難度。在攻擊者對編譯后的Image進行靜態分析時,可有效提升分析難度,避免通過掃描String字符串方式直接獲取到保護密鑰。

  • 密鑰派生算法:可使用PBDKF2、Bcrypt、Scrypt等,實際可集合具體場景確定。本文后續以PBKDF2舉例
  • 種子:可使用多種形式的種子或互相結合形成種子
      1. 保存在NVM中的隨機數
      1. 硬編碼在代碼中的固定值
      1. 讀取芯片特征值,例如芯片ID
      1. OTP中存儲的值

??總體流程如下:
在這里插入圖片描述

2.2 保護密鑰生成

??將業務數據進行加密存儲后,即可使用把對業務數據的保護轉換為對保護密鑰的保護。為提升保護密鑰的安全性,需僅在需要保護密鑰時,基于特定種子進行生成,避免保護密鑰長期直接存在于ECU中。保護密鑰生成流程如下:

  1. 通過第一個種子和salt(salt也可以理解為1個種子,salt值可使用和種子相同的方式選擇),使用密鑰派生算法PBKDF2-HMAC-SHA256生成32字節的派生密碼;
  2. 以步驟1中生成的派生密碼和第二個種子為基礎,使用密鑰派生算法PBKDF2-HMAC-SHA256進行運算,得到32字節的派生密碼;
  3. 以步驟2中生成的派生密碼和第三個種子為基礎,使用密鑰派生算法PBKDF2-HMAC-SHA256進行運算,得到32字節的派生密碼,即為最終的保護密鑰;

保護密鑰生成過程應封裝為一個函數,便于后續初始化和運行階段直接調用。通過調用保護密鑰生成函數,可直接獲得保護密鑰。

在這里插入圖片描述

2.3 數據場景

??業務數據使用需考慮兩種場景

    1. 數據預置且不修改:對于預置數據需手動在PC等環境中實現保護密鑰生成和業務數據加密過程,得到業務數據明文。隨后將此業務數據密文寫入NVM或硬編號在代碼中。ECU只需要執行解密過程即可
    1. 動態寫入數據:通過產線或運行時寫入,例如VIN、UDS 2E等服務。當ECU接收到此數據后,調用加密過程進行加密,得到業務數據密文并寫入NVM。當ECU需要使用時,調用解密過程進行解密,即可得到業務數據明文以進行使用。此場景需考慮對寫入前的默認值保護,若默認值無需保護,則默認值可明文寫入NVM。否則需按照“數據預置且不修改”中方式在ECU外部先將業務數據明文轉換為業務數據密文。

2.3.1 數據為預置且不修改

??此類數據需在ECU外部實現加密過程,ECU僅實現解密過程。加密后的業務數據密文可考慮硬編碼在代碼或寫入NVM中。當ECU使用時,讀取硬編碼或NVM中的業務數據密文,隨后生成保護密鑰并調用AES解密,獲得業務數據明文。總體流程如下圖

在這里插入圖片描述

2.3.2 動態寫入數據

2.3.2.1 默認值無需保護

??當默認值無需保護時,NVM存儲的默認值應為明文,當前業務數據應寫入到1個結構體中,結構體可定義如下:

struct bussiness_data {unsigned int flag;// 指明bu_data數據是類型,0:明文存儲,other:密文存儲unsigned char bu_data[N];//具體長度需結合業務數據確定,需注意AES加密需填充,此處長度需為填充后的長度
};
    1. 寫入默認值:當業務數據為默認值時,flag需置為0,bu_data中保存業務數據默認值的明文。默認值結構體跟隨軟件包等刷入ECU NVM特定區域。
    1. 寫入有效數據:當需要寫入有效的業務數據時,通過UDS、刷寫等方式,此時ECU接收到的為業務數據的明文,ECU需調用AES加密算法,生成業務數據密文,生成業務數據密文后及時銷毀保護密鑰。設置存儲結構體,flag值為1,bu_data為業務數據密文,并將結構提供更新到NVM中(覆蓋默認值)。
    1. 當ECU使用業務數據時,首先讀取NVM中存儲的業務數據結構體,并判斷flag值,若值為0,則直接讀取bu_data用于業務場景使用。若flag值為1,讀取bu_data后,使用AES進行解密,獲得業務數據明文,用于業務操作場景,業務操作使用完成后,需立即銷毀DDR中的保護密鑰。

在這里插入圖片描述

2.3.2.2 默認值需保護

??當默認值需保護時,NVM存儲的默認值也需要為密文。總體流程如下:

    1. 寫入默認值:當業務數據為默認值時,需在ECU外部環境中實現密鑰保護和加密算法,將默認值轉換為密文,并隨軟件包刷寫等方式,同步存儲到NVM特定區域中。
    1. 寫入有效數據:當需要寫入有效的業務數據時,通過UDS、刷寫等方式,此時ECU接收到的為業務數據的明文,ECU需調用AES加密算法,生成業務數據密文,生成業務數據密文后及時銷毀保護密鑰。并將業務數據密文更新到NVM中(覆蓋默認值)。
    1. 當ECU使用業務數據時,讀取NVM中的存儲的業務數據密文,使用AES進行解密,獲得業務數據明文,用于業務操作場景,業務操作使用完成后,需立即銷毀DDR中的保護密鑰。

在這里插入圖片描述

三、優化

??具體項目中需結合實際使用場景,確定業務數據明文是常駐內存還是每次使用時解密。若對使用頻繁或對性能有要求(例如SecOC密鑰等),則業務數據明文可常駐內存。否則,建議選擇更安全的每次使用時解密。

四、擴展

4.1 AES算法

??本方案對業務密鑰進行加解密的算法為AES-256,使用CBC模式。CBC的IV可和種子一樣選擇不同的方式。

4.2 PBKDF2算法

??本方案選擇密鑰派生算法PBKDF2。PBKDF2算法為一種密鑰派生算法,PBKDF2算法主要用在防止暴力破解場景,通過增加單次迭代的時間,使暴力破解時間成倍增長,從而提升暴力破解成本。但本方案并不使用此特性,本方案主要目的在通過一組種子作為輸入,生成一個關聯的派生密鑰,作為保護密鑰。當種子固定時,通過PBKDF2算法生成的保護密鑰必定固定。

在這里插入圖片描述

??PBKDF2算法涉及參數如下:

  • 鹽值:32字節長度,可預定義好并硬編碼到代碼中,也可像選擇種子一樣選擇一個salt。
  • 迭代次數:2次。因本項目不使用防止暴力破解特性,故次數并不影響安全性,結合效率考慮。需集合實際項目性能,調整次數。
  • 偽隨機函數:HMAC-SHA-256算法
  • 輸出密鑰長度:32字節

4.3 種子選擇

??種子可以由多種來源,若從穩定性角度考慮,使用硬編碼種子最穩定,若需要一機一密等場景,則可使用芯片ID或者隨機數,實際使用選擇種子時應結合具體場景選擇合適的種子。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93765.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI 效應: GPT-6,“用戶真正想要的是記憶”

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

云計算學習100天-第25天

部署LNMP環境安裝軟件#在前一天已經安裝nginx的基礎上安裝MariaDB,php和php-fpm yum -y install mariadb mariadb-server mariadb-devel php php-mysqlnd php-fpm #mariadb(數據庫客戶端軟件)、mariadb-server(數據庫服務器軟件&…

細化的 Spring Boot 和 Spring Framework 版本對應關系

注:本文由ai輔助,個人整理,有問題可留言 Spring Boot 3.x 系列 (基于 Spring Framework 6.x) Spring Boot 版本 對應的 Spring Framework 版本 Java 支持版本 3.1.5 (最新) 6.0.15 Java 17+ 3.1.4 6.0.14 Java 17+ 3.1.3 6.0.12 Java 17+ 3.1.2 6.0.11 Java 17+ 3.1.1 6.0.…

PyTorch API 1

文章目錄torch張量創建操作索引、切片、連接與變異操作加速器生成器隨機采樣原地隨機采樣準隨機采樣序列化并行計算局部禁用梯度計算數學運算常量逐點運算歸約操作比較運算頻譜操作其他操作BLAS 和 LAPACK 運算遍歷操作實用工具符號數字導出路徑控制流優化方法操作符標簽torch.…

基于FPGA的實時圖像處理系統(2)——VGA顯示彩條和圖片

VGA顯示彩條和圖片 文章目錄VGA顯示彩條和圖片一、VGA簡介二、功能設計1、彩條設計2、圖片設計三、結果展示四、代碼一、VGA簡介 VGA(Video Graphics Array)是IBM在1987年隨PS/2機?起推出的?種視頻,具有分辨率?、顯?速率快、顏?豐富等優點,在彩 ?…

【網絡運維】Linux 文本處理利器:sed 命令

Linux 文本處理利器:sed 命令 sed 簡介 sed(Stream Editor)是一款非交互式的流編輯器,誕生于 1973–1974 年間的貝爾實驗室,由 McMahon 開發。它專為文本處理而生,功能強大,是 Linux 文本處理常…

week2-[一維數組]出現次數

week2-[一維數組]出現次數 題目描述 給定 NNN 個整數A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。請求出這 NNN 個數中出現次數最多的數的出現次數,以及出現次數最少的數的出現次數。 輸入格式 讀入包括 222 行。第一行只有 111 個整數 NNN,表示數…

力扣 hot100 Day79

215. 數組中的第K個最大元素 給定整數數組 nums 和整數 k,請返回數組中第 k 個最大的元素。 請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 class…

C++圍繞音視頻相關的資料都有哪些?如何進行學習

音視頻技術涉及的內容廣泛而深入。我會根據自己的知識給你提供一個系統性的音視頻相關資料梳理,主要分為學習路徑與核心知識、開源項目與實戰、開發者資源以及熱點與趨勢幾個方面,希望能幫助你高效地學習和探索。 先用一個表格來概覽主要的學習方向和資…

AI自動化測試,解決傳統自動化測試中??腳本維護成本高、用例覆蓋不全、缺陷發現滯后??等痛點

AI自動化測試,解決傳統自動化測試中??腳本維護成本高、用例覆蓋不全、缺陷發現滯后??等痛點AI自動化測試通過機器學習(ML)、自然語言處理(NLP)、計算機視覺(CV)等技術,解決了傳統…

Laravel 事件與監聽器

下面是一個完整的用戶注冊事件和監聽器的實現示例,包含事件、監聽器、注冊、觸發等完整流程。一、軟件版本 php: 8.2.20laravel: 11mysql: 8.0.29 二、完整實現過程 1.創建事件 1.1 首先創建用戶注冊事件 php artisan make:event UserRegistered1.2 編輯app/Events/…

前端 React 實現數據懶加載-滾動觸底加載數據

在 React 中使用 Intersection Observer API 實現觸底加載分頁&#xff08;無限滾動&#xff09;1.基本實現思路 在列表底部放置一個 哨兵元素&#xff08;Sentinel&#xff09;&#xff08;如 <div>&#xff09;。使用 IntersectionObserver 監聽該元素是否進入視口&…

MySQL 50 道經典練習題及答案

目錄 一、數據表設計與初始化 1. 數據表結構說明 2. 建表語句 3. 插入測試數據 二、練習題及答案 1. 查詢 "01" 課程比 "02" 課程成績高的學生的信息及課程分數 2. 查詢同時存在 "01" 課程和 "02" 課程的情況 3. 查詢存在 &qu…

電競護航小程序搭建三角洲俱樂部護航派單小程序開發游戲派單系統定制開發

成品系統&#xff0c;可以快速搭建。功能概述&#xff1a;商家入駐、老板點單、快捷發單、自定義發單、發單列表、管事入駐、訂單審核裁決、打手入駐、打手排行榜、邀請排行榜、賬戶充值、余額提現、成為客服等

MYSQL-增刪查改CRUD

目錄 &#x1f33f;前言&#xff1a; &#x1f33f;增-C-Create-新增 &#x1f9ca;單行數據全列插入 &#x1f34b;?&#x1f7e9;語法&#xff1a; &#x1f34b;?&#x1f7e9;演示&#xff1a; &#x1f9ca;指定列插入 &#x1f34b;?&#x1f7e9;語法&#xf…

【Loss學習筆記】Focal loss、QFL、DFL、VFL——目標檢測定位損失函數詳解

文章目錄Focal loss&#xff08;2018 ICCV &#xff0c;RetinaNet&#xff09;1、Focal Loss 提出背景問題一&#xff1a;正負樣本數量不均衡問題問題二&#xff1a;難分類/易分類樣本數量不均衡問題對兩個問題的解決2、正負樣本數量不均衡問題的解決&#xff1a;Focal loss 的…

nertctl使用了解

測試了幾個容器&#xff0c;似乎未對k8s的containerd產生影響&#xff0c;都能訪問 再次測試&#xff0c;containerd發生了重啟&#xff0c;nrtdctl啟動的容器都沒了 #### sealos 創建containerd集群 sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.29…

三、k8s 1.29 之 資源清單

一、什么是資源 資源(Resources) 是指集群中可被分配、管理和調度的各種實體,既包括計算、存儲、網絡等基礎設施資源,也包括 K8s 自身定義的 API 對象(如 Pod、Deployment 等)。這些資源是 K8s 調度和管理工作負載的核心基礎。 Kubernetes 中的資源本質上是 “可被操作的…

React中常用的Hook(useEffect、useRef、useMemo、useNavigate、useParams)

React hook1&#xff1a;useEffect 在編程中&#xff0c;副作用是指函數或表達式在執行過程中對外部環境產生影響的行為。例如&#xff1a; 修改外部變量&#xff08;如全局變量、DOM、API 請求、設置定時器等&#xff09; 什么是純函數&#xff1f; // 純函數&#xff1a;輸入…

關聯規則挖掘1:Apriori算法

目錄 一、Apriori算法核心原理 1. 基本概念 2. Apriori性質 二、完整案例計算&#xff08;超市購物數據&#xff09; ?步驟1&#xff1a;按字母序重排每筆交易? ?步驟2&#xff1a;統計頻繁1-項集&#xff08;min_support40%&#xff09;?? ?步驟3&#xff1a;生成…