OneKeyがリリースしたファームウェアとオープンソースのコードの一致性を検証する

現在、OneKeyのハードウェア製品であるclassic、mini、touchには、インストールされているすべてのファームウェアがオープンソースであり、CIを使用して最終的にリリースするためにコンパイルできます。具体的なファームウェアの種類とオープンソースのリポジトリは以下の通りです:

すべてのファームウェアのリリースはCIによってパッケージ化され、OneKeyの内部スタッフによって署名されてからリリースされます。

 

正式なファームウェアまたはBluetoothファームウェアがリリースの準備ができている場合、対応するリポジトリのアクションを実行して、オープンソースのコードをCIでコンパイルし、コンパイルが成功した後、GitHub Artifactsにアップロードし、最終的に署名してOneKeyのCDNに配置し、https://data.onekey.so/config.jsonを更新した後、OneKeyアプリとhttps://firmware.onekey.soでユーザーに更新の通知を行います。

 

1.png2.png3.png

OneKeyの通常のファームウェアの検証方法:

 

GitHub ReleaseとCIのコンパイル時のコードが一致していることを検証します。

最新のリリースであるOneKey Classic v2.9.0のファームウェアを例にとります。まず、リポジトリのリリースで対応するコミットを見つけます:https://github.com/OneKeyHQ/firmware/releases

4.png

図1の位置をクリックすると、コンパイル時のコミットハッシュが表示されます。また、compareをクリックして新旧のバージョン間のすべてのコードとコミットを比較することもできます。リリースのassetsには、署名後のリリース前のファームウェアの内容が配置されています。

上記の赤枠内のCIタスクをクリックし、現在のファームウェアのコンパイルプロセスを確認します(注:一部のファームウェアは別のブランチにあるため、コミットハッシュを確認する際には、checkoutタスクが一致しているかを確認する必要があります)。

CIタスクの詳細に進むと、checkoutに関連する情報を確認できます。この場合、コンパイルされたコミットは2bd0563で始まることが確認できます。これはリリースで公開されたコミットと一致しています。

5.png

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が完全に一致していることを検証します。

6.png

  • GitHub ReleaseがCIによってマルチサインされたものであることを検証します:tail -c +1024 /path/to/bin | shasum -a 256

7.png

上記のスクリーンショットに示されている3つのbinファイル名に対して:

  • ci-classic..binは、GitHub CIからダウンロードされたファームウェアの内容(未署名)を表します。
  • release-classic..binは、GitHub Releaseからダウンロードされたファームウェアの内容(署名済み)を表します。
  • classic.*.binは、OneKey CDNからダウンロードされたファームウェアの内容(署名済み)を表します。

 

従って、OneKeyがリリースするすべてのファームウェアは、GitHub ReleaseまたはCDNで公開される場合でも、オープンソースのコードをGitHub Action(CI)を使用してコンパイルし、処理した後にマルチサインされています。

ユーザーがファームウェアをダウンロードしてインストールする際に、マルチサインされたファームウェアをインストールしていない場合や、ファームウェアの署名が異常な場合は、起動時にリスクバージョンの警告メッセージが表示されます。

この記事は役に立ちましたか?
5人中5人がこの記事が役に立ったと言っています