メインコンテンツにスキップ

OneKeyがリリースしたオープンソースコードとファームウェアファイルの一貫性を認証します

OneKey avatar
対応者:OneKey
今週アップデートされました

OneKeyハードウェアウォレットは完全にオープンソースのファームウェアを特徴としています。関連製品のオープンソースファームウェアコードはOneKeyのGitHubリポジトリで閲覧できます。大量生産を目指したファームウェアファイルが正式にリリースされる前に、OneKeyチームはGitHubの自動ビルドツール(GitHub CI)を使用して、各ファームウェアリポジトリからファームウェアソースコードをコンパイルし、パッケージ化します。その後、ファイルは内部のOneKeyスタッフによって署名され、正式にリリースされます。

この記事では、公式チームのMulti-Sigの前後でファイルのチェックサムを比較することにより、ファームウェアファイルとオープンソースコードの一貫性を確認する自己検証方法を提供します。

異なるファイルのソースデータの一貫性をSHA-256暗号ハッシュ関数を使用して確認する方法については、この記事を参照してください。

オープンソースファームウェアリポジトリ

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

ファームウェアのリリースプロセス

公式の標準ファームウェアまたはBluetoothファームウェアがリリースの準備ができたとき、OneKeyチームは対応するリポジトリのActionを実行してオープンソースコードをコンパイルします。コンパイルが成功すると、ファイルはGitHub Artifactsストレージにアップロードされ、チームが内部のMulti-Sigを完了するのを待ちます。その後、OneKeyのCDNに配置されます。 config.json ファイルを更新した後、OneKeyアプリと OneKeyファームウェア更新ウェブサイト からユーザーにアップデート通知が送られ、ファームウェアのアップグレードを促します。具体的なプロセスについては、以下の図を参照してください。

onekey github verifiy.png

検証対象

  1. "OneKeyチームが署名したファームウェアファイル"がOneKeyのオープンソースリポジトリの"GitHub CIが事前に署名したファームウェアファイル"から派生したものであることを確認します。

  2. "OneKeyチームが署名したファームウェアファイル"と"OneKey公式CDNに保存されたファームウェアファイル"の一貫性を確認します。

検証の前提条件

標準ファームウェア Bluetoothファームウェア

GitHub CIからの事前署名ファームウェアファイル (署名なし)

  • 公式のOneKeyハードウェアファームウェアGitHubリリースに移動します: https://github.com/OneKeyHQ/firmware/releases

  • 検証したいファームウェアバージョンを見つけて、GitHub Actionリンクをクリックします。

github action.png
  • Artifactsの下のファームウェア名をクリックしてダウンロードします(GitHubへのログインが必要です)。

2.png

OneKeyチームによって署名されたファームウェアファイル (署名あり)

  • 公式のOneKeyハードウェアファームウェアGitHubリリースに移動します: https://github.com/OneKeyHQ/firmware/releases

  • 検証したいファームウェアバージョンを見つけます。

  • Assetsの下のbinファイルをクリックしてダウンロードします。

github release bin.png

OneKey公式CDNに保存されたファームウェアファイル (署名あり)

  • OneKey CDNファイルに移動します: https://data.onekey.so/config.json

  • 検証したいファームウェアバージョンを見つけます。

  • "url"フィールドの下のリンクをコピーします。

  • 新しいブラウザウィンドウで開くと、binファイルが自動的にダウンロードされます。

3.png

✔ GitHub CIからの事前署名ファームウェアファイル (署名なし)

pro-bluetooth-firmware-github-ci.png
  • Loginが必要な場合、アーティファクトの下にあるファームウェア名をクリックしてダウンロードします。

pro-bluetooth-firmware-github-ci-bin.png

✔ OneKeyチームによって署名されたファームウェアファイル (署名あり)

pro-bluetooth-firmware-github-release-signed.png

✔ OneKey公式CDNに保存されたファームウェアファイル (署名あり)

  • OneKey CDNファイルに移動します: https://data.onekey.so/config.json

  • 検証したいファームウェアバージョンを見つけます。

  • 「ble」-「webUpdate」フィールドのリンクをコピーします。

  • 新しいブラウザウィンドウで開き、binファイルを自動ダウンロードします。

pro-ble-firmware-cdn.png

✔ Pythonをダウンロードしてインストール

検証手順

以下は、先に設定した2つのターゲットの検証手順です:

標準ファームウェア Bluetoothファームウェア

GitHub CI で事前署名されたファームウェアの検証プロセス

  • ターミナルを開きます。

  • 以下のコマンドを実行します(OneKeyチームによって署名されたファームウェアファイル) :

    • tail -c +1024 /path/to/(file path) | shasum -a 256

  • 以下のコマンドを実行します(GitHub CIからの事前署名ファームウェアファイル):

    • tail -c +1024 /path/to/(file path) | shasum -a 256

  • 2つのコマンドによって生成されたチェックサムを比較します。結果が一致した場合、"OneKeyチームが署名したファームウェアファイル"がOneKeyのオープンソースリポジトリの"GitHub CIが事前に署名したファームウェアファイル"から派生したものであることが確認できます。

7.png

標準ファームウェアでは、1024バイトの署名結果がCIバージョンのファームウェアに追加され、デバイスの起動時にブートローダーによって検証されます。

OneKey 公式 CDN に保存されたファームウェアファイルの検証プロセス

  • ターミナルを開きます。

  • 以下のコマンドを実行します(OneKeyチームによって署名されたファームウェアファイル):

    • shasum -a 256 (file path)

  • 以下のコマンドを実行します(OneKey公式CDNに保存されたファームウェアファイル):

    • shasum -a 256 (file path)

  • 2つのコマンドによって生成されたチェックサムを比較します。結果が一致した場合、2つのファームウェアファイルのコードの一貫性が確認されます。

6.png

GitHub CI で事前署名されたファームウェアの検証プロセス(Bluetooth)

  • ダウンロードしたGitHub CIで事前署名されたBluetoothファームウェアフォルダに ota.bin ファイルを見つけます。

  • ota.bin が含まれているフォルダでターミナルを開きます。

  • 以下のコマンドでPythonを起動します: python3

  • 次のコマンドを実行してGitHub CIで事前署名されたBluetoothファームウェアのチェックサムを取得します。

    • 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""")

checksum-github-ci-ble.png
  • 同じコマンドをOneKeyチーム署名済みBluetoothファームウェアファイルで実行します。

    • 注:コマンド内のota.binをOneKeyチーム署名済みBluetoothファームウェアファイルの名前に変更してください。

checksum-github-release.png
  • 2つのコマンドによって生成されたチェックサムを比較します。結果が一致する場合、"OneKeyチーム署名ファームウェアファイル"が"GitHub CI事前署名ファームウェアファイル"から派生していることが確認できます。

OneKey 公式 CDN に保存されたファームウェアファイルの検証プロセス(Bluetooth)

  • OneKeyチーム署名済みBluetoothファームウェアファイルが含まれているフォルダでターミナルを開きます。

  • 以下のコマンドでPythonを起動します: python3

  • 以下のコマンドをコピーします:

    • 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ファームウェアファイルの名前に変更します。

  • コマンドを実行してチェックサムを取得します。

  • 同じ手順を繰り返して、ダウンロードしたOneKey公式CDN保存Bluetoothファームウェアファイルのチェックサムを取得します。

  • 2つのコマンドによって生成されたチェックサムを比較します。結果が一致する場合、2つのファームウェアファイルのコードの一貫性が確認されます。

compare-ble-checksum.png
こちらの回答で解決しましたか?