btstack移植之安全配對(二)

3.13.3 Legacy配對

首先,我們回復的paring response中,可以看到我們不支持secure connection,所以我們走的是legacy配對模式。

圖3-74 secure連接不支持

然后,master在pairing confirm包中回復了confirm value。

圖3-75 master發送confirm value

這個數值是master端生成一個隨機數后,將這個隨機數作為輸入,通過c1算法算出來的,叫做Mconfirm,接下來我們本地也需要生成一個隨機數,通過c1算一下,算出來一個Sconfirm發給對方。

圖3-76 配對phase2基本完成

到這一步我們的Sconfirm已經發過去了,流程進行到了這里

圖3-77 just works配對流程

接下來我們卡死在check for confirm value match這里。

圖3-78 confirm value fail

需要研究下C1算法了。

BLE的C1算法是藍牙傳統配對(Legacy Pairing)中用于生成確認值(Mconfirm/Sconfirm)的核心函數,以計算Mconfirm為例:

Mconfirm = c1(TK, Mrand, Pairing Request command, Pairing Response command, initiating device address type, initiating device address, responding device address type, responding device address)

其輸入參數如下:

?C1算法輸入參數?

?臨時密鑰(TK)?

128位臨時密鑰,由配對雙方通過Passkey Entry等方式協商生成(如用戶輸入的6位數字擴展為128位)?。

?隨機數(Rand)?

主設備生成的128位隨機數 ?Mrand? 或從設備生成的 ?Srand??13。

?設備地址(BD_ADDR)?

雙方設備的MAC地址(Initiator Address)和從設備的MAC地址(Responder Address)?23。?

雙方設備的地址類型

Public還是Random的

雙方的配對命令

Pairing Request Command和Pairing Response Command

上面這些參數中,藍牙地址、地址類型、隨機數都是空中包明文傳輸的,只有臨時秘鑰Tk是不可知的,但是在Just Works的場景下,Tk是固定值0,這也是為什么Just Works是不放置中間人攻擊的,適合于安全需求較低的場景。

我們現在出現的情況顯然是,C1計算的值和對端不一致,需要對比一下C1算法的輸入哪里出了問題。

圖3-79 C1算法過程

這里展開說兩句,C1算法需要調用兩次AES-128算法,對于這個算法,一般藍牙controller是支持硬件加速的,所以我們可以采用圖中的方式,將明文通過HCI LE Encrypt Command發送給controller,由controller進行AES-128計算后,通過HCI event返回host, 來減輕HOST的負擔。支持這個命令的前提是,藍牙初始化的時候,當Host詢問controller支持哪些命令的時候,controller得把對應的位置上。

圖3-80 Read Local Supported Commands

在代碼里,我們是使能的:

圖3-81 支持LE ENCRYPT COMMAND

當然,btstack也支持在host來直接進行AES計算,只要打開USE_BTSTACK_AES128這個宏就可以了。

仔細檢查上述變量的值,我們發現了問題所在:

圖3-82 發現參數錯誤

再往前翻一下,很快找到了根源

圖3-83 初始化返回給host的藍牙地址就是反的

原因找到了,我們的藍牙地址是01:23:45:67:89:ab,對方在計算C1的時候也是采用的這個藍牙地址作為參數來進行計算,但是當我們本地進行計算的時候,選用的藍牙地址的來源不是實際的藍牙地址,而是這個從HCI Send Read BD ADDR Command所得到的藍牙地址,導致錯誤。

看了一下CEVA的controller協議棧,果然針對這個命令回復是有bug的:

圖3-84 ceva返回讀藍牙地址命令的問題

修改一下,按照網絡字節序交換一下:

?

圖3-85 修改read bd addr命令回復代碼

這樣之后,后續的配對過程就很順暢了,最終的數據都是加密的:

圖3-86 數據加密了

C1算法就像情侶默契測試:

輸入:雙方生日(設備地址)、戀愛宣言(配對指令)、測試題(隨機數)

陷阱:地址字節序反了就像把生日8月5日記成5月8日

驗證:硬件加密加速相當于找算命先生合八字

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

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

相關文章

FRP配置( CentOS 7 上安裝 FRP教程 )

** 如果你們公司沒有公網IP,但是又想實現內網穿透,遠程調用接口,在家也能調用公司服務器,但是nkg ssl有問題,花生殼坑壁,那么FRP是你最佳的選擇!!!** 不過有個前提&#…

第三次mysql作業

建立庫建立mydb11_syu庫2.創建s表,創建sc表二.插入數據向s表插入數據2.向sc表插入數據三.查詢1.分別查詢student表和score表的所有記錄2.查詢student表的第2條到5條記錄3.從student表中查詢計算機系和英語系的學生的信息4.從student表中查詢年…

不同場景下git指令的搭配

添加賬號 git config --global user.name "YourName" git config --global user.email "your_emailexample.com"設置 Git 默認分支名稱為 main: git config --global init.defaultBranch main初始化倉庫: git init配置SSH 密鑰 如果…

NLP——遷移學習

一、遷移學習的概念 1.預訓練模型(Pretrained model) 定義: 簡單來說別人訓練好的模型。一般預訓練模型具備復雜的網絡模型結構;一般是在大量的語料下訓練完成的。 2.微調(Fine-tuning) 定義:一般是對預訓練語言模型,進行垂直領域數據的微調,…

Ubuntu 安裝

文章目錄硬件準備下載 Ubuntu 鏡像創建可啟動 USB從 USB 驅動器啟動安裝 Ubuntu不要忘記更新!用了十多年的筆記本,手邊正好有個500G的固態,準備換上。考慮到機器的硬件配置,現在使用windows10實在是有點卡,ubuntu卻剛好…

【46】MFC入門到精通——MFC顯示實時時間,獲取系統當前時間GetCurrentTime()、獲取本地時間GetLocalTime()

文章目錄1 MFC獲取時間方法方法一:獲取系統當前時間GetCurrentTime()方法二:獲取本地時間GetLocalTime()使用GetTickCount()獲取程序運行時間2 MFC顯示實時時間 使用方法2.1 獲取時間2.2 類向導 添加定時器函數 OnTimer2.3 初始化 設置定時器2.4 定時器函…

Linux717 SWAP擴容;邏輯卷條帶化

root192.168.235.20s password:┌────────────────────────────────────────────────────────────────────┐│ ? MobaXterm 20.0 ? ││ …

人類社會發展過程中的熵增定律

引子研究美國羅斯福新政期間的法案為什么會對美國經濟恢復起作用?與千金買馬骨和移木賞金之間的區別與聯系?以下為豆包 AI回答一、羅斯福新政法案對美國經濟起作用的原因羅斯福新政(1933-1939年)通過一系列政策應對大蕭條&#x…

Spring-AI系列-入門篇-核心概念、組件和生產要素

原文-Spring AI知識庫,歡迎大家評論互動 師父領進門,修行靠自己。 Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design an…

從瀏覽器到服務器:TCP 段的網絡傳輸之旅

本文以簡化的網絡架構為例,詳細介紹了當你在瀏覽器中輸入網址(例如www.google.com)并按下回車鍵后,TCP段的完整傳輸過程。我們將探討DNS解析、ARP、TCP/IP封裝、PAT和路由如何協同工作,將數據從個人電腦通過局域網和廣…

HCIE - 云計算拿下后的職業選擇如何規劃?

Hello!大家好,小編是一名專注 IT 領域的資深探索家。我們聊聊HCIE - 云計算,這個認證作為華為認證體系中云計算領域的專家級認證,標志著持有者具備企業級云架構設計、復雜云平臺運維及跨場景技術落地能力。但認證本身只是職業進階…

1-創建Vue3項目

創建Vue3項目前提 已安裝 18.3 或更高版本的 Node.js vue 官網 https://vuejs.org/ 創建一個 Vue 應用 ① 新建項目目錄,使用 VSCode 打開 VSCode 可安裝 Vue-Official 插件協助開發 ② 執行 create vue 指令創建 vue 應用 npm create vuelatest這一指令將…

Codex,Copilot 是什么

Codex是什么 Codex 是 OpenAI 研發的一款專注于代碼生成的大型語言模型,它可以根據自然語言描述自動編寫程序代碼,在軟件開發、自動化測試等領域展現出了強大的應用潛力。下面為你詳細介紹: 1. 核心功能 代碼生成:Codex 能夠依據自然語言指令生成代碼,像函數、類或者完整…

Typecho插件開發:自定義表單驗證規則addRule實戰指南

文章目錄 Typecho表單驗證進階:為插件和主題添加自定義addRule驗證規則 引言 一、Typecho表單驗證基礎 1.1 Typecho表單系統概述 1.2 addRule方法解析 二、自定義驗證規則實現 2.1 創建自定義驗證類 2.2 注冊自定義驗證規則 2.3 使用自定義驗證規則 三、高級驗證場景實現 3.1 …

數據分布是如何影響目標檢測精度的

文章目錄一、研究背景與目標模型效果提升數據集優化二、研究問題明細各方向的關聯性與核心邏輯1. 高質量數據集的高效篩選與主動學習應用2. 基于推理結果的數據補充與增強方向優化3. 多類別場景下目標尺度與模型精度的關聯性4. 損失函數與數據增強對精度的量化影響5. 目標類型專…

Python 網絡爬蟲 —— 代理服務器

一、會話(Session)(一)核心邏輯HTTP 本身無記憶,每次請求獨立。會話(Session) 就是為解決這問題,讓客戶端(瀏覽器)和服務器 “記住” 交互狀態(比…

Vue在線預覽Excel和Docx格式文件

前提:本次示例基于Vue2.x,所用插件為Vue-Office。 一、Vue-Office 插件簡介 Vue-Office 是一個一站式解決方案,支持多種 Office 文件格式的在線預覽,包括: Word(.docx)Excel(.xlsx、…

提升(Boosting)及 Python 示例

咱們結合這張圖,把 “提升” 想象成 “做錯題本 請老師補課” 的過程:第一波數據(最上面的圓圈):“第一次作業”假設你第一次做 100 道數學題(圖中圓圈里的綠點白點代表不同的題),做…

【生產實踐】Linux中NAS掛載丟失后提示“過舊的文件句柄”錯誤解決

太長不看版: 問題:nas掛載在系統里掉了,使用df或ls訪問目錄提示過舊的文件句柄解決過程: 和機房聯系,發現NAS服務器重啟了重新執行mount發現掛不上先umount掉當前掛載,再重新執行mount命令問題解決 umount …

JUnit4

JUnit4 介紹JUnit 是 Java 編程語言的單元測試框架,用于編寫和運行可重復的自動化測試。JUnit 特點:JUnit 是一個開放的資源框架,用于編寫和運行測試。提供注解來識別測試方法。提供斷言來測試預期結果。JUnit 測試允許你編寫代碼更快&#x…