[トップページ] [星雲紀行] [MLXS] [WPGen] [自作音楽] [モデル] [vi/vim] [tips] [自己紹介]

PGP / GPG

目次

  1. このページは
  2. pgp
  3. gpg
  4. 使用する上で気をつけること・TIPS
  5. pks
  6. メーラ
  7. 私の鍵
  8. 参考文献・参考ウェブページ
  9. 履歴

このページは

PGP とGPGについてのまとめ・TIPS 集です。フィードバック収集のためのドラフト版です。

PGP とは、データの送受信をする際の暗号化ソフトです。
公開鍵、秘密鍵暗号方式を使用します。
Gnu PG (GPG) と違って企業の製品です。
個人利用はフリーですが、商用利用はライセンスが必要です。
GPG との互換性があるが、時折相互にエラーが発生することがあります。

暗号化通信の標準になりつつあるが、日本語のドキュメントが非常に不足しています。
秘匿性の高いドキュメントは暗号化が必須です。
しかし、PGP に関するプロは非常に少ないです。
企業や大学のネットワーク管理者の負担が少しでも減ればと思います。

本稿が役に立てば幸いです。間違いがあればご指摘ください。
メールアドレスが末尾に記載されています。

[content]

PGP

Pretty Good Privacy の略です。
企業が作成しているCLOSED な仕様かと思っていましたが、Open PGP というOPEN なプロジェクトもあるようです。

[content]

windows PGP ユーティリティ

WINDOWS のPGP のユーティリティはGUI で基本的にマウスで操作する。

バージョンごとに仕様変更が大きく、 多人数のユーザで共通の操作をしたりするのはなかなか難しいです。
そのため、開発チームで使用するときなどには、 必ずバージョンをはじめにそろえたほうが運用しやすいと思います。

参考になるバージョンの差分のまとまったページはこちらです。
PGPのバージョンによる違い

[content]

windows PGP コマンドライン

WINDOWS 版のコマンドラインPGP ツールは残念ながら最新のPGP-9.0.0 では別ソフトに なってしまい使い勝手が減ってしまいました。
しかし、コマンドラインのほうが作業の自動化が少ない手順で出来て便利です。
例えばWINDOWS のコマンドプロンプトで以下のコマンドを入力すると 作成したグループの情報が取得可能です。

$ pgp -gvv GROUP_NAME > GROUP.log

cygwin やMingGW など、TEXTUTILS がある環境では上記のように リダイレクトを使って情報を記録できます。

参考に作成したスクリプトを掲載します。
perl のスクリプトで<pgp id> を抜き出すスクリプトです。

#!/usr/bin/perl
# <pgp id> を抜き出すスクリプト get-pgpid.pl
#===============================================================
#
# 引数チェック
#----------------
#$index=0;
#foreach $arg (@ARGV)
#{
# printf ("DEBUG:arg".$index.":".$arg."\n");
# $index++;
#}
if($ARGV[0] eq "-h")
{
&usage( );
}
printf("pgp -ga GROUPNAME");
while (<>) { #「段落」単位で読み込んで,
s/0x........ /$&/g; # /........ を見付ける
#s/$'//g; #パタ-ンマッチする後の文を削除する
#s/\/........ /$&/g; # /........ を見付ける
#s/$`//g; #パタ-ンマッチする前の文を削除する
#print "$_\n"; #空行付きで出力する
print "$& "; #空行付きで出力する
}
exit;
#
# 使い方を表示
#----------------
sub usage {
print <<EOT
<pgp id>抜き出すスクリプト
Usage: pickup_gpgid_from_pgp_ga.pl [filename]
filename : open file name
EOT
;
exit(1);
}

これを使ってメンバ管理をしていたのですが、実際にはWINDOWS のPGP クライアントだけで管理するのは至難の技です。
PGP 社のPGP Universal や、フリーなPublic key server を使ったほうがはるかに便利です。

参考になるバージョンの差分のまとまったページはこちらです。
PGPのバージョンによる違い

[content]

GPG

GPG はGNU Privacy Guard の略です。
本当はPGP をもじったものと思われます。

GPG とはGNU がフリーソフトウェアで配布しているソフトでPGP との互換性があり、 PGP は”武器”にあたるとして輸出が規制されていた問題から作成されたものと言われています。
オープンソースになっています。
詳しい説明はhttp://www.gnupg.org/をご覧ください。
UNIX になれた環境であればPGP よりも多種のフロントエンドがあり、 オープンソースのGPG がお勧めです。

[content]

gpg 基本的な使い方

以下のようにファイルを指定してください。
以下に例を記載したようなCUI のほかにGUI のフロントエンドをもった クライアントを使用することも可能です。
Thunderbird のEnigmail が便利です。
複数メンバのコマンドライン上の暗号化方法

$ gpg -ear USER1 -r USER2 test

ファイルを暗号化する zzz.lzhというファイルを暗号化する場合

$ gpg -o zzz.lzh.gpg -c zzz.lzh Enter passphrase: を表示するのでパスフレーズを入力 Repeat passphrase: もう一度、パスフレーズを入力

ファイルを復号化する zzz.lzh.gpgというファイルを復号化する場合

$ gpg zzz.lzh.gpg gpg: CAST5 encrypted data Enter passphrase: パスフレーズを入力
[content]

gpg コマンド簡易リファレンス

  • 公開鍵、秘密鍵の作成
    $ gpg --gen-key
  • 破棄証明書の作成
    $ gpg --gen-revoke [keyid]
    これを配布してこの鍵をimport することで鍵が抹消される。
  • 鍵一覧表示
    $ gpg --list-keys [KEY_ID]
  • フィンガープリントの表示
    $ gpg --fingerprint KEY_ID
  • 公開鍵のエクスポート
    $ gpg -a --export KEY_ID
  • 秘密鍵のエクスポート
    $ gpg -a --export-secret-keys [KEY_ID]
  • 鍵のインポート
    $ gpg --import USER.asc
  • 暗号化
    $ gpg [-o OUTPUT_FILE] -ea ENCRYPT_FILE
  • 復号化
    $ gpg -d DECRYPT_FILE
  • 鍵の署名
    $ gpg --lsign-key KEY_ID
  • 公開鍵の削除
    $ gpg --delete-key KEY_ID
  • 秘密鍵の削除
    $ gpg --delete-secret-key KEY_ID
  • 公開鍵の検索
    $ gpg --keyserver KEYSERVER_NAME --search-keys TARGET_NAME

そのほかのコマンドについては以下のページが参考になります。

[content]

options

GPG を使用するときにはGPG とPGP での互換性を高めるために、 以下のファイルを作成しておくことがお勧めです。
以前はこれでもたまに失敗するときがありましたが、最近は問題がでていません。

~/.gnupg/options

内容は

force-v3-sigs
[content]

--force-v3-sigs

GPG とPGP での互換性を高めるために暗号化の際には以下のような オプションを打ち込む。

$ gpg -sea --force-v3-sigs ENCRYPT_FILE
[content]

対称暗号化

非推奨の暗号方法です。
-c オプションは

$ gpg -csa --force-v3-sigs ENCRYPT_FILE
[content]

GPG グルーピング機能

以下のようなスクリプトでグルーピングが可能。 しかしコマンドラインから使用しにくい場合には GUI フロントエンドなどのほうが無難です。 UNIX が使えるチームであればいかのようなスクリプトを一人が管理しておくと便利と思います。

1 #!/bin/sh
2 gpg grouping sample script
3 #================================================================
4 if [ $# -ne 1 ] ;then
5 echo "usage"
6 echo ""
7 echo "command FILENAME"
8 echo ""
9 echo " FILENAME: GPG encrypt file."
10 echo ""
11 exit 1
12 fi
13 gpg -ear USER0 -r USER1 -r USER2 -r USER3 -r USER4 -r USER5 $1
[content]

使用する上で気をつけること

鍵期限の変更

PGP は期限の設定が出来ますが、忙しいときにちょうど期限が来たりすると非常に困ります。
そのとき期限の変更が可能です。

しかし、PGP で変更した期限はGPG でうまく解釈されないことがあります。
これを回避するために、一度PGP で期限を変更した鍵をGPG でimport して、その後にGPG で期限をまた変更します。
そしてさらにGPG からエクスポートすればGPG でも問題なくなるようです。

こういったトラブルをなくすためにも、期限の設定は慎重にするべきです。
筆者は無期限にしています。

[content]

フィンガープリント

PGP 鍵は各自の鍵を識別するために鍵の指紋(フィンガープリント)を持っています。
要はただの通し番号です。末尾8 桁はPGP KEY ID になっています。
メールのヘッダや署名に入れて自分のPGP 鍵のフィンガープリントをお知らせするのが一般的です。
このあたりの事情に詳しい人か、ちょっとかっこつけてみようという人がよくメールに入れています。
詳しくは後述しますが、メールの署名に入れるのは冗長になり、得意げがでてしまうのでお勧めしません。

PGP 鍵といつももらうメールについているフィンガープリントを確認してから自分の持っている鍵リングに入れるのが一般的です。
ただし少々面倒なので、"PGP の署名"という他者の確認に頼る、という鍵リングへの登録手法があります。

[content]

pgp の署名

PGP には署名機能があります。

PKS などでその鍵がかならず本人である、というように証明するときにユーザ一人一人にフィンガープリントを確認してもらうと手間がかかるので、信用できる管理者を一人決めて、その信用できる署名がある鍵は信用する、という使い方をします。
PKS でなくとも署名を施すとその鍵は"署名者の署名が付いた鍵"になります。
これは署名者をはじめに決めておかないと非常にややこしい問題になります。
ローカルに署名者が増えていったときに、どの署名者の署名の付いた鍵がいいのか、混乱する可能性があります。
例えばプロジェクトマネージャとネットワーク管理者と2 名の署名をつける、という場合には、最悪で4つのパターンの鍵が出来てしまいます。
取り込んでしまえば一緒ですが、差があるということはややこしく非常に面倒です。
そのため、署名者の選定はプロジェクト、または研究室単位などできるだけ大きな単位で一人にするべきです。

今まで手作業の工程を述べましたが、その一人の負担は手作業の場合には非常に大きくなります。
規模が大きくなる前にPKS などで署名の自動化を行うべきでしょう。

お勧めとしては登録用のサーバを作成し、そのサーバに自動署名機能をつけ、外部に鍵を配布するときには、ユーザ自信にサーバに一度登録してから出すしくみにすると楽です。

手作業は避けたほうが効率が良いです。

[content]

メールヘッダ

PGP/GPG に関するメールヘッダには以下のようなものがあります。

  • X-PGP-Fingerprint
  • X-PGP-FP
  • X-PGP-Key

良くメールの最後にFingerPrint をうれしそうにつける人がいるが、 一回見ればいいのだし、ヘッダに書いてあったほうが見たい人は見れてスマートです。
メールヘッダ一覧へのリンク
ただし、X-PGP-Key (PGP 鍵の実体)はサイズが大きくなりすぎるのでメールヘッダに毎回 記載するべきではありません。
あとは同じものを2回使っても仕方ないのでX-PGP-Fingerprint だけ使うと便利と思います。
これもプロジェクトや研究のキックオフ時に宣言して決めてしまうのがいいと思います。
メーラの設定が異なったりする環境では非常に統一が難しい問題です。
OUTLOOK などでは"メールの署名"に入れるしかありません。

[content]

鍵の廃止

すでに使用しない鍵は無駄な暗号化を避けるために、廃止して配るべきです。
複合権限を与えるユーザを増やすと暗合した後のデータが膨らみます。
トラフィックが混雑するのを防ぐのにもよいですし、 セキュリティ的にも誤って昔の鍵で暗号化されてしまうと情報漏えいの危険性があります。

万が一秘密鍵が流失した場合でも、廃止鍵を配って新しい鍵に置き換えれば安心です。
昔の鍵は使用できなくなります。
鍵の廃止方法は以下です。

  • Windows PGP クライアントでの廃止(REVOKE)鍵の作り方
    1) 廃止したい秘密鍵がある自分の鍵を選択する。
    2) 右クリックし、"破棄"を選択する。
    3) "破棄"したあとの鍵を選択する。
    4) 鍵をエクスポートし、ファイルに出力する。
    5) 出力時、破棄されたことがわかるようにファイル名称に "revoke" という文字を含めてください。
    例:revoke-username.asc
  • コマンドライン GPG での廃止(REVOKE)鍵の作り方 以下のコマンドを入力してください。
    $ gpg --output revoke.asc --gen-revoke YourMailAddress@domain.com
[content]

暗号化技術

128bit 安全性の鍵を使用すればBLUE GENE 100万台使っても350億年かかり、実質安全。

本当に安全か、量子コンピュータができれば無駄だ、という議論がでがちだけどそのときには暗号強度を上げればよい。
現在から数年は確実に問題ない強度であれば積極的に使っても問題は無いと思われる。

[content]

安全性

広く使われているデファクトスタンダードの暗号化方式がPGP であるが、本当に安全かを議論するときにはくれぐれも安全といわないこと。
なぜならば、暗号・複合の基礎は因数分解なのでブルートフォースアタック(総当り攻撃)で時間をかければどんな暗号も解けないことはない。

実際の時間とのトレードオフで解析にかかる時間がその情報が陳腐化する期間を上回るのであれば、充分機密を守れるレベルであり実用に耐えるだろう。
このときに解析に使用するマシンは当時もっとも早いコンピュータで計算すると比較がしやすい。だが量子コンピュータが実用化されたときなど、ブレイクスルー後の世界では予測がはずれるかもしれない。しかしブレイクスルーといえるほど性能が上がったコンピュータが実用化されるまでの期間と扱う情報が陳腐化するまでの期間を比較して考えれば、よほど重要な何年越しの秘匿性を保つ情報でなければ問題ないだろう。

もしもこの文章を読む人がセキュリティを考慮しなければならない人間またはチーム内で運悪くPGP を運用する羽目になった人間は、この手の”本当に安全なのか”という話にあたるだろう。そうなったらなるべく早く上記のコミットメントを認識させることが重要だ。
どうしても納得してもらえなかったら”それではあなたが解いて御覧なさい”と言うことだ。(大風呂敷な話はあまりPGP の恩恵を受けていないメンバだったりするから非常にたちが悪い。暗号・複合は処理量とのトレードオフであるため、常に改良・改善の余地が多々あるだけに、研究色の強い人間からは遠ざけたい話題だ)。

メールである程度安全にデータが送れるおかげで出張や会議が減らせ、大幅に作業時間の削減になる。
PGP のこの恩恵はありがたい。スムーズに運ぶように慎重に進めることだ。

[content]

メーラ

  • enigmail
    • ローカル鍵リングを使って自動暗号複合ができ便利。
    • 日本語非対応。
    • enigmail の"search for keys" はバグあり。
[content]

PKS

PKS について。
PKS は鍵の管理を行います。LDAP,LDAPS.HTTP,HTTPS プロトコルが使用可能です。
これは運用上ほぼ必須です。
PKS、又はPKS に相当するサーバ(PGP 社のPGP UNIVERSAL)がない状態はなんとしても避けてください。
これがあれば、メンバの入れ替わり、配布、登録、削除、検索、すべてをまかなうことができます。
http://sourceforge.net/projects/pks/

[content]

私のpgp/gpg 公開鍵

KGussan@Gmail.com

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (MingW32)

mQGiBEQS0XoRBACWiKYbpJdESPuzZebMyZxkYUmOqqG7KIriQtet77F/gofCSoEV
WCbQhiZPI+2clH3hksxol+mjI/dovWfEr7+4By60x8JvMd4yt0n3LXP889r4AmB9
r2z7bdcwC8jQUKb+B8asaX691ZO4CL9vEp9rNz2XE0AvKAzh6VAuEPTxVwCgjNVx
OTeQ8dXM5082BaZtjvTZOt0D/jbfmqbfCjntq9csL/qsByoQvQuLVGOG/ssCo8e2
JCgVGehb5YyTNQd6Vl0EclHNPFUSF9WDuy38O90YuaE4ynnWbpKaGlDV8QyqFrde
tDtAXllW/VQYp1gR5Y9YNaiHxnzkxdkTETMgRy5Rz9qju2Rk+HaI7kjIloESluxw
ssEJA/9FtbEtl+/ArlfX4+JRDoEenS8FJdhxalAvevhzeZLxcotcQPZD77mSNCXj
8BsIAixPFexhn1xdNgdFU3IIWykYtIyVa/JOkkfUyg8i8U4FKAsL7Kf/hFJ6tlTF
Ya88z+0FxFM6kDaBGcj9FDPhGI6OH8Gzd+0N8HXLC6wffBjVPrQbS0d1c3NhbiA8
a2d1c3NhbkBnbWFpbC5jb20+iF0EExECAB0FAkQS0XoGCwkIBwMCBBUCCAMEFgID
AQIeAQIXgAAKCRCJyTw4JpT4XX6OAJwJSLju6kv5UtIhLhsVTLGcnKthMACfR9Qe
16GtR8uB4OA9ewEDpidIwvi5Ag0ERBLRhRAIAM1yekpgEkQ91rLbldIKptxNlgZL
N+v6RUY4QxJeoN0KIeqGLNd69QBmhQaFdUpb47e2+UgAhopk+egf4mwdxrtQo57A
QFodIV4xp0IWWZOHUasZU/oEL6y5CWiG29JwDS5ZlbJwL9Wlm60wfclrs4aj4Iz+
/XehymBuvb2RaYbt4qCF9b5MU45Xp0DdBBKsaMqbr6HB0BItUmtJMl29x5RNv5w/
rNVZbhOz97zRu3PPxqZAw7vtwj/49qavs7uHrNEP/ffGiQ89qi4sAW3nE/LKSfVy
NZBAaH+cgJsaB4r5Bwz8Z9sginY06VpMhd5/qBLee4fwK8i5Rg2OlhOJGysAAwYH
/26KvB7B6hn778NTrDCGdTchc/nt3wyyXEhGZTh7Qc+A241V4Hv06kBs8MddSmfn
VTnYoCLCafP9APjskp0rfp1KfQApsAsdHsTntcEL014cCUhKnafLCwGzgfY2iUPz
4Uo1mgnsI/0lUMjUKEEuSrRbwj6+2Zt17TndEmi6RPcqm6kwqpzOHAGUZH/9bGt6
y4BYRp1OPn6msCmdjd1IQGtDka3XoJGSxQxtC1ZtkNpzH/kHodIOYYGFfk0/zHVI
YZp2k1zThIE4r6VwXNYUo8Lfog4QqP8difHkAd6ABubZg16SsETRDY1yUTnVTzDx
us+DSljhAath8TOqtfoEcHyIRgQYEQIABgUCRBLRhQAKCRCJyTw4JpT4XXO5AJ0R
ElUHHKERtzXl3ZLP7raeAQyiXACffAcEiEtWethH9SwPnVrzG6rbDO8=
=5aih
-----END PGP PUBLIC KEY BLOCK-----

または、 日本 公開鍵サーバに置いた鍵か、 MIT 公開鍵サーバに置いた鍵

古い鍵の廃止鍵

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (MingW32)

mQGiBEHFShsRBADBO78NSMz+bqnnhPzH1t5a5JU89nurdsfNq/FreBqlL4YgZMy9
AurVPqMGY7G+eaoq0HjnB5hJGYACbIdqqMDRwZbV6vh5SCWTTM0WHCBxk9H/Oal8
SwGyen5EuV93BiWel9RIZZAmPSQg2tP7BCHBAbsiofhTwtqAwic5l9EkuwCgh5WO
DGIbO/WhALgzPDv/luHFMCcD/i9q5Bv9O8fDkjkbKdXrb/kdMuKFbu3tionfNEPS
nRGd9xrSY6tOm13wPrADoaCHhdFAgsWxvfeD1hs5s5VPdqpwu2gUd8QIrRacvOF6
xb954UoCLWszlB8DLW8XXkb52zMM//3kdXdvO0rFr0Vp1VUM+4mY3i8DKX0KJ+/m
touOA/9zB4xVhoqKPz16c7G3HINGZlB8Vveb+emACh505k6rYNvvt/LJXcxh4xsT
hhoe1YEEgX6uLMsJkFENiFBZJo9F/65k2/XQk909B7pP3i3mZNVX29l1tlaMA/YT
KUoRBQdP8JGI4CieebtWXC8EXkWkZAjUfsibYSwquHMEhNCRg4hJBCARAgAJBQJE
EsSoAh0AAAoJEAAhBu8OYnOo31UAmgJWMnK8iQ2PSUblMppArOWhGzmoAJ9sFiWK
4udeshhE8M8ONMeblucmg7QZR3Vzc2FuIDxndXNzYW5AaW50ZXI3LmpwPoheBBMR
AgAeBQJBxUobAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEAAhBu8OYnOoD54A
n0pjaWrMI/NOz6HEv6oz3udQs+X6AJsHRAUS6q0ztFnK3/DVOJostN21hoheBBMR
AgAeBQJBxUobAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEAAhBu8OYnOoD54A
n0jfT5fJsdvMlguo4tLu9+T4iR+oAJ4sMVaBpv6lzm+/UctAiur4lgp6K7kCDQRB
xUoxEAgAze3vL2hWiZwEcz9BXn/uTau/912kPGqwXn6/AHsqcQAJVgm4ja5Dkpj/
h4Q0OeymPzt3niG4t1RLTT3y+kyh+Cjk90eBoUh/sZsOLzl+JnvC9uO5PrehRzSd
c8o10eVco6mcUzsz6yY+etmXlOOtij3Ko8ask+qvGP21YGOXVybd5YsKebC7JSaq
kdbDvxX/O3vvL61sCqYGkyf6eu2W+9i1j+aRJH4vgVoBg5LfPCbSb4l9iLKJWgdd
q1/YnitiSFJQuUsTMh7lIzlzJ11yi4tejz9Pnr9dI/zG0lUErjsjiJrTzBAVD3q9
4w44rnMlbB4MJdaXPCywV3CEGLGozwADBQgAj5/doDpdezqROkgeHIhdlU/BOAnZ
aVJtuwFrlsfYpiiajdA4T78u0Gb+dU0LybCo+7ZabRyTvpHZaTYCRbsabha1jblg
1goZdz4eukgppd2K8uRJQQwo39PTYlLKmPnIwc7+LEI607QYUWg3qo1IZNaVzprS
eAV1PXTIqjt40WO+9UMT2sw1134r/W8TOYcCMcbo17iUYiiu95scI18bLfjzblog
tJsJ5S/qMGQ3ZCH7PXHs0mTP5byzJmGlshQM9+5QZbbPXvzjmWp8YrXpN4dYKAWE
C7UDrm5kZPrw//D2QiaJ4PtIWBWrhmabZjeGtX6c10tuMhgVEL8XZ/0F9ohJBBgR
AgAJBQJBxUoxAhsMAAoJEAAhBu8OYnOoTVIAoIQOHHSabIXcKq2ryzP5qXzG1TWX
AJ9nZnIrcsCEDo6+f4uxBQOh8H+K1Q==
=cw7l
-----END PGP PUBLIC KEY BLOCK-----

上記テキスト以外にも以下の場所から参照できます。 日本 公開鍵サーバに置いた鍵か、 mit 公開鍵サーバに置いた鍵

[content]

参考文献・参考ウェブサイト

履歴

  • 2006/10/22 修正。
  • 2006/09/22 PKS 追記。更新。
  • 2006/07/29 GPG とマージ。更新。
  • 2006/03/11 修正
  • 2004/00/00 初版作成
[content]
ご意見、ご感想、誤字、間違い等、お気づきの点がありましたら KGussan@Gmail.com まで連絡ください。
このウェブページの注意・免責事項 Copyright (C) 2004-2012 KGussan. [トップページ]
[PR:元国税局勤務の起業家向け、遺産相続の相談なら植村洋税理士事務所:一時間無料税理士相談。お気軽に。]