Emacsのパッケージがインストールされるのを眺めるで.sigという拡張子のファイルをダウンロードした。これはGnuPGの署名ファイルだ。今回はこの署名ファイルを検証する。また自分で署名ファイルも作成する。なお実行環境のOSはmacOS montereyを使用する。
準備
GnuPGとは
GNU Privacy Guard (GnuPG, GPG) とは、Pretty Good Privacy (PGP) の別実装として、GPL に基づいた暗号化ソフトである。 OpenPGP 規格 (RFC 4880) に完全準拠しているが、古い PGP との互換性は完全ではない。 (Wikipediaより: GNU Privacy Guard - https://ja.wikipedia.org/wiki/GNU_Privacy_Guard)
要は暗号化や署名といった機能を提供する。誰かにデータを渡したり渡されたりする際、データの中身を見られないようにしたり、そのデータが本当に本人から渡されたことを保証する。様々な場面で使われているが、例えばパッケージ管理ツールはPGPの機構を利用してダウンロードしたファイルを検証する。
GnuPGのインストール
今回はHomebrewを使ってインストールする。
brew install gnupg
インストールされたGnuPGのバージョンを確認する。
gpg --version
gpg (GnuPG) 2.3.8 libgcrypt 1.10.1 Copyright (C) 2021 Free Software Foundation, Inc. License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /Users/sximada/.gnupg サポートしているアルゴリズム: 公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA 暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 AEAD: EAX, OCB ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 圧縮: 無圧縮, ZIP, ZLIB, BZIP2
gpg-agentのインストール (不要)
この手順はgpg-agentがgnupgと一緒にインストールされるようになったため、不要となった。
https://github.com/Homebrew/homebrew-core/commit/965e130e04e5900e35bf1f0b6ebad9d1c2f680a7
gpg-agentは秘密鍵を任意のプロトコルから独立して管理する。
https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html
brew install gpg-agent
gpgはpgp-agentをバックエンドとして利用される。gpg-agentのプロセスはgpgなどの起動時に自動的に起動する。
pinentry-macのインストール
pinentryはGnuPGのパスフレーズやPIN番号を入力する手段を提供する。macOSではmacOS用のpinentry-macをインストールするとパスフレーズ入力時などにGUIのダイアログが開くようになる。Homebrewを使ってインストールする。
brew install pinentry-mac
gpg-agentがpinentry-macを使うための設定
gpg-agentにpinentry-macを利用させるには ~/.gnupg/gpg-agent.conf
に次を設定する。
use-standard-socket pinentry-program /usr/local/bin/pinentry-mac
設定が完了したら設定を読み込ませるためにgpg-agentを一度終了する。
gpgconf --kill all
鍵を作成する
自分の鍵を作成する。作成には --gen-key
オプションを指定する。通常はインタラクティブな画面上のやりとりが必要だが --batch
を指定することで設定ファイルからも鍵を生成できる。
master.confの中身
設定ファイルの詳しい書き方はhttps://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.htmlに記述されている。
では鍵を生成する。
gpg --gen-key --batch master.conf
出力
gpg: keybox'/Users/sximada/.gnupg/pubring.kbx'が作成されました gpg: /Users/sximada/.gnupg/trustdb.gpg: 信用データベースができました gpg: ディレクトリ'/Users/sximada/.gnupg/openpgp-revocs.d'が作成されました gpg: 失効証明書を '/Users/sximada/.gnupg/openpgp-revocs.d/C0F7A0C0782F4AD1648F60F0DFAF86B7CD737B72.rev' に保管しました。 gpg: Successfully done
生成に成功した。master.confの設定にしたがって鍵が作成された。 /Users/xxx/.gnupg/openpgp-revocs.d
には失効証明書が出力される。秘密鍵が漏れたなどの理由で鍵の失効をしなくてはいけなくなった時に使う。
署名を検証する
前回確認したarchive-contentsの署名を確認する。まずはarchive-contentsファイルとその署名ファイルをelpaからダウンロードする。
curl https://elpa.gnu.org//packages/archive-contents -o archive-contents curl https://elpa.gnu.org//packages/archive-contents.sig -o archive-contents.sig
ファイル名 | 説明 |
---|---|
archive-contents | elpaのindex情報 |
archive-contents.sig | archive-contentsの署名 |
ではこの署名を検証する。 --verify
と署名ファイルを指定する。署名対象のファイルも指定できるが、省略した場合は .sig
拡張子が取られた状態のファイルを対象にする。
gpg --verify archive-contents.sig
出力
gpg: 署名されたデータが'archive-contents'にあると想定します gpg: 金 10/14 18:05:03 2022 JSTに施された署名 gpg: RSA鍵C433554766D3DDC64221BFAA066DAFCB81E42C40を使用 gpg: 署名を検査できません: No public key
署名の検査に失敗した。 No public key
と出力されています。署名の検証には公開鍵を使うが、それがないようだ。署名の鍵として CA442C00F91774F17F59D9B0474F05837FBDEF9B
が使用された。この鍵を探してみる。鍵の検索には --search-key
と探す鍵を指定する。
gpg --search-key C433554766D3DDC64221BFAA066DAFCB81E42C40
鍵が見つかるとその情報が表示される。鍵の番号を入力しエンターを押すと鍵がインポートされる。
gpg: data source: https://162.213.33.8:443 (1) GNU ELPA Signing Agent (2019) <[email protected]> 3072 bit RSA key 066DAFCB81E42C40, 作成: 2019-04-23 Keys 1-1 of 1 for "C433554766D3DDC64221BFAA066DAFCB81E42C40". 番号(s)、N)次、またはQ)中 止を入力してください >1 gpg: 鍵066DAFCB81E42C40: 公開鍵"GNU ELPA Signing Agent (2019) <[email protected]>"を インポートしました gpg: 処理数の合計: 1 gpg: インポート: 1
インポートされた鍵を確認する。鍵の一覧を確認するには -k
を指定する。
gpg -k
出力
pub rsa4096 2022-10-15 [SCEA] [有効期限: 2022-11-14] C0F7A0C0782F4AD1648F60F0DFAF86B7CD737B72 uid [ 究極 ] TakesxiSximada <[email protected]>sub rsa4096 2022-10-15 [SEA] [有効期限: 2022-11-14] pub rsa3072 2019-04-23 [SC] [有効期限: 2024-04-21] C433554766D3DDC64221BFAA066DAFCB81E42C40 uid [ 不明 ] GNU ELPA Signing Agent (2019) <[email protected]>
再度署名を検証する。
gpg --verify archive-contents.sig
出力
gpg: 署名されたデータが'archive-contents'にあると想定します gpg: 金 10/14 18:05:03 2022 JSTに施された署名 gpg: RSA鍵C433554766D3DDC64221BFAA066DAFCB81E42C40を使用 gpg: "GNU ELPA Signing Agent (2019) <[email protected]>"からの正しい署名 [不明の] gpg: *警告*: この鍵は信用できる署名で証明されていません! gpg: この署名が所有者のものかどうかの検証手段がありません。 主鍵フィンガープリント: C433 5547 66D3 DDC6 4221 BFAA 066D AFCB 81E4 2C40
先ほどインポートした公開鍵が信用できるものとして登録されていないので警告が出る。鍵の信用を設定するためには --edit-key
オプションを使う。
gpg --edit-key C433554766D3DDC64221BFAA066DAFCB81E42C40
コマンドを実行するとインタラクティブに操作を求められる。trustコマンドを実行し公開鍵の信用を設定する。
gpg (GnuPG) 2.3.8; Copyright (C) 2021 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. pub rsa3072/066DAFCB81E42C40 作成: 2019-04-23 有効期限: 2024-04-21 利用法: SC 信用: 不明の 有効性: 不明の [ 不明 ] (1). GNU ELPA Signing Agent (2019) <[email protected]> gpg> trust pub rsa3072/066DAFCB81E42C40 作成: 2019-04-23 有効期限: 2024-04-21 利用法: SC 信用: 不明の 有効性: 不明の [ 不明 ] (1). GNU ELPA Signing Agent (2019) <[email protected]> 他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください (パスポートを見せてもらったり、他から得たフィンガープリントを検査したり、などなど) 1 = 知らない、または何とも言えない 2 = 信用し ない 3 = まぁまぁ信用する 4 = 充分に信用する 5 = 究極的に信用する m = メーン・メニューに戻る あなたの決定は? 5 本当にこの鍵を究極的に信用しますか? (y/N) y pub rsa3072/066DAFCB81E42C40 作成: 2019-04-23 有効期限: 2024-04-21 利用法: SC 信用: 究極 有効性: 不明の [ 不明 ] (1). GNU ELPA Signing Agent (2019) <[email protected]> プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、 ということを念頭においてください。 gpg> quit
再度署名の検証を行う。
gpg --verify archive-contents.sig
gpg: 署名されたデータが'archive-contents'にあると想定します gpg: 金 10/14 18:05:03 2022 JSTに施された署名 gpg: RSA鍵C433554766D3DDC64221BFAA066DAFCB81E42C40を使用 gpg: 信用データベースの検査 gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: 深さ: 0 有効性: 2 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 2u gpg: 次回の信用データベース検査は、2022-11-14です gpg: "GNU ELPA Signing Agent (2019) <[email protected]>"からの正しい署名 [究極]
今回は署名の検証に成功した。
署名を作成する
今度はファイルに対して署名を作成する。署名を作るファイルはこのような内容のテキストファイルにする。
gpg --detach-sign test.txt
実行するとパスフレーズを入力するためのダイアログが表示されます。
正しいパスフレーズを入力するとtest.txt.sigが作成される。
作成した署名を確認するには以前と同様 --verity
を使って.sigファイルを指定する。
gpg --verify test.txt.sig
出力はこのように変わる。
gpg: 署名されたデータが'test.txt'にあると想定します gpg: 土 10/15 21:03:45 2022 JSTに施された署名 gpg: RSA鍵213299F2E67D819A784403CF330B310D2375BAC4を使用 gpg: "TakesxiSximada <[email protected]>"からの正しい署名 [究極]
適切に署名ができた。
公開鍵を公開する
誰かにこの署名を検証してもらうためには自分の公開鍵を渡す必要がある。公開鍵をエクスポートしてWeb上のどこかに置いておくか、またはPGP公開鍵サーバーに公開鍵をアップロードするという方法もある。
公開鍵をエクスポートする
公開鍵をWeb上に配置するにせよ誰かに渡すにせよ、GnuPGが内部的に管理している状態では渡すこともできず不便だ。 --export
を使って公開鍵を出力してそれを渡す。
gpg --export --armor
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =EcDA -----END PGP PUBLIC KEY BLOCK-----
このテキストが公開鍵なので、必要に応じてこれを渡せばば良い。逆にインポートは --import FILENAME
で取り込める。
PGP公開鍵サーバーに公開鍵をアップロードする
より多くの人に使ってもらいたい場合はPGP公開鍵サーバーに公開鍵をアップロードするほうが好ましいこともある。PGP公開鍵サーバーを使うことで何が嬉しいかというと、鍵の検索やインポートをgpgコマンドのみでできる。
鍵の一覧を確認する。
--keyserver
で送信するサーバーを指定し --send-keys
で送信する鍵を指定する。コマンドは以下のようになる。今回は継続使うものではないので送信しなかった。
公開鍵は送信すると削除はできないが、失効は失効証明書を使うことで失効できる。
まとめ
- GnuPGとは何かを説明し、使用できる環境を作成した。
- 自分の鍵を作成しどこのディレクトリに配置されたのかを確認した。
- 署名を検証した実際のデータ(elpaのインデックス情報)を使って学んだ。
- 自分の鍵を使用してファイルを署名する手順を学んだ。
- 自分の公開鍵を公開する方法を学んだ。
GnuPGを扱う上でだいたい一通りのことを今回実施した。使い方はとっつきにくいが、慣れればそれほどでもないので、色々と触ってみると良いかもしれない。
参考
- gpgでのファイルの暗号化基礎 - akihiro_obの日記
- GPG Cheat Sheet
- OpenPGP Keyserver
- PGP KEYSERVER
- 1分でわかるPGP - 村川猛彦
- GnuPGのコマンド
- GnuPGを使用したファイル署名の検証
- Getting Started with Gnu Privacy Guard
- macOS で GitHub に GPG で署名する - プらチナの日記
- GnuPG で遊ぶ - 暗号化してみる | そんなこと覚えてない
- GNU Hello - Wikipedia
- Failed to fetch the gpg key from keys.gnupg.net · Issue #3544 · rvm/rvm · GitHub
- GnuPG - Signature Key
- Bitcoinいれるならgpg を理解せよ – 暗号通貨 とセキュリティ – Medium
- PGP(GnuPG)の導入方法教えてやるから、いい加減、ファイルをZIP暗号化して、別メールでパスワードを送るのは、やめてくれ! ~ファイル添付編~ - Qiita
- PGP(GnuPG)の導入方法教えてやるから、いい加減、ファイルをZIP暗号化して、別メールでパスワードを送るのは、やめてくれ! ~セットアップ編~ - Qiita
- gpg (GNU Privacy Guard)の使い方 - Qiita
- git(GitHub)でGPGを使った署名をおこなう - Qiita
- hello - GNU greeting package - News: hello-2.10 released
- GNU Hello 2.5 の導入 - とくにあぶなくないRiSKのブログ
- gnupg - where can I find the public key for Gnu Emacs? - Stack Overflow
- OpenPGP 鍵管理に関する考察 — OpenPGP の実装 | text.Baldanders.info
- GnuPG for Windows : gpg-agent について — OpenPGP の実装 | text.Baldanders.info
- configure と GnuPG について - その時々
- GnuPG - ArchWiki
- ダウンロードファイルが真正なものであるかを確認:仕事で使える魔法のLAMP(10) - @IT
- GnuPGの署名を確認する
- Hello - GNU Project - Free Software Foundation
- gnUSENET - GNU Project - Free Software Foundation
- gnUSENET - GNU Project - Free Software Foundation
- Using the GNU Privacy Guard: Invoking GPG-AGENT
- Where is GNU's public key?
- GPG でファイルを暗号化, 復号化, 署名, 検証する方法 - yu8mada
- Homebrew で macOS に GNU コマンドをインストールする - yu8mada