AndroidのAPK署名モデルでは、署名鍵がアプリのライフタイム全体にわたって同じであることが期待されています。これは、Android署名鍵の推奨ライフタイムである 20年以上 からも分かります。さらに、アプリを新しい鍵へ移行することは困難です。署名鍵は、APKが別のAPKになりすますことを防ぐための重要な要素であるため、Android署名鍵はアプリのライフタイム全体にわたって安全に保管する必要があります。
F-Droid repoの署名鍵も、これと非常によく似たモデルに従っています。署名鍵は、F-Droid repoを安全に識別するための重要な手段です。そのため、APK署名鍵と同じ考慮事項がF-Droid repoの署名鍵にも当てはまります。これにより、非常に有用な利点も得られます。repoのインデックスファイルとAPKの完全性はrepo署名によって保証されるため、ファイルは最も便利な任意の方法で配信でき、その完全性はF-Droidクライアントアプリ、f-droid.org のdeployプロセス、Repomakerによって自動的に検証されます。
つまり、セキュリティ上の負担は、オンラインの公開Webサーバーから非公開の署名用マシンへ移されます。そのマシンを人目に触れない場所に置いておくだけでも、セキュリティの向上に大きく役立ちます。署名プロセスのセキュリティをさらに高めるために、追加で実施できる対策もいくつかあります。ここでは、最も簡単でセキュリティが最も低い方法から始め、セットアップと運用により多くの作業が必要な、より安全な構成へと進む形で、いくつかの方法を紹介します。署名はリソースを大量に消費する処理ではないため、10年前の基本的なノートPCであっても、どのようなマシンでも使用できます。最小構成の Debian インストールを使用し、マシンを一から再構築することをおすすめします。
HSMを使用した自動署名サーバー
完全に自動化された署名構成では、署名を実行するマシンがオンラインで稼働している必要があります。理想的には、このマシンにはリモートアクセスを用意しないべきです。少なくとも、リモートアクセスは非常に慎重に制御し、監視する必要があります。ノートPCであれば、キーボードとモニターが内蔵されているため、リモートアクセスを無効にしていても作業しやすくなります。リモートアクセスが必要な場合は、基本的なPCで十分です。鍵の保存にHardware Security Module(HSM)を使用すると、サーバーに侵入された場合でも鍵の盗難を防げます。攻撃者にできるのは、そのサーバー上で署名プロセスを実行することだけです。
理想的には、このマシンにはTor経由でのみアクセスできるようにします。これにより、サーバーの物理的な場所が隠され、ネットワーク上のトラフィックも隠されます。そのため、攻撃者が実際に攻撃対象となるマシンを見つけることがはるかに困難になります。
HSMには、Nitrokey のハードウェアを使用することをおすすめします。Nitrokeyは自由ソフトウェア/ハードウェアであり、幅広い選択肢を提供しているためです。署名鍵をHSMに格納する作業には、別のマシンを使用してください。優れたHSMは、これまでに作成された署名の数について監査証跡を保持します。その情報を利用すれば、署名数が多すぎる場合に警告を出す自動監査プロセスを作成できます。署名数が多すぎる場合、このサーバーが侵害され、不正なパッケージの署名に使用された可能性があります。
もう1つの可能性として、3台のマシンを使用する Fedora の Sigul のような構成を使う方法があります。
署名専用の基本的なノートPC
完全に消去して一から再構築できるノートPCから始めます。最も重要なのは、必要不可欠なソフトウェアだけをインストールし、それ以外は何も入れないことです。たとえばブラウザーは、最も一般的な攻撃経路であるため、一切含めないでください。リモートアクセスの設定(SSHやVNCなど)も、インストールまたは構成しないでください。アプリやrepoに署名するには、担当者がこのノートPCを取り出してネットワークに接続し、署名プロセスを実行します。署名済みの結果は、その後ネットワーク接続を通じて公開できます。署名が完了したら、マシンの電源を切って接続を解除し、安全な場所に保管できます。
これは、いくつかのカスタムスクリプトを使えば、かなり自動化できます。プロセスを実行する担当者は、マシンを取り出して接続し、電源を入れ、処理が完了するまで待ってから、再び片付けるだけで済みます。
USBメモリを使用した完全オフラインの署名用ノートPC
このプロセスは、前の例と同じ、基本的で最小構成のノートPCをベースにしています。ただし今回は、インストール作業の前にネットワーク機能を完全に無効化しておく必要があります。たとえば、多くのノートPCではWi-Fiカードを物理的に取り外すのは簡単です。そのため、通常は取り外せないEthernet端子を搭載していないノートPCを使用するのが理にかなっています。それが難しい場合は、ネットワーク関連のすべてのカーネルモジュールをブロックリストに追加するだけでも十分です。このマシンは完全にオフラインであるため、HSMを使用する追加作業の重要性はそれほど高くありませんが、含めておいて損はありません。
インストールを実行するには、Debianの完全な「CD」または「DVD」イメージをダウンロードします。GPG署名とSHA-256ハッシュを必ず検証してください。オフラインマシンを更新するには、「apt offline」構成が必要です。
念には念を入れるなら、使用するすべてのソフトウェアを検証するべきです。Chromebookは、Linuxをネイティブに実行できる、手頃な価格の優れたノートPCです。また、BIOSにはCorebootが使用されています。
- 店頭でコンピューターを現金で購入し、配送は避けてください。特に国境を越える配送は避けてください
- Debianに対応し、取り外し可能なWi-Fiハードウェアを搭載し、バイナリblobを必要としない Chromebook を購入します
- 再現可能にビルドされたCorebootバイナリをインストールします
- 再現可能にビルドされたDebianイメージからインストールし、Chrome OSを完全に消去します
物理環境
最後に考慮すべきなのは、署名が行われる物理的な場所と、重要な機器を保管する場所です。署名環境は物理的に安全でなければなりません。そうでなければ、ノートPCやHSMの紛失、または不適切なコンテンツへの署名に使用されることを防ぐ方法がありません。オフラインマシンの場合は、施錠された部屋に保管することがよい出発点です。オンラインマシンの場合は、すべてのネットワークトラフィックとリモートアクセスをTor経由に強制することで、ネットワーク上の監視者からマシンの物理的な場所を隠せます。
高リスクの署名鍵では、多層防御を使用することが重要です:
- HSMまたはスマートカードへの物理アクセスを制限する
- 防犯カメラ
- 常駐の警備員
- 訪問者の記録
- オンラインコード署名サーバー用の耐工具性サーバー金庫
署名サーバーは、他のインフラストラクチャから物理的に分離する必要があります。また、ログ、マシン、ネットワークは定期的に監査する必要があります。
難しい判断
理想的には、これらのすべての対策を実施するべきですが、各セキュリティ対策には、難しさ、費用、複雑さというコストが伴います。また、定期的な更新を公開するプロセスが遅れる可能性もあります。そのため、十分な対策を実施しない場合と同じように、厳しすぎるセキュリティポリシーを実施することにもリスクがあります。
