sigやascファイル(GPG signature)の検証方法

フリーソフトウェアなどのファイルをwget等でダウンロードする時、下の例のように同じ場所に拡張子がsigやascのファイル(GPG signature)が置いてある場合があります。

hoge.tar.gz
hoge.tar.gz.sig

このGPG signatureファイルを使えばダウンロードしたファイルを検証することができます。

GPG signatureの検証方法

使用ツール

検証には一般的にGnuPGというツールを使います。

gpgというコマンドが使用できる環境なら問題ありません。

主なディストリビューションではgnupg(v2系はgnupg2)などのパッケージ名で用意されていると思いますので、インストールしておきましょう。

手順

binutilsを例に手順を示します。

まずはファイルをwgetコマンドなどでダウンロードします。

$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.xz
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.xz.sig

次にgpgコマンドでGPG signatureを確認してみます。

$ gpg --verify binutils-2.33.1.tar.xz.sig 
gpg: directory `/home/username/.gnupg' created
gpg: new configuration file `/home/username/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/username/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/home/username/.gnupg/pubring.gpg' created
gpg: assuming signed data in `binutils-2.33.1.tar.xz'
gpg: Signature made Sat Oct 12 23:15:53 2019 JST using RSA key ID DD9E3C4F
gpg: Can't check signature: public key not found

.gnupgディレクトリが存在しなかったので作成され、そしてIDがDD9E3C4Fの公開鍵が見つからないと言われて検証が中止されました。

ですのでgpgコマンドで見つからなかった公開鍵を取得してきます。

$ gpg --keyserver keys.gnupg.net --recv-key DD9E3C4F
gpg: requesting key DD9E3C4F from hkp server keys.gnupg.net
gpg: /home/username/.gnupg/trustdb.gpg: trustdb created
gpg: key DD9E3C4F: public key "Nick Clifton (Chief Binutils Maintainer) <nickc@redhat.com>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

無事に公開鍵が取得できたようですので改めて検証してみます。

$ gpg --verify binutils-2.33.1.tar.xz.sig 
gpg: assuming signed data in `binutils-2.33.1.tar.xz'
gpg: Signature made Sat Oct 12 23:15:53 2019 JST using RSA key ID DD9E3C4F
gpg: Good signature from "Nick Clifton (Chief Binutils Maintainer) <nickc@redhat.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3A24 BC1E 8FB4 09FA 9F14  3718 13FC EF89 DD9E 3C4F

ワーニングは出ていますがGood signatureで検証に成功しているので取り合えずOKです。