資料介紹
描述
介紹
“我在那里”創建由 Azure Sphere 設備簽名的安全臨時 QR 令牌(JSON Web 令牌)以供以后驗證。
問題
在許多情況下,我們必須表明我們曾在某個地點和某個時間出現過。
我們不希望用戶必須事先被識別,因此身份證(磁卡、芯片卡、非接觸式卡或帶有 NFC 標簽的智能手機)等解決方案不值得我們使用。也不值得使用生物特征識別的解決方案。
典型用例
- 獎勵使用回收箱的市民。
- 一名送貨員或送貨員,以證明她/他去了一個收集點。
- 為那些來到某些商店的人提供忠誠度積分。
- 記錄內部和外部員工的簽入和簽出
- 記錄清潔工何時進入和離開清潔某個區域。
解決方案
IWT (I Was There) 生成帶有日期標記的 QR 碼,該標記獨立于人,經過簽名且是唯一的,以避免對其進行修改,以保證該標記以后未被修改。
IWT 的原型實施,用于獎勵回收公民的計劃:
它是如何工作的
- 用戶接近 IWT 設備。
- 然后,用戶按下按鈕,或檢測到門的關閉或打開事件,或者通過接近傳感器通知設備生成新的二維碼。
- 設備離線生成一個新的二維碼,其中包含簽名的 JWT 令牌、JSON Web 令牌,包括唯一標識符和令牌發布的日期和時間。
- 然后設備在低功耗電子紙顯示器上顯示二維碼。
- 異步地,設備向 Azure 云發送事件以記錄和監控新的 QR 請求
- 用戶可以使用任何相機捕捉圖像以供以后驗證,或者可以使用特定的應用程序來驗證令牌。
- 在一段可配置的時間后,令牌從屏幕上消失,設備準備好生成下一個令牌。
- 對于忠誠度計劃,IWT 設備可以從 IOT Central 平臺發出編程的獎勵消息。
或者,該設備可以生成一個聽不見的聲音信號,該信號可以用任何錄音設備錄制(實施待定)。
挑戰
在解決方案的設計過程中,我遇到了幾個影響最終解決方案的問題:
- 無法使用 Azure Sphere Pluton 安全子系統來加密數據。此外,Azure Sphere 目前不提供用于加密的 API。此外,也沒有可用于檢索設備標識符的 API 函數。
- 官方 JSON Web Token (JWT) 庫使用 OpenSSL 或 GnuTLS,這些庫對于這個嵌入式系統來說太重了。
- 沒有用于 Azure Sphere 設備的 waveshare 電子紙顯示庫。
克服障礙
我的第一個決定是嘗試合并一個加密處理器模塊來執行加密、簽名和存儲加密密鑰。不幸的是,我仍然沒有按時收到密碼模塊,不得不選擇軟件解決方案。
- 對于密碼學,我決定使用 wolfCrypt 庫。幸運的是,wolfSSL 發布了一個 Visual Studio 解決方案,其中包含用于 wolfCrypt 庫的加密算法測試。
- JWT 令牌直接使用字符串函數形成,無需使用任何臨時庫。
- 我為waveshare 1.54英寸電子紙模塊顯示器做了一個STM32 EPD驅動的適配。
設計
硬件包括安富利 Azure Sphere MT320 入門套件開發套件和 Waveshare 1.54 英寸電子紙模塊電子墨水顯示器。
Microsoft Azure Sphere 解決方案的優勢
Avnet Azure Sphere MT320 入門套件
- Azure Sphere MT3620 入門套件支持使用 Avnet 認證的 Azure Sphere 模塊進行快速原型制作,該模塊基于 Microsoft MT3620AN 設備。
- MT3620 是首款通過 Azure Sphere 認證的“微控制器”,是一款具有“端到端安全性”的 SoC 物聯網設備。
- 用戶應用程序可以針對它的 500 MHz ARM Cortex-A7 內核以及兩個旨在支持實時要求的通用 200 MHz ARM Cortex-M4F I/O 子系統內核。片上外設(GPIO、UART、I2C、SPI、I2S、PWM 和 ADC)可以映射到這三個用戶可訪問內核中的任何一個。
微雪1.54寸電子紙模組電子墨水屏
- 選擇電子墨水屏是因為它具有顯示二維碼的良好品質,并且在具有這些特性的項目中具有較低的功耗。
- 它是一個電子墨水顯示模塊,1.54英寸,200 x 200分辨率,帶有嵌入式控制器,通過SPI接口通信,支持局部刷新。
- 特點:低功耗、寬視角、無電顯示清晰。
軟件設計
狀態圖
- 空閑顯示“按A”
- 獎勵顯示與 QR 關聯的獎勵(如果有)
- JWT_QR問題并顯示新的 QR 令牌
- 時鐘顯示時間時鐘
- 設置顯示設置
- 同步設置 與 Azure 云同步設置
- Azure 云異步任務發送/接收/同步云數據
用戶界面
空閑屏幕
在空閑狀態期間,屏幕顯示按下 A 按鈕以獲取新 QR 的指示
獎勵畫面
如果收到下一個 QR 的新獎品狀態,則按下按鈕 A 后,將顯示與 QR 關聯的獎品。客戶忠誠度計劃的選項。
二維碼屏幕
然后是包含簽名的 JWT 令牌的新 QR 碼。從 Azure 云中設置的時間將處于此狀態。
時鐘屏幕和設置
按下 B 按鈕時,會顯示帶有設備當前時間的時鐘,如果再次按下,則會顯示應用程序設置。
?
創建 JWT 令牌 QR
JWT 令牌 QR 剖析
QR 碼包含此字符串:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlMmRhNzc3My1hN2NkLTQ0YTAtODVkNy00M2ZlMDY1NGNiMjItN2RjNTQ4MTEtNWRjYjBjNzAiLCJpYXQiOjE1NzM1ODgwODB9.Dm8qKzv5n0EHMCcIECn08Ev_eppzPNc-hGtuICCNGK0
它是一種緊湊形式的 JSON Web 令牌。JWT 通常如下所示:xxxxx.yyyyy.zzzzz
JSON Web Token (JWT) 是一種緊湊的 URL 安全方式,用于表示要在兩方之間傳輸的聲明。JSON Web Token (JWT) 是一個開放標準 (RFC 7519)。JWT 中的聲明被編碼為 JSON 對象,用作 JSON Web 簽名 (JWS) 結構的有效負載或用作 JSON Web 加密 (JWE) 結構的明文。此信息可以被驗證和信任,因為它是經過數字簽名的。JWT 可以使用秘密(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公鑰/私鑰對進行簽名。https://tools.ietf.org/html/rfc7519
它由以點(.)分隔的三部分組成,分別是:
- 標頭:包含令牌的元數據,它至少包含簽名類型和加密算法。
- Payload/Claim:包含我們要傳輸的信息,
- Signature:使用header和payload計算得出,也可以驗證內容沒有被篡改。
這三部分的內容都是Base64Url編碼的。對上述token的三部分進行解碼:
Header :聲明編碼對象是一個 JSON Web Token,并且它是使用 HS256 算法簽名的。
{
"alg": "HS256",
"typ": "JWT"
}
Payload /Claim :我們正在使用兩個已注冊的聲明名稱。在 JWT 的上下文中,聲明可以定義為關于實體的聲明,以及關于令牌本身的附加元數據。服務器可用于正確處理 JSON Web Token 身份驗證的聲明和聲明。我們可以提供多種索賠;這些包括已注冊的聲明名稱、公共聲明名稱和私人聲明名稱。
- iat :“頒發于”時間,以 Unix 時間表示,頒發令牌
- jti :JWT ID 聲明為 JWT 提供了唯一標識符
{
"jti": "e2da7773-a7cd-44a0-85d7-43fe0654cb22-7dc54811-5dcb0c70",
"iat": 1573588080
}
https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-10.1
簽名:數字簽名或消息驗證代碼 (MAC)。
https://tools.ietf.org/html/rfc7515
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
[your-256-bit-secret]
)
保護 JWT 令牌
Azure sphere 不提供 API 來為來自 A7 和/或 M4 子系統的加密函數調用獲取硬件支持/加速。所以我們正在使用 wolfSSL 嵌入式 SSL 庫(以前稱為 CyaSSL)
狼SSL
wolfSSL 嵌入式 SSL 庫(以前稱為 CyaSSL)是一個用 ANSI C 編寫的輕量級 SSL/TLS 庫,適用于嵌入式、RTOS 和資源受限環境——主要是因為它的體積小、速度快和功能集。由于其免版稅定價和出色的跨平臺支持,它也常用于標準操作環境。wolfSSL 支持當前 TLS 1.3 和 DTLS 1.2 級別的行業標準,比 OpenSSL 小 20 倍,wolfSSL 由 wolfCrypt 庫提供支持。
https://github.com/wolfSSL/wolfssl/tree/master/IDE/VS-AZURE-SPHERE
鍵控哈希 HMAC
wolfCrypt 目前提供 HMAC 來滿足消息摘要的需要。結構 Hmac 位于標題“wolfssl/wolfcrypt/hmac.h”中。
HMAC 初始化是用 wc_HmacSetKey() 完成的。對于我們使用 HMAC SHA-256 的項目
標頭
{"alg":"HS256","typ":"JWT"}
BASE64 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
BASE64URL eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
有效載荷
{"sub":"1234567890","name":"John Doe","iat":1516239022}
BASE64 eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ==
BASE64URL eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
驗證簽名
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
0123456789ABCDEF0123456789ABCDEF )
結果是:
HMACSHA256(eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ,
0123456789ABCDEF0123456789ABCDEF)
最后:
HEX A650E04A6412F8B67A06942E513556D35C9BE22FC8EA12D92970AACFB76B6EED
HEX2B64 plDgSmQS+LZ6BpQuUTVW01yb4i/I6hLZKXCqz7drbu0=
B642B64URL plDgSmQS-LZ6BpQuUTVW01yb4i_I6hLZKXCqz7drbu0
編碼令牌
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
.plDgSmQS-LZ6BpQuUTVW01yb4i_I6hLZKXCqz7drbu0
hmac hmac;
byte key[24]; /*fill key with keying material*/
byte buffer[2048]; /*fill buffer with data to digest*/
byte hmacDigest[SHA256_DIGEST_SIZE];
wc_HmacSetKey(&hmac, SHA256, key, sizeof(key));
wc_HmacUpdate(&hmac, buffer, sizeof(buffer));
wc_HmacFinal(&hmac, hmacDigest);
hmacDigest 現在包含緩沖區中散列數據的摘要。
生成二維碼
我們正在使用 Richard Moore QR Code 庫,這是一個用 C 語言生成 QR 碼的簡單庫,針對處理和內存受限系統進行了優化。
特征:
- 基于堆棧(不需要堆;但如果需要,您可以使用堆)
- 低內存占用(相對)
- 編譯時剝離不必要的邏輯
- 麻省理工學院執照;
https://github.com/ricmoo/QRCode
走向云端
實施步驟
- 創建自定義 IoT Central 應用程序
- 創建設備模板
- 將 QR 請求事件添加到測量選項卡
- 將切換控件添加到“設置”選項卡:RGB LED 控件、WWAN 和 APP LED 控件
- 將應用程序信息添加到屬性選項卡
- 應用版本
- 當前 SSID
- BSSID
- 當前的 Wi-Fi 射頻
資源
監控 Qr 請求
每當新的每周 QR 碼異步發布到 Azure 云時,在構建應用程序時發送到 Azure IoT Central 或 Azure IoT Hub。
下圖中看到的點對應于按下 A 按鈕后或當簧片開關檢測到從打開到關閉的步驟時生成 QR 碼的事件。
我們可以看到帶有生成的 QR ID 的事件的詳細列表視圖。
編程顯示新消息
新的獎勵或信息消息可以從 IoT Central 編程或完全禁用。
獲取設備信息
特性
Key Value
userLedRed true | false enables/disables the red LED of the user RGB LED
userLedGreen true | false enables/disables the green LED of the user RGB LED
userLedBlue true | false enables/disables the blue LED of the user RGB LED
appLed true | false enables/disables the application LED
wifiLed true | false enables/disables the WI-FI LED
集成電子紙顯示
Waveshare 1.54inch e-Paper V2概述
1.54英寸電子紙V2是一款有源矩陣電泳顯示器(AMEPD),具有接口和參考系統設計。1.54”活動區包含200×200像素,具有1位黑白全顯示能力。集成電路包含柵極緩沖器、源極緩沖器、接口、時序控制邏輯、振蕩器、DC-DC。SRAM.LUT、VCOM 和邊框隨每個面板提供。
https://www.waveshare.com/wiki/1.54inch_e-Paper_Module
引腳圖
此表顯示了 eINK click 上的引腳分配如何對應于 mikroBUS? 插座上的引腳分配(后者顯示在中間的兩列中)。
單擊 Socket #1 引腳分配
源代碼引腳定義
#define AVT_MODULE_GPIO31_SCLK1_TXD1 (GPIO_Id)31
#define AVT_MODULE_GPIO32_MOSI1_RTS1_CLK1 (GPIO_Id)32
#define AVT_MODULE_GPIO33_MISO1_RXD1_DATA1 (GPIO_Id)33
#define AVT_MODULE_GPIO34_CSA1_CTS1 (GPIO_Id)34
#define EPAPER_DC (GPIO_Id)0
#define EPAPER_BUSY (GPIO_Id)2
#define EPAPER_RESET (GPIO_Id)16
#define EPAPER_SCLK AVT_MODULE_GPIO31_SCLK1_TXD1
#define EPAPER_MOSI AVT_MODULE_GPIO32_MOSI1_RTS1_CLK1
#define EPAPER_CS AVT_MODULE_GPIO34_CSA1_CTS1
通訊協議
SPI接口
與傳統的SPI協議不同,從機到主機的數據線是隱藏的,因為設備只有顯示需求。
CS為slave片選,當CS為低電平時,芯片使能。(CS#) 是連接到 MCU 的片選輸入。該芯片啟用 MCU 通信:僅當 CS# 被拉低時。
DC為數據/命令控制引腳,DC=0時寫命令,DC=1時寫數據。(D/C#) 是連接到 MCU 的數據/命令控制引腳。當引腳被拉高時,數據將被解釋為數據。當引腳被拉低時,數據將被解釋為命令。
SCLK 是 SPI 通信時鐘。
SDIN是SPI通信中主機到從機的數據線。
(RES#)為復位信號輸入。復位為低電平有效。注 1.5-4:此引腳(BUSY)為忙狀態輸出引腳。當 Busy 為高電平時,芯片的運行不應中斷,也不應向模塊發出任何命令。當驅動 IC 工作時,驅動 IC 會將 Busy 引腳置為高電平,例如: - 輸出顯示波形;或 - 與數字溫度通信。
(BS1) 用于 3 線 SPI 或 4 線 SPI 選擇。當它為“低”時,選擇 4 線 SPI。當它為“高”時,選擇 3 線 SPI(9 位 SPI)。
SPI通信有數據傳輸時序,由CPHA和CPOL組合而成。
- 1. CPOL 決定空閑狀態下串行同步時鐘的電平。當 CPOL = 0 時,電平為 Low。然而,CPOL對傳輸影響不大。
- 2、CPHA決定數據是在串行同步時鐘的第一個時鐘沿還是第二個時鐘沿采集;當 CPHL = 0 時,在第一個時鐘邊沿收集數據。
SPI有4種通信模式。常用SPI0,其中CPHL=0,CPOL=0。
數據傳輸在SCLK的第一個下降沿開始,在一個時鐘周期內傳輸8位數據。這里使用SPI0,數據按位傳輸,MSB在前。
感知用戶
除了在按下按鈕時啟動新的二維碼之外,我們還可以在它檢測到用戶何時使用接近傳感器使用回收容器時激活它。
#define AVT_MODULE_GPIO42_ADC1 MT3620_GPIO42
#define AVT_SK_CM1_AN AVT_MODULE_GPIO42_ADC1
#define PROXIMITY_GPIO AVT_SK_CM1_AN
我們使用干簧管和磁鐵來檢測用戶是否打開了容器門。
我們將使用的簧片開關是常開的。我們有兩種選擇來檢測門何時完全關閉或門何時完全打開。對于這個項目,我們將使用第一個替代方案:
檢測門完全關閉:當門關閉時,磁鐵使干簧管閉合,并一直處于該狀態,直到門被打開。我們將干簧管接地,然后通過 4.7K 拉高 GPIO 引腳 42。在關閉狀態下將讀取低。當從高到低時,將發送新 QR 的事件,即當門再次完全關閉時,獎勵用戶在使用后關閉門 :D。
?
?
開發工具
驗證二維碼
從帶有 QR 掃描儀的 Android 設備:
驗證 JWT
使用 JWT 調試器驗證簽名:https ://jwt.io/#debugger
?
?
- 使用python創建安全攝像頭
- 構建安全原封不動的門鈴
- 如何創建和使用LabVIEW中的LLB文件 0次下載
- UCC28610的QR反激準諧振開關電源設計
- 高效率低待機QR模式適配器的設計 19次下載
- Visual C++和MFC創建的應用程序基礎知識 0次下載
- allegro與PADS的區別及創建PCB封裝的步驟 66次下載
- 質量證書:Ansi 2020 ams Asia ESD Cert_QR_2018-2019.pdf
- 如何使用感興趣區域和RS編碼機制的QR碼美化算法 21次下載
- AN1246中文手冊之如何在Microchip圖形庫中創建控件
- 啟動程序臨時圖形用戶界面 3次下載
- 基于令牌的共享資源分配算法_雷鳴 0次下載
- 基于QR Code條碼的飛機加油統計系統
- 奇瑞QQ6維修手冊(QR513變速箱部分)
- 基于令牌總線和工業以太網的控制系統
- 不同創建線程安全Set的方式 506次閱讀
- 臨時用電裝置的選擇 1050次閱讀
- 臨時用電的要求事項 4415次閱讀
- 使用MPU監控創建安全可靠的嵌入式系統 使用MPU監控的原因和好處 702次閱讀
- 如何構建安全軟件 405次閱讀
- 如何用MAXQ1065創建安全的谷歌到物聯網核心連接 826次閱讀
- 使用經過驗證的CXL IDE構建安全芯片 1223次閱讀
- 詳解QR模式下的反激變換器 1.1w次閱讀
- 如何用MAXQ1065創建安全的谷歌到物聯網核心連接 730次閱讀
- 基于制作RFID門鎖創建安全系統的設計實驗 1605次閱讀
- 準同步的功率集成電路ICE2QR0665的性能特點及應用 6852次閱讀
- EVAL-2QR0665G-28W16V開關電源功能分析 5803次閱讀
- 采用ST72F65控制器實現基本型或增強型的安全U盤軟硬件設計 2123次閱讀
- 在貼片加工廠中有哪些安全防護需要了解 1306次閱讀
- 令牌環網概念_令牌環網工作原理_令牌環網為什么沒人用 1.2w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多