本應用筆記詳細介紹了DS28S60與Jupyter筆記本配合使用進行雙向認證的基本應用。它使用分步方法來演練設置設備和所有相關軟件,創建用于通過 ECDHE 密鑰交換加密數據的共享密鑰,使用 AES-GCM 加密和解密數據,以及通過 ECDSA 簽名生成和驗證完成相互身份驗證。
介紹
本應用筆記介紹了DS28S60加密處理器的工作原理,概述了使用DS<>S<>器件建立基于主機和客戶端的系統,用于密鑰生成和交換、加密和雙向認證。此用法在隨附的 Jupyter 筆記本中有詳細說明。首先,讓我們討論通過非對稱密鑰交換生成主機和客戶端使用的共享密鑰或共享對稱密鑰。接下來,讓我們概述如何使用共享對稱密鑰來加密設備和主機之間的通信。最后,讓我們演練使用數字證書和簽名的相互身份驗證過程。
系統加密概述
在系統成員之間交換任何數據之前,DS28S60首先通過創建加密通道來保護各方之間的通信。此示例中的各方包括設備、主機和第三方頒發機構:
- 設備 :也稱為客戶端。這是包含DS28S60的實體,它必須與主機通信。例如,這可能是一個傳感器節點。
- 主機 :通常是服務器或計算機。這是必須與設備通信的實體。
- 頒發機構:稱為第三方/證書 頒發機構 。這是受信任方,它向主機和設備提供證書以相互驗證。
圖 1 顯示了主機和設備之間建立和使用加密通道的交互。
圖1.加密通信通道的系統概述。
系統身份驗證概述
簡而言之,系統身份驗證是驗證主機和設備的公鑰和私鑰以驗證各方身份的過程。請注意,在啟動與密鑰對或任何其他敏感信息相關的任何數據交換之前,所有各方之間的通信都是加密的。圖 2 顯示了身份驗證過程中主機、設備和頒發機構之間的交互。
圖2.使用權威實體幫助的雙向身份驗證的系統概述
硬件、軟件和出廠設置
硬件設置
要運行DS28S60的Jupyter筆記本,需要DS28S60以外的兩個硬件,它們是DS28S60評估板的一部分。
- DS9121EQ+ 評估 TDFN 插座板,用作 DS28S60 處理器的集線器并容納 DS<>S<>。
- DS9482P# USB 轉 I2C/SPI/1 線適配器,用于連接 DS9121EQ+ 插座板和主機。
使用評估板中的USB Micro B電纜將上位計算機與DS9482P#適配器連接。
軟件設置
配置硬件后,下一步是獲取并初始化軟件以運行 Jupyter 筆記本。這些步驟如下:
- 下載最新版本的 Python 及其相關庫以運行 Jupyter Notebook:
-
訪問下載 Python | Python.org 并下載最新版本的 Python( 安裝時選中“將 Python 添加到路徑”選項 )。
-
安裝 Python 后,如果使用 Windows,請打開命令提示符或任何類似的終端。若要安裝庫,請輸入運行筆記本需要以下庫。
pip install *TARGET LIBRARY*
- 幼兒發展局
- 皮串行
- 密碼學
- Pycryptodome
- AES
- SPI
-
- 安裝并運行 Jupyter Notebook,然后導航到 DS28S60 Notebook 文件夾并運行 DS28S60 Jupyter Notebook 文件 'DS28S60_KeyExchange.ipynb'。有關下載 Jupyter 筆記本的說明,請訪問 Jupyter 項目 |安裝Jupyter。
注意:通過在 Jupyter 筆記本中的“硬件連接設置”部分下運行前兩個代碼塊,檢查軟件包是否已正確安裝,以及硬件是否已連接并成功工作。
出廠設置:ECDSA 密鑰生成和證書分發
要生成共享密鑰或共享對稱密鑰,請首先為主機和設備生成公鑰和私鑰。
以下步驟概述了密鑰對的安裝和存儲以及證書的分發。注意:從應用筆記的這一點開始,每個編號的步驟在Jupyter筆記本中都有一個或多個關聯的代碼段,必須按順序運行這些代碼段才能完成雙向身份驗證。
- 生成主機的橢圓曲線數字簽名算法 (ECDSA) 密鑰對和識別信息。
- 在 Jupyter 筆記本中,預先選擇私鑰和公鑰數組以保持一致性。不要修改這些值。注意:對于實際應用程序,這些數組永遠不會對任何人可見。
- 識別信息:同時預先選擇Host_ID和Host_Location_Code。不要修改這些值。
- 啟動托管證書生成的授權。
- 將生成證書所需的所有必需信息發送給頒發機構。這需要將公鑰、Host_ID和Host_Location_Code打包到要發送的證書消息中。頒發機構使用此信息生成證書,并使用頒發機構私鑰對其進行簽名。
- 生成設備的 ECDSA 密鑰對。
- 使用 GenEcc256KeyPair 函數為設備生成公鑰。請注意,此公鑰是可見的,但私鑰永遠不會被泄露,因為它會危及實際應用程序中的安全性。
- 啟動設備證書生成權限。
- 將設備證書、頒發機構私鑰和功能數據存儲在設備中。
- 將設備的證書寫入其內存。對于此應用程序,選擇第 0 頁和第 1 頁作為內存位置。
- 將頒發機構的公鑰寫入設備的內存。此應用程序選擇第 100 頁和第 101 頁。
- 將特征數據寫入設備的內存。為此選擇第 4 頁。注:有關哪個存儲器頁存儲哪些信息的更多信息,請參考DS28S60用戶指南。
- 為存儲的信息設置適當的內存保護。
- 為防止篡改新存儲的信息,請在包含設備證書和特征數據的頁面上設置寫保護。注意:對于 Jupyter 筆記本,請省略此步驟。
使用 ECDHE 和 AES-GCM 創建加密通道
要建立加密通道,主機和設備必須首先計算共享密鑰。為此,主機和設備會生成 ECDSA 密鑰對,但這些密鑰是臨時的。臨時密鑰是臨時密鑰。主機和設備啟動橢圓曲線 Diffie-Hellman (ECDH) 密鑰交換,以交換這些臨時密鑰并安全地生成共享密鑰。然后,此密鑰用于通過 AES-GCM 加密和解密數據。圖 3 描述了這種密鑰交換交互。
注: 為每個新的通信會話生成新的臨時密鑰對。
圖3.主機和設備交換臨時密鑰以計算共享密鑰。
以下步驟描述了如何執行 ECDH 密鑰交換:
- 定義Calculate_ECDH_Shared_Point和increment_aes_iv支持功能。
- 生成主機的臨時密鑰對。
- 使用 ecdsa 生成密鑰對。SigningKey.generate 和 .get_verifying_key 命令。
- 將密鑰對轉換為數組/列表。
- 使用 GenEcc256KeyPair 命令生成設備的臨時密鑰對。
- 計算主機端的 AES 密鑰(共享密鑰)和初始 AES IV。
- 使用密鑰交換命令計算設備端的 AES 密鑰和初始 AES IV,將主機的臨時公鑰作為參數。
此時,雙方生成相同的 AES 密鑰。因此,雙方現在都可以使用高級加密標準伽羅瓦/計數器模式(AES-GCM)對他們之間發送的數據進行加密和解密。圖 4 顯示了 AES-GCM 提供的加密通信通道。
圖4.主機和設備使用 AES-GCM 算法交換加密數據。請注意,IV 必須在每次傳輸時遞增,并且必須在兩端同步。
使用 ECDSA 的雙向身份驗證
相互身份驗證可以分為兩部分:使用證書驗證公鑰,以及使用數字簽名和通過ECDSA驗證算法驗證私鑰。ECDSA 算法涉及通過使用私鑰生成數字簽名來證明真實性的通信方。然后,對方方使用簽名、發送簽名的一方的公鑰和其他數據驗證這些數字簽名。加密安全的隨機數也用于該算法的簽名和驗證部分,以提高安全性。
使用證書頒發機構驗證公鑰
ECDSA 算法還用于使用各方的證書、權威機構的公鑰和各方的識別數據來驗證公鑰。此標識數據是主機的主機 ID 數據,以及設備的 ROM ID 和 MAN ID。圖 5 描述了在驗證各方公鑰方面交換此信息的過程。
圖5.主機和設備使用彼此的證書和 ECDSA 驗證算法驗證彼此的公鑰。
以下步驟演練如何對設備(步驟 1 到 4)和主機(步驟 5 到 7)的公鑰進行身份驗證:
- 從設備收集證書和證書消息數據以發送到主機。
- 在設備端,使用 ReadMemory 命令回讀設備公鑰的 X 和 Y 組件。對 ROM 和 MAN ID 重復此操作。
- 使用“讀取內存”命令讀回設備證書的“r”和“s”組件。
- 加密請求的數據并將其傳輸到主機。
- 連接證書消息數據(公鑰、ROM ID 和 MAN ID),然后連接證書(部分“r”和“s”)。
- 使用證書消息數據和證書作為 AesBulkEncrypt 命令的參數。
- 解密、提取和驗證主機端的數據。確保 AES IV 計數器遞增。
- 在主機端驗證提取的證書消息數據和證書以驗證公鑰。
- 從主機收集證書和證書消息數據,對其進行加密,然后將其發送到設備。
- 打包主機公鑰、Host_ID和Host_Location_Code的 X 和 Y 組件。
- 使用 encrypt_and_digest 命令加密證書和證書消息數據。不要忘記增加AES IV計數器。
- 使用 AesBulkDecrypt 命令解密設備端的數據。
- 在設備端驗證主機提取的證書消息數據和證書,以驗證公鑰。
使用數字簽名驗證私鑰
驗證設備的公鑰后,也要驗證設備的私鑰。為此,請首先使用設備的私鑰生成數字簽名。數字簽名包含設備特征數據、私鑰簽名以及主機發送的稱為質詢的隨機字節串。圖 6 說明了 ECDSA 簽名生成算法中使用的信息交換。
圖6.主機和設備交換挑戰,以生成從各自的私鑰派生的自己獨特的數字簽名。
以下步驟介紹如何使用 ECDSA 簽名生成和 ECDSA 簽名驗證算法來完成設備(步驟 1 到 5)和主機(步驟 6 到 9)的身份驗證:
-
生成要發送到設備的質詢。
-
使用質詢和其他要素數據創建數字簽名和簽名消息。
- 使用 ComputeAndReadPageAuthentication 命令創建簽名。
- 連接 ROM ID、特征數據、主機質詢、數據頁、MAN ID 和命令代碼字節以創建簽名消息。
-
使用 AesBulkEncrypt 加密簽名和數據,然后將其發送到主機。
-
解密并驗證主機端的數據,提取簽名和簽名消息數據,并遞增 AES IV 計數器。
-
重建簽名消息,并使用設備公鑰驗證解密的簽名和簽名消息數據。圖 7 描述了 ECDSA 簽名驗證算法,并顯示了驗證所需的信息片段。
- 按以下順序構建和連接驗證所需的數據:ROM ID、功能數據、主機質詢、功能數據頁面、MAN ID、命令代碼。
圖7.主機和設備使用 ECDSA 簽名驗證算法和所有相關數據驗證彼此的私鑰。 -
生成質詢以使用 ReadRng 命令發送到主機。
-
使用質詢和主機數據(Host_ID、Host_Location_Code和主機特征數據)創建數字簽名和簽名消息。
-
對特征數據、簽名和簽名消息進行加密,并將其發送到設備。不要忘記更新 AES IV 計數器。
-
使用 AesBulkDecrypt 命令在設備端解密接收到的數據。
-
使用驗證 EcdsaSignature 命令驗證簽名和相關數據。
-
按以下順序構造和連接驗證所需的數據:主機 ID、設備質詢、主機功能數據、主機位置代碼
總結
雙向身份驗證可以通過關聯的 Jupyter 筆記本進行劃分和演示。本教程介紹了出廠設置/密鑰生成、ECDH 密鑰交換、使用 AES-GCM 加密和解密數據,以及通過安全通道進行通信以相互驗證主機和設備。除了配置和運行 Jupyter 筆記本所需的步驟外,此處還介紹了這些步驟。以下兩篇文檔提供了由DS28S60加密處理器提供的完全認證系統。
審核編輯:郭婷
-
傳感器
+關注
關注
2550文章
51035瀏覽量
753071 -
處理器
+關注
關注
68文章
19259瀏覽量
229651 -
計算機
+關注
關注
19文章
7488瀏覽量
87849
發布評論請先 登錄
相關推薦
評論