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