DEF CON 33 - RF Village - Meshtastic Under the Microscope From Chirps to Chat - Allan Riordan Ball
三句話摘要
Meshtastic 是利用 LoRa 啁啾擴頻調制技術實現的離網網狀網絡,講者詳細解釋其物理層信號調制、軟件定義無線電解碼方法,並示範如何逆向工程其數據包結構與傳輸機制。 Meshtastic 的強大源於 LoRa 啁啾擴頻的物理優勢,其應用層則是相對簡單可複製的 Protobuf + AES-256 結構,任何人只要掌握逆向工程知識就可自行構造並廣播訊息。 LoRa 啁啾擴頻調制與 FSK 的根本差異在於:不在兩個離散頻率間切換,而是讓頻率連續上升或下降編碼數據,這使信號能穿過背景雜訊,在低於噪聲基底的條件下仍可被正確接收,實現長距離低功耗通訊。
重點整理
重點- 1
LoRa 啁啾擴頻調制與 FSK 的根本差異在於:不在兩個離散頻率間切換,而是讓頻率連續上升或下降編碼數據,這使信號能穿過背景雜訊,在低於噪聲基底的條件下仍可被正確接收,實現長距離低功耗通訊。
- 2
Meshtastic 訊號三層結構:前導碼(重複啁啾用於同步)→同步字 0x2B(協議標識)→有效載荷(實際數據),接收器通過檢測重複符號自動對齐採樣網格,推算正確的符號邊界位置。
- 3
解碼鏈路多層化:信號下變頻→濾波→幀同步→啁啾解調→格雷碼映射→交錯反轉→去白化→CRC 檢查,每層使用不同開源工具,GNU Radio 流程圖整合 Joachim Tieman 的解調模組執行低層處理,最後用 Python 或 Lua 解析應用層 Protobuf 消息。
- 4
免許可頻譜的雙面性:無線電頻段允許任何人自由傳輸,講者示範用 Arduino 繞過官方客戶端直接廣播數據包,甚至可用迴圈連續發送,展示出協議的易於複製性和潛在的濫用風險。
實用技巧與重點
乾貨- 頻率與配置:
- DEF CON Meshtastic 推薦配置頻率:917 MHz
- 預設模式:「短時加速」(Turbo)
- 灣區常用模式:中慢速
- LoRa 擴展因子(SF)= 7,符號範圍 0~127
- 訊號結構:
- 前導碼:多個重複啁啾符號
- 同步字:0x2B(one byte symbol)
- 載荷:實際應用數據
- 數據包結構:
- 頭部:16 位元組明文(含目的地址、發送地址、數據包 ID、標誌位、頻道號)
- 有效載荷:AES-256 加密
- 加密方式:密鑰預共享
- 軟件工具:
- 信號錄製:GQRX(軟件定義無線電接收器)
- 信號可視化:Inspectrum(時頻分析,支援網格對齐)
- 解調處理:GNU Radio(開源流程圖軟件)
- 協議分析:Wireshark(含自訂 Lua 解析器)
- 硬件設備:
- 軟件無線電:HackRF(可發射),RTL-SDR(低成本接收)
- Meshtastic 裝置:T1000 等(口袋大小)
- 發送端:Arduino + LoRa 模組(Amazon 上有售)
- 節點傳輸內容:
- 節點名稱(名字、簡稱、全名)
- 硬體型號
- 加密直訊用公鑰
結論
結論“Meshtastic 的強大源於 LoRa 啁啾擴頻的物理優勢,其應用層則是相對簡單可複製的 Protobuf + AES-256 結構,任何人只要掌握逆向工程知識就可自行構造並廣播訊息。”
完整解析
詳細Meshtastic 是構建於 LoRa 物理層上的應用層通訊系統,講者系統性地揭露了從無線電信號捕獲、解調、協議解析到自行發送訊息的全套技術細節。
LoRa 採用的啁啾擴頻調制(Chirp Spread Spectrum)是核心創新。與傳統頻移鍵控(FSK)在兩個離散頻率間切換不同,LoRa 讓頻率在整個頻寬內連續上升或下降,形成"啁啾"波形。這種設計的妙處在於能在噪聲基底以下工作——即便信號強度低於背景雜訊,通過相關處理(與反向啁啾相乘後進行傅里葉變換)仍能恢復出主導頻率信息。講者用 Inspectrum 工具展示了這一點:直觀的時頻圖像中,啁啾訊號呈現明顯的向上或向下波紋,這正成為 Meshtastic 標誌的視覺來源。
信號的物理層結構分三段。前導碼由多個相同的啁啾符號組成,接收器通過檢測這些重複模式自動同步,推斷出正確的採樣邊界位置——即使接收器初始對齐位置錯誤,持續看到相同符號值也能指示出需要的移位量。同步字 0x2B 標記著 Meshtastic 協議的開始,後續內容才是應用數據。這種"摸黑對齐"的機制巧妙地解決了無時鐘接收的難題。
解碼需要多層信號處理。GNU Radio 流程圖首先將接收信號下變頻至基帶(零頻率)並濾波,接著進行幀同步(確定包邊界)。核心解調由 Joachim Tieman 開源的模組執行:它與反向啁啾進行複數相乘,將上升啁啾信號"壓平"成類似 FSK 的直線信號,再進行傅里葉變換找出主導頻率,最終恢復出符號序列。隨後的格雷碼映射利用格雷碼的特性減少誤讀影響(相鄰數字間只差一個比特,避免 FSK 中 63↔64 的大誤差),交錯反轉將來自單個位元組的比特分散到多個符號上以提高糾錯能力,去白化則移除偽隨機序列以還原原始位元。
應用層則由 Protobuf 序列化格式定義。數據包前 16 位元組為明文頭部,包含目的地址、發送者地址、數據包 ID 和跳數限制(防止無限轉發),其後是 AES-256 加密的有效載荷。講者用 Wireshark 配合自訂 Lua 解析器展示了逐位元組的結構分析:在互動式界面中點擊任何欄位都能看到其含義和值,使複雜的二進制協議變得可讀。節點之間傳輸的既有文字訊息,更多是節點元數據(名稱、硬體型號、公鑰),用於構建網絡拓撲。
最後的實踐示範尤為大膽。講者用 Arduino 搭配低成本 LoRa 模組,繞過 Meshtastic 官方客戶端,直接用十六進制命令構造符合協議的數據包並廣播。代碼邏輯簡單:生成 Protobuf 位元組、用預共享密鑰加密、附加頭部即可發送。講者甚至示範了在迴圈中連續發送訊息(儘管最初因頻道設定錯誤未被接收),清楚地表明任何掌握協議結構的人都能自行發訊息,暴露出免許可頻譜開放性帶來的安全隱患——沒有載波偵聽、無碰撞避免、無源驗證,純粹依賴物理層的訊號傳輸。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

