はじめての検証

25.6.1. はじめての検証

演習教材で,署名の検証で改竄を見分ける体験をしましょう.

準備 gpg #

GnuPG (GNU Privacy Guard, GPG) というアプリケーションを使います. この資料では,Colabまたは Chromebook端末の Linux環境を想定します.

Colab を使う場合は,こちらの演習教材を開いて,進めてください.HWB-gpg.ipynb

Chromebook端末の場合は,Linux ターミナルを開きます.

gpg コマンドを使う際の指示は,次のように表記します.

gpg --version
ターミナルの場合は,gpg --version に続いてエンターをタイプしてください.

Colab の場合は,右図のようなセルが対応します.必要に応じて黒字部分を書き換え,エンターの代わりに,セル左端の実行ボタン (黒地に白抜きの三角形) を押します.
colab の %%shell の部分は触れないようにしてください.その効果は,Python ではなく シェル (ターミナル) として使う主旨です.

なお,自身の端末で行う場合は,ターミナルから gpg コマンドが利用可能なことを事前に確認してください.ない場合は,インストールが必要です.

個人PCへのgpgのインストール

個人PCで演習する場合は,macなら Homebrew を導入後にbrew install gpg, Windows なら GitBash がお勧めです.どちらの場合も,インストール後にターミナルから gpg --version とタイプして,バージョンが表示されれば成功です.Command not found の場合は失敗.

21.7. Homebrew

22.1.1. Git BASH

homebrew でインストールした場合で,パスの設定がうまくいっていないと,gpg の代わりに /opt/homebrew/bin/gpg あるいは/usr/local/brew/bin/gpg とフルパスで指定すると動作する場合があります.

署名と検証 #

署名と検証は以下のように行われます. 右の図では,左の人物が執筆者,右の鳥が読者 (受信者) です. また message.txt が元の文書,message.txt.asc が署名済み文書です.

署名
署名者は自身の 秘密鍵 で署名します.署名付き文書を,公開したり送付します.
検証
受信者は,署名者 (通常は自分以外)の 公開鍵 で検証します

つまり,検証するためには,文書作成者の公開鍵が必要です.

検証の練習 — 1994年の情報棟は? #

演習用に用意された署名付き文書と,署名者の公開鍵を使って, 検証をしてみましょう.

HWB Project さんが,駒場キャンパスで学生が普通にウェブを見られるようになったころの歴史を 執筆して署名しました.

その後,端末の種類 ... の部分を, イタズラで書き換えた偽文書が混ざってしまって,どれが本物か分からなくなった,という状況を想定します.

駒場キャンパスの情報教育棟 (当時は南棟) 
は,1994 年 10 月 に完成し,そのときから
インターネットが自由に使えるようになりました.
端末は,... でした.

候補1 候補2 候補3

元の文章には,正しい文章には,HWB Project (hwb@idea.c.u-tokyo.ac.jp) の署名がしてあります. 署名を検証することで,どれが本物で,どれが改竄されたものかを判定してください.

公開鍵の入手 #

署名の検証には公開鍵が必要でした. 公開鍵をまず入手して,登録しましょう.これを import と呼びます. 次のボタンをクリックして,公開鍵をダウンロードして,hwb-pubkey.txt という名前で保存します. hwb@idea.c.u-tokyo.ac.jp の公開鍵

公開鍵はテキストファイルですが,人が読む (読める) ものではありません.

自分のgpgの鍵束に登録します.

$ gpg --import hwb-pubkey.txt 

次のような応答が表示されるでしょう.

gpg --import hwb-pubkey.txt
gpg: key B84E745EAE2A262A: public key "HWB Project <hwb@idea.c.u-tokyo.ac.jp>" imported
gpg: Total number processed: 1
gpg:               imported: 1
1行目の HWB Project <hwb@idea.c.u-tokyo.ac.jp> が重要で,誰の公開鍵を登録したかを示します. 冒頭の key B84E745EAE2A262A は鍵のIDですが,当面使いません.(同じ人が複数の鍵を使い分けるような時に必要になります)

gpgをはじめて使う場合は,初期化した旨のメッセージも表示されます

gpg: directory '.../.gnupg' created
gpg: keybox '.../.gnupg/pubring.kbx' created
gpg: .../.gnupg/trustdb.gpg: trustdb created

自分の鍵束の一覧は,gpg --list-keys と指示して確認します. 先ほど登録した鍵がありますね.

gpg --list-keys
.../.gnupg/pubring.kbx
------------------------
pub   ed25519 2026-03-31 [SC] [expires: 2029-03-30]
      A23F6FC1E767F12E9C26D237B84E745EAE2A262A
uid           [ unknown] HWB Project <hwb@idea.c.u-tokyo.ac.jp>
sub   cv25519 2026-03-31 [E] [expires: 2029-03-30]

検証 #

検証には --verify と指示します.

$ gpg --verify filename.txt

候補1 である hirabun-1.txt を検証しましょう.

gpg --verify hirabun-1.txt
gpg: Signature made Tue 31 Mar 2026 12:43:57 PM UTC
gpg:                using EDDSA key A23F6FC1E767F12E9C26D237B84E745EAE2A262A
gpg:                issuer "hwb@idea.c.u-tokyo.ac.jp"
gpg: BAD signature from "HWB Project <hwb@idea.c.u-tokyo.ac.jp>" [unknown]

最終行の BAD signature from HWB Project が重要で,検証に失敗したことを意味します.

colab 版では,gpg --verify hirabun-1.txt || echo failed のように || echo failed を追加しています.これは,検証に失敗したら failed と一行加えるよう指示しています. これは煩雑なエラーメッセージの抑止で,%%shell の代わりに ! を使うことでも回避できます.

候補2や候補3も試してみましょう.署名の検証に成功すると,Good signature と表示されます.その文書が署名時の正しい文書と分かります.

gpg: Signature made Tue 31 Mar 2026 12:43:57 PM UTC
gpg:                using EDDSA key A23F6FC1E767F12E9C26D237B84E745EAE2A262A
gpg:                issuer "hwb@idea.c.u-tokyo.ac.jp"
gpg: Good signature from "HWB Project <hwb@idea.c.u-tokyo.ac.jp>" [unknown]

続く行にでている WARNING については,つづく説明を参照してください.

公開鍵の信用 #

署名に検証した際に,次のような警告が出ていました. これは,署名の検証に成功したが,この公開鍵を信用して良いかわからない という警告です.

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: A23F 6FC1 E767 F12E 9C26  D237 B84E 745E AE2A 262A
偽の公開鍵を使ってしまう可能性は,公開鍵暗号系全般で重要なリスクです. 対面で渡す,共通の知り合いの署名をもらうなど,適切な運用が必要です.

どの鍵を信用するかどうかは,gpg に自身で設定します. 自分の公開鍵・秘密鍵のペアを作成後に可能となります.

GPG はじめての検証 共通鍵暗号
このサイトは開発版の はいぱーワークブック です.