本應(yīng)用筆記詳細介紹了DS28S60與Jupyter筆記本配合使用進行雙向認證的基本應(yīng)用。它使用分步方法來演練設(shè)置設(shè)備和所有相關(guān)軟件,創(chuàng)建用于通過 ECDHE 密鑰交換加密數(shù)據(jù)的共享密鑰,使用 AES-GCM 加密和解密數(shù)據(jù),以及通過 ECDSA 簽名生成和驗證完成相互身份驗證。
介紹
本應(yīng)用筆記介紹了DS28S60加密處理器的工作原理,概述了使用DS<>S<>器件建立基于主機和客戶端的系統(tǒng),用于密鑰生成和交換、加密和雙向認證。此用法在隨附的 Jupyter 筆記本中有詳細說明。首先,讓我們討論通過非對稱密鑰交換生成主機和客戶端使用的共享密鑰或共享對稱密鑰。接下來,讓我們概述如何使用共享對稱密鑰來加密設(shè)備和主機之間的通信。最后,讓我們演練使用數(shù)字證書和簽名的相互身份驗證過程。
系統(tǒng)加密概述
在系統(tǒng)成員之間交換任何數(shù)據(jù)之前,DS28S60首先通過創(chuàng)建加密通道來保護各方之間的通信。此示例中的各方包括設(shè)備、主機和第三方頒發(fā)機構(gòu):
- 設(shè)備 :也稱為客戶端。這是包含DS28S60的實體,它必須與主機通信。例如,這可能是一個傳感器節(jié)點。
- 主機 :通常是服務(wù)器或計算機。這是必須與設(shè)備通信的實體。
- 頒發(fā)機構(gòu):稱為第三方/證書 頒發(fā)機構(gòu) 。這是受信任方,它向主機和設(shè)備提供證書以相互驗證。
圖 1 顯示了主機和設(shè)備之間建立和使用加密通道的交互。

圖1.加密通信通道的系統(tǒng)概述。
系統(tǒng)身份驗證概述
簡而言之,系統(tǒng)身份驗證是驗證主機和設(shè)備的公鑰和私鑰以驗證各方身份的過程。請注意,在啟動與密鑰對或任何其他敏感信息相關(guān)的任何數(shù)據(jù)交換之前,所有各方之間的通信都是加密的。圖 2 顯示了身份驗證過程中主機、設(shè)備和頒發(fā)機構(gòu)之間的交互。

圖2.使用權(quán)威實體幫助的雙向身份驗證的系統(tǒng)概述
硬件、軟件和出廠設(shè)置
硬件設(shè)置
要運行DS28S60的Jupyter筆記本,需要DS28S60以外的兩個硬件,它們是DS28S60評估板的一部分。
- DS9121EQ+ 評估 TDFN 插座板,用作 DS28S60 處理器的集線器并容納 DS<>S<>。
- DS9482P# USB 轉(zhuǎn) I2C/SPI/1 線適配器,用于連接 DS9121EQ+ 插座板和主機。
使用評估板中的USB Micro B電纜將上位計算機與DS9482P#適配器連接。
軟件設(shè)置
配置硬件后,下一步是獲取并初始化軟件以運行 Jupyter 筆記本。這些步驟如下:
- 下載最新版本的 Python 及其相關(guān)庫以運行 Jupyter Notebook:
-
訪問下載 Python | Python.org 并下載最新版本的 Python( 安裝時選中“將 Python 添加到路徑”選項 )。
-
安裝 Python 后,如果使用 Windows,請打開命令提示符或任何類似的終端。若要安裝庫,請輸入運行筆記本需要以下庫。
pip install *TARGET LIBRARY*- 幼兒發(fā)展局
- 皮串行
- 密碼學(xué)
- Pycryptodome
- AES
- SPI
-
- 安裝并運行 Jupyter Notebook,然后導(dǎo)航到 DS28S60 Notebook 文件夾并運行 DS28S60 Jupyter Notebook 文件 'DS28S60_KeyExchange.ipynb'。有關(guān)下載 Jupyter 筆記本的說明,請訪問 Jupyter 項目 |安裝Jupyter。
注意:通過在 Jupyter 筆記本中的“硬件連接設(shè)置”部分下運行前兩個代碼塊,檢查軟件包是否已正確安裝,以及硬件是否已連接并成功工作。
出廠設(shè)置:ECDSA 密鑰生成和證書分發(fā)
要生成共享密鑰或共享對稱密鑰,請首先為主機和設(shè)備生成公鑰和私鑰。
以下步驟概述了密鑰對的安裝和存儲以及證書的分發(fā)。注意:從應(yīng)用筆記的這一點開始,每個編號的步驟在Jupyter筆記本中都有一個或多個關(guān)聯(lián)的代碼段,必須按順序運行這些代碼段才能完成雙向身份驗證。
- 生成主機的橢圓曲線數(shù)字簽名算法 (ECDSA) 密鑰對和識別信息。
- 在 Jupyter 筆記本中,預(yù)先選擇私鑰和公鑰數(shù)組以保持一致性。不要修改這些值。注意:對于實際應(yīng)用程序,這些數(shù)組永遠不會對任何人可見。
- 識別信息:同時預(yù)先選擇Host_ID和Host_Location_Code。不要修改這些值。
- 啟動托管證書生成的授權(quán)。
- 將生成證書所需的所有必需信息發(fā)送給頒發(fā)機構(gòu)。這需要將公鑰、Host_ID和Host_Location_Code打包到要發(fā)送的證書消息中。頒發(fā)機構(gòu)使用此信息生成證書,并使用頒發(fā)機構(gòu)私鑰對其進行簽名。
- 生成設(shè)備的 ECDSA 密鑰對。
- 使用 GenEcc256KeyPair 函數(shù)為設(shè)備生成公鑰。請注意,此公鑰是可見的,但私鑰永遠不會被泄露,因為它會危及實際應(yīng)用程序中的安全性。
- 啟動設(shè)備證書生成權(quán)限。
- 將設(shè)備證書、頒發(fā)機構(gòu)私鑰和功能數(shù)據(jù)存儲在設(shè)備中。
- 將設(shè)備的證書寫入其內(nèi)存。對于此應(yīng)用程序,選擇第 0 頁和第 1 頁作為內(nèi)存位置。
- 將頒發(fā)機構(gòu)的公鑰寫入設(shè)備的內(nèi)存。此應(yīng)用程序選擇第 100 頁和第 101 頁。
- 將特征數(shù)據(jù)寫入設(shè)備的內(nèi)存。為此選擇第 4 頁。注:有關(guān)哪個存儲器頁存儲哪些信息的更多信息,請參考DS28S60用戶指南。
- 為存儲的信息設(shè)置適當(dāng)?shù)膬?nèi)存保護。
- 為防止篡改新存儲的信息,請在包含設(shè)備證書和特征數(shù)據(jù)的頁面上設(shè)置寫保護。注意:對于 Jupyter 筆記本,請省略此步驟。
使用 ECDHE 和 AES-GCM 創(chuàng)建加密通道
要建立加密通道,主機和設(shè)備必須首先計算共享密鑰。為此,主機和設(shè)備會生成 ECDSA 密鑰對,但這些密鑰是臨時的。臨時密鑰是臨時密鑰。主機和設(shè)備啟動橢圓曲線 Diffie-Hellman (ECDH) 密鑰交換,以交換這些臨時密鑰并安全地生成共享密鑰。然后,此密鑰用于通過 AES-GCM 加密和解密數(shù)據(jù)。圖 3 描述了這種密鑰交換交互。
注: 為每個新的通信會話生成新的臨時密鑰對。

圖3.主機和設(shè)備交換臨時密鑰以計算共享密鑰。
以下步驟描述了如何執(zhí)行 ECDH 密鑰交換:
- 定義Calculate_ECDH_Shared_Point和increment_aes_iv支持功能。
- 生成主機的臨時密鑰對。
- 使用 ecdsa 生成密鑰對。SigningKey.generate 和 .get_verifying_key 命令。
- 將密鑰對轉(zhuǎn)換為數(shù)組/列表。
- 使用 GenEcc256KeyPair 命令生成設(shè)備的臨時密鑰對。
- 計算主機端的 AES 密鑰(共享密鑰)和初始 AES IV。
- 使用 Calculate_ECDH_Shared_Point 函數(shù),將設(shè)備的公鑰和主機的私鑰作為參數(shù)。
- 使用 SHA-256 哈希算法對計算的共享點進行哈希處理,以生成 AES 共享密鑰和 AES IV。
- 使用密鑰交換命令計算設(shè)備端的 AES 密鑰和初始 AES IV,將主機的臨時公鑰作為參數(shù)。
此時,雙方生成相同的 AES 密鑰。因此,雙方現(xiàn)在都可以使用高級加密標準伽羅瓦/計數(shù)器模式(AES-GCM)對他們之間發(fā)送的數(shù)據(jù)進行加密和解密。圖 4 顯示了 AES-GCM 提供的加密通信通道。

圖4.主機和設(shè)備使用 AES-GCM 算法交換加密數(shù)據(jù)。請注意,IV 必須在每次傳輸時遞增,并且必須在兩端同步。
使用 ECDSA 的雙向身份驗證
相互身份驗證可以分為兩部分:使用證書驗證公鑰,以及使用數(shù)字簽名和通過ECDSA驗證算法驗證私鑰。ECDSA 算法涉及通過使用私鑰生成數(shù)字簽名來證明真實性的通信方。然后,對方方使用簽名、發(fā)送簽名的一方的公鑰和其他數(shù)據(jù)驗證這些數(shù)字簽名。加密安全的隨機數(shù)也用于該算法的簽名和驗證部分,以提高安全性。
使用證書頒發(fā)機構(gòu)驗證公鑰
ECDSA 算法還用于使用各方的證書、權(quán)威機構(gòu)的公鑰和各方的識別數(shù)據(jù)來驗證公鑰。此標識數(shù)據(jù)是主機的主機 ID 數(shù)據(jù),以及設(shè)備的 ROM ID 和 MAN ID。圖 5 描述了在驗證各方公鑰方面交換此信息的過程。

圖5.主機和設(shè)備使用彼此的證書和 ECDSA 驗證算法驗證彼此的公鑰。
以下步驟演練如何對設(shè)備(步驟 1 到 4)和主機(步驟 5 到 7)的公鑰進行身份驗證:
- 從設(shè)備收集證書和證書消息數(shù)據(jù)以發(fā)送到主機。
- 在設(shè)備端,使用 ReadMemory 命令回讀設(shè)備公鑰的 X 和 Y 組件。對 ROM 和 MAN ID 重復(fù)此操作。
- 使用“讀取內(nèi)存”命令讀回設(shè)備證書的“r”和“s”組件。
- 加密請求的數(shù)據(jù)并將其傳輸?shù)街鳈C。
- 連接證書消息數(shù)據(jù)(公鑰、ROM ID 和 MAN ID),然后連接證書(部分“r”和“s”)。
- 使用證書消息數(shù)據(jù)和證書作為 AesBulkEncrypt 命令的參數(shù)。
- 解密、提取和驗證主機端的數(shù)據(jù)。確保 AES IV 計數(shù)器遞增。
- 在主機端驗證提取的證書消息數(shù)據(jù)和證書以驗證公鑰。
- 從主機收集證書和證書消息數(shù)據(jù),對其進行加密,然后將其發(fā)送到設(shè)備。
- 打包主機公鑰、Host_ID和Host_Location_Code的 X 和 Y 組件。
- 使用 encrypt_and_digest 命令加密證書和證書消息數(shù)據(jù)。不要忘記增加AES IV計數(shù)器。
- 使用 AesBulkDecrypt 命令解密設(shè)備端的數(shù)據(jù)。
- 在設(shè)備端驗證主機提取的證書消息數(shù)據(jù)和證書,以驗證公鑰。
- 使用“寫內(nèi)存”命令存儲主機公鑰的 X 和 Y 組件。
- 使用身份驗證 ECDSACertificate 命令驗證主機的證書。
使用數(shù)字簽名驗證私鑰
驗證設(shè)備的公鑰后,也要驗證設(shè)備的私鑰。為此,請首先使用設(shè)備的私鑰生成數(shù)字簽名。數(shù)字簽名包含設(shè)備特征數(shù)據(jù)、私鑰簽名以及主機發(fā)送的稱為質(zhì)詢的隨機字節(jié)串。圖 6 說明了 ECDSA 簽名生成算法中使用的信息交換。

圖6.主機和設(shè)備交換挑戰(zhàn),以生成從各自的私鑰派生的自己獨特的數(shù)字簽名。
以下步驟介紹如何使用 ECDSA 簽名生成和 ECDSA 簽名驗證算法來完成設(shè)備(步驟 1 到 5)和主機(步驟 6 到 9)的身份驗證:
-
生成要發(fā)送到設(shè)備的質(zhì)詢。
-
使用質(zhì)詢和其他要素數(shù)據(jù)創(chuàng)建數(shù)字簽名和簽名消息。
- 使用 ComputeAndReadPageAuthentication 命令創(chuàng)建簽名。
- 連接 ROM ID、特征數(shù)據(jù)、主機質(zhì)詢、數(shù)據(jù)頁、MAN ID 和命令代碼字節(jié)以創(chuàng)建簽名消息。
-
使用 AesBulkEncrypt 加密簽名和數(shù)據(jù),然后將其發(fā)送到主機。
-
解密并驗證主機端的數(shù)據(jù),提取簽名和簽名消息數(shù)據(jù),并遞增 AES IV 計數(shù)器。
-
重建簽名消息,并使用設(shè)備公鑰驗證解密的簽名和簽名消息數(shù)據(jù)。圖 7 描述了 ECDSA 簽名驗證算法,并顯示了驗證所需的信息片段。
- 按以下順序構(gòu)建和連接驗證所需的數(shù)據(jù):ROM ID、功能數(shù)據(jù)、主機質(zhì)詢、功能數(shù)據(jù)頁面、MAN ID、命令代碼。

圖7.主機和設(shè)備使用 ECDSA 簽名驗證算法和所有相關(guān)數(shù)據(jù)驗證彼此的私鑰。 -
生成質(zhì)詢以使用 ReadRng 命令發(fā)送到主機。
-
使用質(zhì)詢和主機數(shù)據(jù)(Host_ID、Host_Location_Code和主機特征數(shù)據(jù))創(chuàng)建數(shù)字簽名和簽名消息。
-
對特征數(shù)據(jù)、簽名和簽名消息進行加密,并將其發(fā)送到設(shè)備。不要忘記更新 AES IV 計數(shù)器。
-
使用 AesBulkDecrypt 命令在設(shè)備端解密接收到的數(shù)據(jù)。
-
使用驗證 EcdsaSignature 命令驗證簽名和相關(guān)數(shù)據(jù)。
-
按以下順序構(gòu)造和連接驗證所需的數(shù)據(jù):主機 ID、設(shè)備質(zhì)詢、主機功能數(shù)據(jù)、主機位置代碼
總結(jié)
雙向身份驗證可以通過關(guān)聯(lián)的 Jupyter 筆記本進行劃分和演示。本教程介紹了出廠設(shè)置/密鑰生成、ECDH 密鑰交換、使用 AES-GCM 加密和解密數(shù)據(jù),以及通過安全通道進行通信以相互驗證主機和設(shè)備。除了配置和運行 Jupyter 筆記本所需的步驟外,此處還介紹了這些步驟。以下兩篇文檔提供了由DS28S60加密處理器提供的完全認證系統(tǒng)。
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2576文章
55041瀏覽量
791345 -
處理器
+關(guān)注
關(guān)注
68文章
20255瀏覽量
252306 -
計算機
+關(guān)注
關(guān)注
19文章
7807瀏覽量
93202
發(fā)布評論請先 登錄
無線身份驗證的門禁控制系統(tǒng)設(shè)計方案
PN5180無法使用mifare classic進行身份驗證怎么解決?
什么是身份驗證和授權(quán)
什么是詢問握手身份驗證協(xié)議
什么是密碼身份驗證協(xié)議
python數(shù)據(jù)科學(xué)備忘單jupyter筆記本免費下載
使用DS28S60加密協(xié)處理器的基礎(chǔ)知識
比較DS28S60、MAXQ1061和MAXQ1065功能
基于DS28S60的雙向身份驗證示例
PyTorch教程23.1之使用Jupyter筆記本
比較DS28S60、MAXQ1061和MAXQ1065功能
DS28S60具有ChipDNA的DeepCover加密協(xié)處理器技術(shù)手冊
基于DS28S60的雙向身份驗證示例,使用Jupyter筆記本
評論