署名のプロセス

公開鍵/秘密鍵のペアを使用する暗号署名は、F-Droidが安全なアプリ配布を提供する仕組みの中心です。F-Droidツールで独自のリリースを作成するには、署名鍵が必要です。鍵ファイルの場所、セキュリティ、バックアップ状況を慎重に検討してください。鍵は、F-DroidリポジトリまたはAndroidアプリのライフタイム全体にわたって安全に保つ必要があります。署名鍵はAndroidアプリとF-Droidリポジトリの識別情報の中心となるため、それらの鍵は安全に保管し、十分に保護し、適切にバックアップしておく必要があります!また、Googleによるこれらの秘密鍵を保護する手順は、鍵を保護するために行うべき最小限の手順のみを示している点にも注意してください。

リポジトリの運用には、2種類の署名が関係します:

  • リポジトリインデックス自体の署名
  • 標準のAndroid APK署名プロセス

リポジトリインデックスの署名

リポジトリをセットアップする際、最初に行うべき手順の1つは、リポジトリインデックス用の署名鍵を生成することです。これにより、署名鍵を保持するファイルであるキーストアも作成されます。

fdroid init は、F-Droidリポジトリ用の新しい署名鍵を自動的に作成します。Android署名鍵を作成する場合と同様に、次のようなコマンドで鍵を手動作成することもできます:

keytool -genkey -v -keystore my.keystore -alias repokey \
  -keyalg RSA -keysize 2048 -validity 10000

上記では、my.keystore を作成するキーストアファイルの名前に置き換え、’repokey’ をリポジトリインデックス鍵を識別するための名前に置き換えてください。キーストアのパスワードと、鍵のパスワードを求められます。これらは同じにしないでください。その途中で、証明書に入る識別情報の入力も求められます。

入力した2つのパスワードは、それぞれ keystorepasskeypass として config.yml に入ります。キーストアファイルへのパスは keystore に設定し、選択した鍵のエイリアスも同じファイルの repo_keyalias に設定します。

APK署名

F-Droidツールは、管理している各アプリのAPK署名鍵を自動的に生成し、管理できます。リポジトリインデックスの署名を設定済みであれば、パッケージ署名を機能させるために残っているのは、config.ymlkeydname フィールドに、前に入力したものと同じ識別情報を設定することだけです。ビルドされる各アプリケーションについて、この情報を使用して新しい鍵が生成されます。特定のアプリケーションに特定の鍵が必要な場合は、keyaliases 設定を使用してこの仕組みを上書きできます。

fdroid publish をセットアップするには、APKをコピーして fdroid update を実行するのと同じマシンで、次の手順を行います。まず、config.ymlkeydname を設定します。次のような値になります:

keydname = "CN=example.com, O=Example Ltd, C=UK"

metadata/ および repo/ ディレクトリの隣に unsigned/ というディレクトリを作成し、次のコマンドを実行して、Application IDVersion Code に基づく新しい名前でAPKを適切な場所へ移動します:

$ cd /path/to/repobasedir
$ touch metadata/com.example.app.yml
$ mkdir unsigned
$ cp /path/to/app-release-unsigned.apk unsigned/com.example.app_1234.apk
$ fdroid publish --verbose
$ fdroid update --verbose
$ fdroid deploy --verbose

パッケージ署名

F-Droidツールを使用してビルドおよび/または配布されるすべてのパッケージは、GnuPG を使用してPGPで署名することもできます。APKからメディアファイルまで、あらゆるものが署名されます。この処理は fdroid gpgsign で実行します。設定するには、config.ymlgpghomegpgkey を追加してください。詳しくは examples/config.yml に記載されています。

ハードウェアセキュリティモジュール

ハードウェアセキュリティモジュール(HSM)は、暗号鍵を安全に保存して使用するために特別に設計されたハードウェアです。書き込み専用ストレージを提供するため、秘密鍵はHSMに書き込むことだけができ、HSMから読み出すことはできません。fdroidserver は、リポジトリ署名鍵にHSMを使用する機能をサポートしています。

HSMを使用するようにF-Droidリポジトリを設定する方法については、examples/config.yml の「smartcard」セクション、特に keystoresmartcardoptions を参照してください。ほとんどの場合、Java用のPKCS11プロバイダーとして OpenSC をセットアップする必要があります。hsmwiz は、Nitrokey HSMのようなスマートカードHSMを扱うための、より簡単な方法です。OpenSCと hsmwiz はどちらもDebianで利用できます。

さらに詳しい情報については、以下を参照してください: