山根信二
<s-yamane@soft.iwate-pu.ac.jp>
岩手県立大学ソフトウェア情報学部
鈴木 裕信
<hironobu@h2np.net>
OpenPKSDプロジェクト
1
平成14年2月13日
対象とするツールは,2001年に公開されたGnuPG 1.0.6 と PGP 6.5.8(およ び7.1)である. 両者は,1998年にRFC 2440[1]として公開された OpenPGPの仕様に準拠しているが,細かい点で違いがあり, また,同じツール同士でもバージョン間の互換性に問題がある. また,2002年2月現在 見直しが進められているRFC 2440の改定案[2]についても 言及する.
以下に,利用できる暗号アルゴリズムの詳しい比較を行なう.
OpenPGPの仕様,そしてPGP/GnuPG実装が,それぞれ採用している 公開鍵暗号/電子署名,共通鍵暗号,ハッシュ関数のアルゴリズムを 比較したのが,次の表1である. この比較について説明を行なう.
また,OpenPGPも見直しを受けている. RFC 2440のOpenPGPでは 共通鍵暗号AESはあくまでReserved(将来の利用のための予約)として位置づけら れているが, 2001年に出された改定案のインターネットドラフト[2]では, Triple-DESの実装がMUST扱いなのは変わらないが,AES-128およびCAST5がSHOULDに変わっている. そしていまのところPGP6.5.8はAESに対応していない. このような状況では,共通鍵暗号についてはデフォルトのCAST5を用いるのが 相互運用性の面で確実である.
PGP/GnuPGともにMD5の規定についてはOpenPGPに従っており, MD5は実装するもののSHA-1をデフォルトにしている. しかしながら, GnuPGではMD2は実装されておらず,秘密鍵のハッシュ処理に RIPE-MD/160を採用している. このことから,GnuPGはOpenPGPで推奨されている技術標準を 尊重しながらも,暗号学的により安全なアルゴリズムを 積極的に利用する方針であることがわかる.
最新版をデフォルトの状態で利用する限り,PGPとGnuPGそれぞれの利用アルゴリ ズムの相互接続性は確保される.しかしながら,PGPでしか使えない/GnuPGでし か使えないアルゴリズムを選択することも可能である. この採用アルゴリズムの相違は,過去のバージョンとの互換性や特許の問題によ るものである.
最新版に移行していない利用者も数多く存在する現時点では, PGP/GnuPGをコミュニケーションに用いる場合,単に技術標準に 定められた暗号アルゴリズムを使うというだけでなく, 相手の環境を考慮してアルゴリズムを選択することが重要である. したがって,デフォルト以外の設定でPGP/GnuPGを利用する際には 注意が必要とされる.
GPLライセンス下で自由に配布できる GnuPGに関しては,どのディストリビューションもインストールパッケージを 用意しているだろうから,入手できず困るといった問題はほとんどないと 思われる.また現在ではアメリカの暗号輸出規制が事実上撤廃されたのでPGP,あ るいはGnuPGを米国サイトから直接入手しても問題はない.
ソースコードも公開されて いるが,UNIX上でコンパイルできるソースコードパッケージが用意されているわ けではないので,このアーカイブを入手するだけではコンパイルができないの で注意が必要である.
% lynx ftp://ftp.pgpi.com/pub/pgp/6.5/6.5.8/PGPcmdln_6.5.8.Lnx_FW.tar.gz % tar zxf PGPcmdln_6.5.8.Lnx_FW.tar.gz % tar zvxf PGPcmdln_6.5.8_Lnx_FW.tar.gz pgp-6.5.8/ pgp-6.5.8/pgp ... pgp-6.5.8/man/man1/pgp.1 % su # cp pgp-6.5.8/pgp /usr/local/bin # cp pgp-6.5.8/man/man1/pgp.1 /usr/local/man/man1
GnuPG 1.0.6は,他のGNUソフトウェアと同じく基本的にソースコードで公開され ており,バイナリが用意されているのはWindowsプラットフォームのためのみである. コンパイルは,メジャーなUNIXプラットフォームであれば問題なくコンパイル できるはずである.面倒ならば各ディストリビューションが用意しているバイ ナリーのインストールーパッケージを探してきてインストールしても問題はな い.
GnuPGをインストールするには/dev/randomか,存在しないない場合は代替とし てegd (Entropy Gathering Daemon)が必要である.GNU/LinuxやBSD系のディス トリビューションでは,デフォルトで/dev/randomが作成されているので問題 はないはずである.他のUNIXプラットフォーム,あるいは/dev/randomがない 場合はegdを別途インストールすることを勧める./dev/randomやegdがなくと も動かないことはないがシステムからエントルピーを取得しようとする際に時 間がかかるため,処理効率が非常に悪い.
% lynx http://pgp.nic.ad.jp/resources/gcrypt/gnupg/gnupg-1.0.6.tar.gz % tar zxf gnupg-1.0.6.tar.gz % cd gnupg-1.0.6 % ./configure ; make % su # make install
ここではGnuPGを例に利用方法について説明する. GnuPGはシステムメッセージの多言語がすすめられており, 日本語でのメッセージ表示も可能である. (くわしくはパッケージに含まれているABOUT-NLSを参照のこと.)
% gpg -help
gpg (GnuPG) 1.0.4
Copyright (C) 2000 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
Home: ~/.gnupg
サポートしているアルゴリズム:
Cipher: 3DES, CAST5, BLOWFISH, RIJNDAEL, RIJNDAEL192, RIJNDAEL256, TWOFISH
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA, ELG
Hash: MD5, SHA1, RIPEMD160
書式: gpg [options] [files]
署名,検証,暗号化,または 復号
デフォルトの動作は入力データに依存
コマンド:
-s, --sign [file] 署名を作成
--clearsign [file] クリア署名を作成
-b, --detach-sign 分離署名を作成
-e, --encrypt データを暗号化
-c, --symmetric 暗号化には対称暗号法のみを使用
--store 保存のみ
-d, --decrypt データを復号 (デフォルト)
--verify 署名を検証
--list-keys 鍵の一覧
--list-sigs 鍵と署名の一覧
--check-sigs 鍵の署名を検証
--fingerprint 鍵と指紋の一覧
--list-secret-keys 秘密鍵の一覧
--gen-key 新しい鍵ペアを作成
--delete-key 公開鍵リングから鍵を削除
--delete-secret-key 秘密鍵リングから鍵を削除
--sign-key 鍵に署名
--lsign-key ローカルにて鍵に署名
--edit-key 鍵への署名または編集
--gen-revoke 破棄証明書を作成
--export 鍵を書き出す
--send-keys 鍵サーバに鍵を登録
--recv-keys 鍵サーバーから鍵を読み込む
--import 鍵の読み込み/マージ
--list-packets パケット列のみの一覧
--export-ownertrust 所有者を信用した値を書き出す
--import-ownertrust 所有者を信用した値を読み込む
--update-trustdb 信用データベースを更新
--check-trustdb [NAMES] 信用データベースをチェック
--fix-trustdb 壊れた信用データベースを修復
--dearmor ファイルまたは標準入力の装甲除去
--enarmor ファイルまたは標準入力の装甲化
--print-md algo [files] メッセージ要約を出力
オプション:
-a, --armor アスキー形式の装甲を生成
-r, --recipient NAME NAME 用に暗号化
--default-recipient NAME デフォルトの受信者として NAME を用いる
--default-recipient-self デフォルトの受信者としてデフォルトの鍵を用いる
-u, --local-user 署名や復号に この user-id を用いる
-z N 圧縮レベルを N に設定する (0 は非圧縮)
--textmode 標準テキストモードを用いる
-o, --output 出力ファイルとして用いる
-v, --verbose 冗長
-q, --quiet やや静か
--no-tty 端末を使用しない
--force-v3-sigs 強制的に v3 署名する
--force-mdc 暗号化には常に MDC を使用
-n, --dry-run 全ての変更を用いない
--batch バッチモード: 問い合わせを行わない
--yes 全ての質問に yes と見なす
--no 全ての質問に no と見なす
--keyring 鍵リングの一覧に この鍵を加える
--secret-keyring 一覧に この秘密鍵リングを加える
--default-key NAME デフォルトの秘密鍵として NAME を用いる
--keyserver HOST 鍵の検索に この鍵サーバを用いる
--charset NAME 端末の文字コードを NAME に設定する
--options ファイルからオプションを読み込む
--status-fd FD この FD に状態を書き出す
--trusted-key KEYID ulimately trust this key
--load-extension FILE 拡張モジュール FILE を読みこむ
--rfc1991 RFC1991 に記述されたモードを用いる
--openpgp 全てのパケットと暗号と署名のオプションを OpenPGP の振舞に設定
--s2k-mode N パスフレーズモード N を用いる
--s2k-digest-algo NAME パスフレーズにメッセージ要約アルゴリズム NAME を用いる
--s2k-cipher-algo NAME パスフレーズに暗号アルゴリズム NAME を用いる
--cipher-algo NAME 暗号アルゴリズム NAME を用いる
--digest-algo NAME メッセージ要約アルゴリズム NAME を用いる
--compress-algo NAME 圧縮アルゴリズム NAME を用いる
--throw-keyid 暗号パケットの鍵 ID フィールドを送出する
-N, --notation-data NAME=VALUE この注釈データを用いる
(See the man page for a complete listing of all commands and options)
例:
-se -r Bob [file] ユーザ Bob への署名と暗号化
--clearsign [file] クリア署名を生成
--detach-sign [file] 分離署名を生成
--list-keys [names] 鍵を表示
--fingerprint [names] 指紋を表示
バグを見つけたら <gnupg-bugs@gnu.org> までレポートを送って下さい.
以上がGnuPGのヘルプメッセージである. コマンドライン版GnuPGはこのヘルプメッセージを適宜呼び出しながら操作することができる. GnuPGの全てのオプションを覚える必要はないが,GnuPGに何をさせるかを 理解しておかなければ,ヘルプを読んでもどのオプションを使っていいのか わからない.
次に,理解のための手引きを述べる.
公開鍵暗号を使うには,公開鍵とそれに対応する秘密鍵をペアで用意する. さらにOpenPGPでは暗号化(生成および解読)に使う鍵ペアと,電子署名(の生成お よび検証)に使う鍵ペアは別に扱っている. つまり暗号化のための鍵ペアと電子署名に使う鍵ペアの2つを生成し, 用意している.
デフォルトのGnuPG 1.0.6では,暗号化と電子署名に使えるアルゴリズム組合
せは表2の通りである.
|
ちなみにヘルプのPubkey: の所で示される``-E''は暗号化 アルゴリズムとしての利用,``-S''は電子署名アルゴリズムとしての利用という 意味である.GnuPGでは鍵生成の時にRSA鍵を作る選択肢は用意されていない.
コラム: これは技術的な問題でも実装のためでもなく過去に存在したRSAパテントの問 題である.また今後もRSAの鍵生成をサポートする予定はない.PGPはRSAの鍵 生成用意してはいるが筆者からは利用を推奨しない.方向性としてはPGP, GnuPGの両陣営ともRSAを使わない方向に向かっている.
まず一番最初に,自分の鍵(公開鍵ペア)がなければ始まらないので,鍵を生成 する.そのまえに,鍵ペアを納めるディレクトリが必要である.デフォルトで ある~/.gnupgを生成する.このディレクトリを作成後,``-gen-key''オプショ ンを用い鍵を生成する.
なおgpgを実行すると「gpg: 警告: 安全でないメモリーを使用しています!」 というメッセージが毎回出力される環境がある.これは第三者がgpg実行時に 使用する記憶領域を参照できるということを意味しているが,これは利用して いるOSに依存するためアプリケーションであるgpg側では回避できない.
--
% mkdir ~/.gnupg % chmod 700 ~/.gnupg % gpg --gen-key gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. gpg: 警告: 安全でないメモリーを使用しています! gpg: /home/hironobu/.gnupg/secring.gpg: 鍵リングを作成しました gpg: /home/hironobu/.gnupg/pubring.gpg: 鍵リングを作成しました 鍵の種類を選択して下さい: (1) DSA と ElGamal (デフォルト) (2) DSA (署名のみ) (4) ElGamal (署名と暗号化) どれを選びますか? <--(1) Enterを入力
入力(1)について: 公開鍵を使っての暗号化と署名に利用するアルゴリズム方式の選択である.電 子署名にDSA,暗号化にElGamalという組合せがデフォルトである.電子署名の 利用のみしか使わないという場合はDSAのみという選択ができる.ElGamalを電 子署名,暗号化の両方に使うこともできるが,暗号学的には安全性な どの差はない.これはDSAもElGamalも同じく離散対数問題の困難性を利用して いるためである.
DSA 鍵ペアは 1024 ビットになります
新しい ELG-E 鍵ペアの生成について
最小の鍵サイズは is 768 ビット
デフォルトの鍵サイズは 1024 ビット
最大の鍵サイズは 2048 ビット
どの鍵サイズを選択しますか? (1024) <--(2) Enterを入力
入力(2)について: 鍵長の指定である.786ビット以上であれば任意の鍵長を指定できる.今後5年 間のコンピュータ技術を勘案してもデフォルトの1024ビットで十分に安全であ る.2048ビットまではユーザに取ってリーズナブルな選択である.それより 2048ビットより大きな値を指定することも可能だが,ユーザに対して警告メッ セージがでる (それでも続けると親切にも,かつ,なかなか興味深いアドバイスをしてく れる.これはTEMPEST攻撃のことを示唆している.TEMPESTのことを知りたけれ ば米国の国家安全保安局のウェブサイト (http://www.nsa.gov/isso/bao/tep.htm )に一般向け情報があるので,いったい どのようなことを意味するのか参考にすると良いだろう.)
要求された鍵サイズは 1024 ビット
鍵の期限を決めて下さい
0 = 無期限
<n> = 有効期限 n 日
<n>w = 有効期限 n 週間
<n>m = 有効期限 n 月
<n>y = 有効期限 n 年
鍵の有効性は? (0) <--(3) Enterを入力
入力(3)について: 鍵の有効期限である.デフォルトは無期限に有効である.技術的には 鍵の長さと有効期限に対する明確なクライテリアは存在していない.
鍵は無期限です これで良いですか (y/n)? y <--(4) y を入力
入力(4)について: 確認を求めるので``y''を入力する.
あなたの鍵を識別するために ユーザ ID が必要です.
このソフトは本名,注釈,電子メールアドレスから,次の書式でユーザ ID を
作成します:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
本名: Hironobu SUZUKI <--(5) Hironobu SUZUKIを入力
入力 (5),(6),(7),(8)について: GnuPGは本名,注釈,電子メールアドレスの入力という形で,入力を求めるが OpenPGPのユーザIDの定義は任意の文字列である.名前や電子メールをいれて いるのは慣用的なものである.注釈,電子メールアドレスの入力は省略できる. OpenPGPで定義されている利用文字コードはUTF-8であるが,経験上,ユーザに はアスキーコードの範囲での入力を推奨する.
電子メールアドレス: mail@hironobu-suzuki.com <--(6) mail@hironobu-suzuki.comを入力 注釈: HIRONOBU HOME NETWORK PROJECT <--(7) HIRONOBU HOME NETWORK PROJECTを入力 次のユーザ ID を設定しました: "Hironobu SUZUKI (HIRONOBU HOME NETWORK PROJECT) <mail@hironobu-suzuki.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O <--(8) Oを入力 秘密鍵を保護するためにパスフレーズが必要です. パスフレーズを入力: <-- (9) 任意のパスフレーズ パスフレーズを再入力: <-- (9) 任意のパスフレーズ
入力(9)について: パスフレーズの入力であるがGnuPGは辞書によるパスワードチェックなどは一 切行っていない.従ってユーザが弱い文字列を指定することが可能である.ユー ザがパスフレーズとして入力できる文字列の長さに制限はない.
その後,鍵のペアが生成される.その時に乱数が利用されるが,この乱 数生成に必要なエントルピーが足りない場合,「十分な長さの乱数が得られま せん.エントロピーを増加させるようにOS の設定を変更してください.(300 bytes 以上の周期が必要です)」というメッセージが出る./dev/randomで利用 しているシステムではエントルピーをハードウェアデバイスの割込みの発生に 求めている.そこでエントルピーを与えたければたとえばマウスを動かしたり, キーボード入力をしたり,コンパイルなどをしてディスクをアクセスすると良 い.この原理についての詳しい説明はRFC 1750[3]を参照のこと.
今から長い乱数を生成します.キーボードを打つとか,マウスを動かすとか, ディスクにアクセスするなどの他の行動を同時に行うと,乱数生成装置にて 乱雑さの大きな良い乱数を生成しやすくなりますので,お勧めします. +++++.+++++++++++++++..+++++.+++++.++++++++++.++++++++++. ... 十分な長さの乱数が得られません.エントロピーを増加させるように OS の設定を変更してください.(300 bytes 以上の周期が必要です) 今から長い乱数を生成します.キーボードを打つとか,マウスを動かすとか, ディスクにアクセスするなどの他の行動を同時に行うと,乱数生成装置にて 乱雑さの大きな良い乱数を生成しやすくなりますので,お勧めします. ++++++++++..++++++++++++++++++++.++++++++++++++++++++.+++++++++++++ ... 公開鍵と秘密鍵が作成され,署名されました.--
以上が対話インタフェースを用いたGnuPGの鍵生成である. PGP(製品版および無料配付版)の鍵生成も暗号アルゴリズムの選択肢が異なる以外はほぼ 同じ手続きにしたがって行なわれる.
以下,順に説明を加える.
鍵管理に関係するファイルは~/.gnupgディレクトリの中の以下の3つ である.
secring.gpgとtrustdb.gpgは先に設定したパスフレーズで暗号化されている. secring.gpgファイル(あるいはその中の秘密鍵)を消失させてしまうと2度 と暗号化したファイルを戻せなくなる,あるいは既に公開している公開鍵の正 当な所有者である証明ができなくなるというような,取り返しがつかないこと になるので鍵ペアを作成した際は必ずsecring.gpgをフロッピーなりに保存す ることを強く勧める.不注意によるファイル削除,あるいはディスククラッシュ によるファイルの喪失,はたまた鍵ペアを削除した後,まだ必要であったこと に気がつくなど,数々の事故が絶えない.
保持している公開鍵をリストアップしたいときは``-list-keys [userid]''オプ ションを使う.useridが指定されていない場合は,すべての公開鍵が表示され る.useridの指定には鍵IDと,ユーザIDの2つが利用可能である.
リストアップの操作方法は次の通りである.
% gpg --list-key gpg: 警告: 安全でないメモリーを使用しています! /home/hironobu/.gnupg/pubring.gpg --------------------------------- pub 1024D/1B4BF40A 2000-11-08 Hironobu SUZUKI (HIRONOBU HOME NETWORK PROJECT)\ <mail@hironobu-suzuki.com> sub 1024g/8F1E11B1 2000-11-08
% gpg --list-key mail@hironobu-suzuki.com
% gpg --list-key 1B4BF40A
公開鍵の削除は``-delete-key userid''で削除できる.(-delete-keyだけでは, 自分の公開鍵を直接削除できないが)自分の鍵を削除する時は, 十分の上にも 十分な考慮をした後に削除することを勧める.
さて,自分の公開鍵を相手に利用してもらうためには,特定の相手に送る, Webページなどで公開する,あるいはPGP公開鍵サーバへ登録するなどがある.
相手に送る,あるいはWebページなどに用意する場合は,公開鍵ファイルから 公開すべき鍵を取り出す必要がある.
公開鍵をファイルに取り出す方法は次の通りである.
% gpg --output filename --export userid
ファイルfilenameにはuseridというユーザIDで登録されている公開鍵がバイナ リー形式で格納される.アスキー形式として格納したい場合は``-armor''を加 える.``-armor''オプションは,どの出力際も適用可能である.あとはファイ ルfilenameを公開すれば良い.
インターネットに接続できる状態のマシンからはpgp公開鍵サーバに登録する ことが可能である.ただしpgp公開鍵サーバに登録するということは全世界に 公開鍵を公開するということと同時に1度登録すると,鍵の更新は可能であっ てもデータベースから削除は出来ないということを理解し,熟慮した後に行う べきである.
世界中に分散しているpgp公開鍵サーバはお互い登録された公開鍵を同期させ ているのでどこに登録しても問題はないが,日本国内のユーザならば pgp.nic.ad.jpを使うのが便利だろう.pgp.nic.ad.jpはアジア地域の中心的な pgp公開鍵サーバである.
鍵サーバへの登録方法は次の通りである.
% gpg --keyserver pgp.nic.ad.jp --send-keys userid
ファイルで公開鍵を入手した場合は``-import''オプションを使う.標準入力か らの入力も可能である.またインターネット経由でpgp公開鍵サーバから取り 出すこともできる.この時は鍵IDを指定する必要がある.
取り込みの方法は次の通りである.
% gpg --import file % gpg --keyserver pgp.nic.ad.jp --recv-keys 02912C53
入手した公開鍵はまだ,本当に相手の持ち物であるかどうかをチェックできて いない状態にある.この公開鍵を暗号化などに,そのままの状態で使おうとす ると警告が出る.この公開鍵に対してユーザの手によって電子署名を行う必要 がある.自分で利用する範囲での信頼なので``-lsign-key''オプションを使い, 署名を行う.``-sign-key''も公開鍵への署名であるが,これは第三者に公開す る公開鍵への署名を意味している.
入手した公開鍵が正しいものかどうかを確かめる方法だが,最終的にはその公 開鍵の所有者に直接尋ねて確認するしかない.この時「あなたの``この''鍵は, 本当にあなたのものか?」と確認するために公開鍵の持つフィンガープリント (指紋)を使う. ``-fingerprint userid''オプションを使う.
こう理想的には面接し本人と確認した上で公開鍵が正しいかどうか確認するこ とがいいのだが,そんなわけにはいかないので,名刺にフィンガープリントを 刷ったり,自分の持つWebページに表示したりすることが多い.筆者が知って いるもっともユニークな例は新聞広告にあった連絡先E-mailアドレスの下に小 さくフィンガープリントが載っていたものである.
フィンガープリントの表示方法は次の通りである.
% gpg --fingerprint mail@hironobu-suzuki.com
gpg: 警告: 安全でないメモリーを使用しています!
pub 1024D/1B4BF40A 2000-11-08 Hironobu SUZUKI (HIRONOBU HOME NETWORK PROJECT) \
<mail@hironobu-suzuki.com>
Key fingerprint = 6F67 FB3F C4FC ED88 9CC1 4690 6806 80A6 1B4B F40A
sub 1024g/8F1E11B1 2000-11-08
もう1つの方法は「自分の信頼している人が相手の公開鍵に対し所有者と確認 した上で電子署名をしているので,この公開鍵はなりすましされたものではな い」という仮定をおいた上で信用する」というWeb of Trustというpgp独特の 認証がある.短く言えば「友達の友達は友達である」というわけである.ただ し,公開鍵にたくさんの署名があったとしても,その公開鍵が本当に信頼でき るかどうかはまた別の話である.本質的には信頼できる者が署名しているかど うかが問題であって数の多い少ないの問題ではない.
暗号化/復号化は簡単である.相手のユーザIDを指定して暗号化すれば良いだ けである.ファイルを指定した場合,ファイル拡張子が.gpgであるファイルが 作成される.ファイルを用いず標準入力,標準出力が可能である.バイナリ形 式ではなくアスキー形式で出力したい場合は-armorオプションを指定する.
復号化も簡単である.もし暗号化されたファイルが.gpgの拡張子を持っている なら,そのファイル名を指定すれば良い.その時,例えばfoo.gpgという名前 ならば,復号化されたファイル名はfooと拡張子を除いたファイル名になる.
暗号化の操作方法は以下の通りである.
% gpg --encrypt --recipient userid --output outputfile inputfile
復号化の操作方法は以下の通りである.
% gpg foo.pgp
公開鍵を使わずに,共通鍵暗号だけで暗号化/復号化するには``-symmetric''を 使う.実行するとパスフレーズの入力を求めるので任意のパスフレーズを入力 する.暗号化されたデータは同じパスフレーズ以外では復号化することはでき ない.このパスフレーズを共通鍵ファイルを使う時のパスフレーズだと勘違い するユーザがいるので(自分で使うときも,相手に暗号化したデータを渡す時 も)注意を要する.
暗号化の操作方法は以下の通りである.
% gpg --symmetric foo
復号化の操作方法は以下の通りである.
% gpg foo.pgp
データに電子署名を行うには``-sign''オプションを指定する.電子署名を行う ためには,秘密鍵ファイル内に暗号化され格納されている秘密鍵を必要とする. そのためgpgは秘密鍵を使うためのパスフレーズの入力をユーザに求める.
複数の(電子署名に使う)秘密鍵を持っている時などに,どの秘密鍵を使うか指 定するには``-local-user''で利用するユーザIDを指定する.
秘密鍵を指定した電子署名の操作方法は以下の通りである.
% gpg --local-user userid --sign file
mail@hironobu-suzuki.comの電子署名をつけてhironobu@h2np.netの公開鍵で 暗号化しメールで送る場合.
% gpg --armor --local-user mail@hironobu-suzuki.com --sign --encrypt --recipient hironobu@h2np.net | mail -s 'GNUPG ENCRYPTED MESSAGE' hironobu@h2np.net
さらに,相手を複数同時に指定することができる. これは,一つの公開鍵暗号ファイルを複数の人間がそれぞれの秘密鍵を使って 解読できることを意味する.
この仕組みは,以下のようにして実現される. PGP/GnuPGはまず共通鍵暗号でセッション鍵をつくってファイルを暗号化する. そして,相手の公開鍵でセッション鍵を暗号化して暗号化されたファイルに添付 する.(セッション鍵は使い捨てなので,毎回異なるファイルが生成される.) このようにして 共通鍵暗号と公開鍵暗号を組み合わせていることから,PGP/GnuPGは ハイブリッド暗号とも呼ばれる.
gpgが用いているデフォルトの共通鍵暗号アルゴリズムはCAST5だが,これを twofishに変更する場合は``-cipher-algo''で指定する.ただしデフォルトの CAST5であっても現状では安全かつ,十分に処理が速いので,一般ユーザが他 の暗号アルゴリズムに積極的に変更する意味はない.このようなアルゴリズム の変更は安全性よりもむしろユーザ間での互換性を損なう危険があることを知っ ておくべきだろう.
% gpg --cipher-algo twofish --encrypt --recipient hironobu@h2np.net foo
前者はOpenPGPのメッシュ型認証パスを活用しており, お互いを知り親睦を深めるという効果も期待できるが,非常に効率が悪いので, 人数の規模が小さい場合に限られる.
オープンソース開発者の間では,サインパーティーの手引き も配布されている(GnuPG Keysigning Party HOWTO, http://www.cryptnet.net/fdp/crypto/gpg-party.html). たとえば,IETFの年4回の大会においても,夜のセッションでサインパーティーが開かれるのが恒例になっている. こうした開発者コミュニティでは,PGPサインパーティーは一定の 機能を果たしていると言える. また,キーサインパーティーの開催予告をインターネット上で公開する サイトも存在する (http://www.herrons.com/kb2nsx/keysign.html)
組織内の利用としては,後者の方法が一般的である.具体的には, セキュリティ担当者に事前に公開鍵とフィンガープリントを送り, 面接の後に担当者が公開鍵に電子署名を施すといった方法である. たとえばペンシルヴァニア大学では,セキュリティ担当者による署名申請手続きの ガイドラインを公開している (http://www.upenn.edu/computing/security-privacy/keyparty.html).