はじめに
Google Play からAndroid 端末にインストールしていたTermux の更新が止まり、パッケージ管理のリポジトリへの接続も失敗するようになっていたので、公式サイトで案内されているF-Droid を使ってインストールすることにしました。
- Termux – Termux 公式
- Termux Wiki – Termux 公式
- F-Droid > Termux – F-Droid 公式
F-Droid はGoogle Play を使わずに、APKファイルをF-Droid のサイトからダウンロードしてインストールする必要があったので、ダウンロードしたAPKファイルをPGP 署名で検証しようと思ったけれど、検証の仕方が全くわからなかったので調べながらやった記録です。(GnuPG を使ってみた記録です)
- GnuPG – 公式
環境について
- MacBook Pro 2022(macOS Monterey)
手順
1. GnuPG のインストール
Homebrew を使ってインストールしました。
- GnuPG の配布されているバージョンは、2系は最新バージョンとLTS の2つあったのでLTS をインストールした
- GnuPG は2.x のxが偶数をLTS としているようです
- [email protected] – Homebrew
brew install [email protected]
インストール時のプロンプトに上記のコメントがありました。
インストールしたのがkeg-only だからパスが通っていないとのことなので、~/.zshrc に下記を追記します。
export PATH="/opt/homebrew/opt/[email protected]/bin:$PATH"
追記した後にsource ~/.zshrc を実行して設定を反映します。
2. ファイルのダウンロード
F-Droid の公式サイトから署名対象のAPKファイルと署名ファイルをダウンロードします。
QRコードは”F-DROIDをダウンロード” のリンク先と同じF-Droid.apk のURL なので、スマホでダウンロードする際はこのQRコードを使う感じになっています。
- 署名対象のAPKファイル
- F-Droid のAPKファイル。F-Droid.apk
- 署名ファイル
- F-Droid の署名ファイル。F-Droid.apk.asc
3. 署名の検証に使う公開鍵のダウンロード
署名の検証に使うF-Droid の公開鍵を入手する方法を調べたところ、F-Droid のAPKファイルと同じ場所に置いたら公開鍵も一緒に置き換えられるだろうからそんな検証意味あるか?みたいなことが書かれていました。
- F-Droid public keys – F-Droid forum
PGPの信頼の輪の仕組みにより配布されている公開鍵を入手するのが正解のようです。(たぶん)
下記のコマンドを実行して公開鍵サーバの公開鍵を検索します。
gpg --search-keys f-droid
上記のように”f-droid” で2件検出されました。
下記の公式サイトに掲載されている公開鍵の情報のユーザID(GPG signing key)と一致している(1) を選択して公開鍵をダウンロードします。ダウンロードと同時にインポートされました。
- Release Channels and Signing Keys – F-Droid公式
インポートされた公開鍵を下記のコマンドで確認します。
gpg --list-keys
~/.gnupg/pubring.kbx に先ほど選択した公開鍵が登録されていましたが、uid の欄で”不明” という扱いになっています。
公開鍵が配布者により署名されていないので、この状態で署名を検証すると下記のように検証に失敗します。
gpg --verify F-Droid.apk.asc
4. ダウンロードした公開鍵に署名する
ダウンロードした公開鍵が正規のものであるかは、公式サイトに掲載されている公開鍵の情報と公開鍵サーバから入手した公開鍵が同じであることが信頼できるものとして、自身の署名用の鍵を使って公開鍵に署名します。
とはいえ、まだ自身の署名用の鍵を作っていなかったので、まずは下記のコマンドで公開鍵暗号のキーペアを作成します。
- gpg の鍵を生成するコマンドは3種類ありました。とりあえず、鍵の種類などを指定できるgpg –full-gen-key で作ることにしました。
- gpg –full-gen-key
- 鍵の種類、鍵長、有効期限:指定して作成する
- ユーザIDの構成情報(名前、メールアドレス):指定して作成する
- gpg –gen-key
- 鍵の種類、鍵長、有効期限:デフォルトで作成される
- ユーザIDの構成情報(名前、メールアドレス):指定して作成する
- gpg –quick-gen-key
- プロンプトで何も入力しないで作成する
- gpg –full-gen-key
gpg --full-gen-key
続けて、ダウンロードした公開鍵に署名します。
gpg --lsign-key F-Droid
署名後の公開鍵をgpg –list-keys で確認すると、uid の欄が”充分” になっていました。
5. 署名の検証
準備が整ったので署名を検証します。
gpg --verify F-Droid.apk.asc
今回は署名が”充分” となり、メッセージの内容から問題はなかったようです。
あとがき
Android 端末にインストールしようとしているソフトウェアが正規のものであることを今回はパソコンで検証しましたが、これがAndroid 端末上でできたらよいのですが、標準でその機能はなさそうです。
今回インストールするF-Droid を使ってインストールする予定のTermux にGnuPG をインストールすればできそうな気がします。
とりあえず、今回はここまでです。
参考
- Termux
- Termux – Termux 公式
- Termux Wiki – Termux 公式
- F-Droid
- F-Droid – F-Droid公式
- F-Droid > Termux – F-Droid 公式
- F-Droid public keys – F-Droid forum
- Release Channels and Signing Keys – F-Droid公式
- GnuPG
- GnuPG – 公式
- [email protected] – Homebrew
- はじめてのGPG 〜第5回 署名・検証をしてみよう〜 – 水珈琲の日誌
- GPGによる公開鍵暗号と署名 > 6. 署名と検証 – 東京大学情報基盤センター
- sigやascファイル(GPG signature)の検証方法 – アカスブログ