現在、OneKeyのハードウェア製品であるclassic、mini、touchには、インストールされているすべてのファームウェアがオープンソースであり、CIを使用して最終的にリリースするためにコンパイルできます。具体的なファームウェアの種類とオープンソースのリポジトリは以下の通りです:
- OneKey Classic
- ファームウェア:https://github.com/OneKeyHQ/firmware(bixin_devブランチ)
- Bluetoothファームウェア:https://github.com/OneKeyHQ/bluetooth-firmware-classic (mainブランチ)
- OneKey Mini
- ファームウェア:https://github.com/OneKeyHQ/firmware (miniブランチ)
- OneKey Touch
-
- ファームウェア:https://github.com/OneKeyHQ/firmware (touchブランチ)
- Bluetoothファームウェア:https://github.com/OneKeyHQ/bluetooth-firmware-touch (mainブランチ)
すべてのファームウェアのリリースはCIによってパッケージ化され、OneKeyの内部スタッフによって署名されてからリリースされます。
正式なファームウェアまたはBluetoothファームウェアがリリースの準備ができている場合、対応するリポジトリのアクションを実行して、オープンソースのコードをCIでコンパイルし、コンパイルが成功した後、GitHub Artifactsにアップロードし、最終的に署名してOneKeyのCDNに配置し、https://data.onekey.so/config.jsonを更新した後、OneKeyアプリとhttps://firmware.onekey.soでユーザーに更新の通知を行います。
OneKeyの通常のファームウェアの検証方法:
GitHub ReleaseとCIのコンパイル時のコードが一致していることを検証します。
最新のリリースであるOneKey Classic v2.9.0のファームウェアを例にとります。まず、リポジトリのリリースで対応するコミットを見つけます:https://github.com/OneKeyHQ/firmware/releases
図1の位置をクリックすると、コンパイル時のコミットハッシュが表示されます。また、compareをクリックして新旧のバージョン間のすべてのコードとコミットを比較することもできます。リリースのassetsには、署名後のリリース前のファームウェアの内容が配置されています。
上記の赤枠内のCIタスクをクリックし、現在のファームウェアのコンパイルプロセスを確認します(注:一部のファームウェアは別のブランチにあるため、コミットハッシュを確認する際には、checkoutタスクが一致しているかを確認する必要があります)。
CIタスクの詳細に進むと、checkoutに関連する情報を確認できます。この場合、コンパイルされたコミットは2bd0563で始まることが確認できます。これはリリースで公開されたコミットと一致しています。
CIのコンパイル結果とリリース結果が一致することを検証します。
CIで生成されたファームウェアは一時的にGitHub Artifactsにアップロードされます。OneKeyはCIで生成されたファームウェアを再度署名(マルチサイン)し、GitHub Releaseを更新してユーザーのデバイスに配布します。内部的には、次の2つのファイルが主に生成されます:
アップデートタイミング | 機能 | |
bootloader.*.bin |
出荷時にハードウェアデバイスに書き込まれた後は変更できません。 |
ブート時にファームウェアの署名情報などを検証します。 |
firmware.*.bin |
ユーザーはツールを使用してデバイスにアップデートできます。 |
さまざまな業務機能に関連するロジック。 |
通常のファームウェア(Classic、Mini、Touchのすべてに適用)の場合、CIバージョンのファームウェアの前に1024バイトの署名結果が追加され、デバイスの起動時にブートローダーによって検証されます。
ユーザーがダウンロードしやすくするため、OneKeyは署名結果をCDNに配置します。従って、classic.url フィールド(https://data.onekey.so/config.json内)に関しては、リリースされたバージョンが一致していることを確認するために2つの検証が必要です。
- GitHub ReleaseからダウンロードしたファームウェアとCDNが完全に一致していることを検証します。
- GitHub ReleaseがCIによってマルチサインされたものであることを検証します:tail -c +1024 /path/to/bin | shasum -a 256
上記のスクリーンショットに示されている3つのbinファイル名に対して:
- ci-classic..binは、GitHub CIからダウンロードされたファームウェアの内容(未署名)を表します。
- release-classic..binは、GitHub Releaseからダウンロードされたファームウェアの内容(署名済み)を表します。
- classic.*.binは、OneKey CDNからダウンロードされたファームウェアの内容(署名済み)を表します。
従って、OneKeyがリリースするすべてのファームウェアは、GitHub ReleaseまたはCDNで公開される場合でも、オープンソースのコードをGitHub Action(CI)を使用してコンパイルし、処理した後にマルチサインされています。
ユーザーがファームウェアをダウンロードしてインストールする際に、マルチサインされたファームウェアをインストールしていない場合や、ファームウェアの署名が異常な場合は、起動時にリスクバージョンの警告メッセージが表示されます。
コメント
0件のコメント
記事コメントは受け付けていません。