跳至主要內容

驗證 OneKey 發布的韌體檔案與開源程式碼的一致性

今日已更新

OneKey 的硬體錢包系列產品的韌體是全開源的,您可以在 OneKey 的 GitHub 倉庫中查看相關產品的韌體開源程式碼。在正式發布用於批量生產的韌體檔案之前,OneKey 團隊會通過 GitHub 自動化建置工具(GitHub CI)從相應的韌體倉庫中編譯和打包韌體原始碼。再由 OneKey 內部人員進行簽名後發布正式的韌體檔案。這篇文章提供給您一種自我驗證的方法,透過比較正式簽名發布前後檔案的 Checksum 來驗證韌體檔案與開源程式碼的一致性。

關於如何透過 SHA-256 加密雜湊函數(比對 Checksum)驗證不同檔案的源數據一致性的方法,可以參考這篇文章

韌體程式碼開源倉庫

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

驗證硬體驗證程式碼影片教學如下

韌體發布流程

當有正式的韌體或藍牙韌體準備發布時,OneKey 團隊會透過執行對應倉庫的 Action 對開源的程式碼進行編譯簽名,編譯成功後會上傳到 GitHub Artifacts 儲存,等待團隊完成內部簽名後,放置到 OneKey 的 CDN 上。更新設定 config.json 完成後,在 OneKey App 和 OneKey 韌體更新網站 推送更新通知,提示用戶進行對應的韌體升級。具體流程參考下圖:

校驗目標

  1. 驗證「OneKey 團隊簽名的韌體檔案」是經過 OneKey 團隊多簽「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」後得來。

  2. 驗證「OneKey 團隊簽名的韌體檔案」和「OneKey 官方 CDN 儲存的韌體檔案」的一致性。

校驗前準備

系統韌體 藍牙韌體

✔ 下載「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」(未簽名)

  • 點擊 Artifacts 下的韌體名稱進行下載(需要登錄 GitHub)。

✔ 下載「OneKey 團隊簽名的韌體檔案」(已簽名)

✔ 下載 「OneKey 官方 CDN 儲存的韌體檔案」(已簽名)

  • 訪問 OneKey CDN 檔案:https://data.onekey.so/config.json

  • 找到您要驗證的韌體版本。

  • 複製「url」欄位下的連結。

  • 在瀏覽器新視窗打開,將自動為您下載 bin 檔案。

✔ 下載「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」(未簽名)

  • 點擊「Artifacts」下的韌體檔名啟動下載(需要提前登錄您的 GitHub 帳號)。

✔ 下載「OneKey 團隊簽名的藍牙韌體檔案」(已簽名)

✔ 下載 「OneKey 官方 CDN 儲存的藍牙韌體檔案」(已簽名)

  • 找到您想要驗證的版本號。例如:「pro」-「ble」-「version」:[2, 3, 1]。

  • 複製「webUpdate」下的韌體下載連結。

  • 在新的瀏覽器視窗訪問該連結,韌體檔案將自動下載。

✔ 下載並安裝 Python

校驗步驟

下面提供了兩個目標對應的驗證步驟:

系統韌體 藍牙韌體

使用「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」驗證

  • 打開 Terminal。

  • 運行指令(OneKey 團隊簽名的韌體):

    • tail -c +1024 /path/to/(檔案路徑) | shasum -a 256

  • 運行指令(OneKey 開源倉庫中 GitHub CI 簽名前的韌體):

    • tail -c +1024 /path/to/(檔案路徑) | shasum -a 256

  • 比對兩個指令生成的 Checksum。若結果相同,則可以確定兩個韌體檔案的程式碼一致性。

對於系統韌體來說(Classic、Mini 和 Touch 均適用),多簽後會在 CI 版本的韌體前增加 1024 位元組的簽名結果,在設備啟動時 bootloader 進行驗證。

使用「 OneKey 團隊簽名的韌體」驗證

  • 打開 Terminal。

  • 運行指令(OneKey 團隊簽名的韌體):

    • shasum -a 256 (檔案路徑)

  • 運行指令(OneKey 官方 CDN 儲存的韌體):

    • shasum -a 256 (檔案路徑)

  • 比對兩個指令生成的 Checksum。若結果相同,則可以確定兩個韌體檔案的程式碼一致性。

驗證目標一(藍牙)

使用「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」驗證(藍牙)

  • 在您下載的「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」中找到 ota.bin 檔案。

  • 在和 ota.bin 檔案同一個資料夾中打開一個 Terminal。

  • 在命令列中輸入 python3指令喚起 Python

  • 然後運行下面的命令來得到「OneKey 開源倉庫中 GitHub CI 簽名前的韌體檔案」的 Checksum 驗證和。

    • exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")

  • 運行相同的命令來獲取「OneKey 團隊簽名的韌體檔案」的 Checksum 驗證和。

    • ⚠️ 注意:需要將命令中的 ota.bin 換成您下載的「OneKey 團隊簽名的韌體檔案」的名字,例如:bluetooth-firmware-pro-2.3.1-20240729-96bb143.bin

  • 比對兩個指令生成的 Checksum。若結果相同,則可以確定兩個韌體檔案的程式碼一致性。

使用「 OneKey 團隊簽名的韌體」驗證(藍牙)

  • 在您下載的「OneKey 團隊簽名的韌體檔案」的相同資料夾下,打開一個 Terminal。

  • 在命令列中輸入 python3指令喚起 Python

  • 複製下面的命令。

    • exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")

  • ota.bin 改成您下載的「OneKey 團隊簽名的韌體檔案」的檔名,例如:bluetooth-firmware-pro-2.3.1-20240729-96bb143.bin

  • 運行修改後的命令獲取「OneKey 團隊簽名的韌體檔案」的 Checksum 驗證和。

  • 重複上面相同的步驟來獲取「OneKey 官方 CDN 儲存的韌體檔案」的 Checksum 驗證和。

  • 比對兩個指令生成的 Checksum。若結果相同,則可以確定兩個韌體檔案的程式碼一致性。

是否回答了您的問題?