491 / 691REPRO

Reproducible Firmware Build

再現可能なファームウェアのビルド

独立したビルドにより、公開ファームウェアと、指定されたソースコードおよび環境から得た結果を比較できます。一致はバイナリの由来を確かめる助けになりますが、それだけでコードの安全性や機器の真正性を証明するものではありません。

Reproducible Firmware Build は、同じソースコード、環境、手順から、事前に定めた出力をバイト単位で同一に生成するビルドです。特に公開物に追加の署名がある場合は、バージョン、機種、比較範囲を明示する必要があります。

主張の対象はファームウェアイメージなどの指定された出力であり、すべてのファイルやログに自動的に及ぶわけではありません。同じ動作だけでは不十分で、通常は暗号学的ハッシュを用いて同じバイト列を確認します。ソースが公開されていてもビルドを再現できなければ、公開バイナリとの対応関係はそれだけでは示せません。 [Reproducible Builds — Definition] [Reproducible Builds — Build infrastructure threats]

正確な commit、依存関係とそのバージョン、コンパイラ、ビルドオプション、関連する環境変数、対象機種を記録します。プロジェクト名や変動するブランチ名だけでは不十分です。再実行に必要な情報は公開するか、ビルド時に記録しなければなりません。そうでなければ差異を確実に評価できません。 [Reproducible Builds — Definition] [Reproducible Builds — Recording the environment]

コンパイラは作業ディレクトリのパスをデバッグ情報に埋め込むことがあります。同じソースを別の場所に置くと異なるファイルができる場合があります。パスは事前に指定するか、対応する方法で正規化できます。この規則はビルド手順の一部でなければならず、後から不明な差異を削除すると検証が無意味になります。 [Reproducible Builds — Build paths]

有効な署名は、ある信頼モデルのもとで公開物を対応する署名鍵に結び付けます。独立したビルドは、ソースとバイナリ出力の関係を調べます。公式の署名付きファイルには、ローカルの未署名ビルドにないデータが含まれることがあります。そのためファイル全体の単純比較が、主張された再現性の正しい検査になるとは限りません。 [Trezor — Reproducible build verification]

Trezor の文書ではバージョンと機種を選び、指定環境でイメージを作り、公式公開物と比較します。比較前に厳密に定義された署名フィールドをゼロにする手順があり、古い形式ではヘッダーも異なります。構造は機種とバージョンに依存します。あるイメージの手順を別のものへ無条件に適用してはならず、元の署名は別途検証します。 [Trezor — Reproducible build verification]

まずリビジョン、機種、ファームウェアの種類、依存関係、宣言済みのイメージ変換を確認します。元のファイルと差分記録を保存します。不一致は手順や環境の誤りでも、配布バイナリの変更でも生じ得ますが、それだけで原因は決まりません。差異を説明し検査を繰り返すまで、出力を検証済みとしてはいけません。 [Reproducible Builds — Definition] [Reproducible Builds — Build infrastructure threats]

欠陥や悪意のあるソースでも完全に再現可能な場合があります。共通の信頼できないコンパイラが全結果に同じ変更を挿入することもあり、同じツールの再実行は独立したコンパイラ監査ではありません。非公開のバイナリ部品があると、利用可能なソースから再構築できる範囲は限られます。ファイルの一致は、ハードウェアの真正性や特定の機器に実際に入っている内容も確認しません。 [Wheeler — Countering Trusting Trust] [Reproducible Builds — Definition]

有用な記録には、誰が、どの commit から、どの手順で、どの機種向けにビルドし、どのファイルを比べたかを記します。ハッシュ方式、結果、署名データに関する厳密な例外範囲も添えます。独立したビルド実行者が増えると単一の配布者への依存は減りますが、ソース、更新手順、機器全体の安全性の確認を置き換えるものではありません。 [Reproducible Builds — Recording the environment] [Reproducible Builds — Build infrastructure threats]

例 · REPRO

同じコードでも署名領域は異なる

二人が同じ commit、機種、環境でビルドします。ローカルイメージの SHA-256 は一致しますが、公式の署名付きイメージは異なります。文書が署名フィールドを厳密に定義していれば、指定の変換をコピーに適用して比較します。一致の対象はそのように定めた内容であり、元の署名は別途検証します。その他の差異を単に削除してはいけません。

理解を深めるには、この項目とあわせて次もお読みください Hardware Wallet, 秘密鍵, Cold Storage, Secure Element. 次の項目からも参照されています COLDCARD RNG Incident (2026).

01ハッシュが一致すればファームウェアは安全ですか?

いいえ。一致が示すのは特定の比較の結果であり、欠陥がないことではありません。悪意のあるソースや共通の信頼できないコンパイラからも同じ出力が得られます。ビルド検証、ソース監査、機器への信頼は分けて考える必要があります。

02署名付き公開物のハッシュが異なると、必ず攻撃ですか?

いいえ。署名付きイメージには事前に説明された別の署名フィールドやヘッダーが含まれる場合があります。まず正しいバージョン、機種、比較手順を確認します。ただし、説明できない不一致を検証成功として扱ったり、任意にバイトを削除して回避したりしてはいけません。

DOC · 001Reproducible Builds — Definition文書 ↗DOC · 002Reproducible Builds — Recording the environment文書 ↗DOC · 003Reproducible Builds — Build paths文書 ↗DOC · 004Reproducible Builds — Build infrastructure threats文書 ↗DOC · 005Trezor — Reproducible build verification文書 ↗DOC · 006Wheeler — Countering Trusting Trust一次資料 ↗
一次資料を優先 · 投資助言ではありません