hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

PGPからGPGに公開鍵を移行する

古いサーバーなどの場合、「GPG(GnuPG)」ではなく「PGP」を使用していたりします。
その場合に、鍵自体は変更せずに「PGP」の公開鍵をそのまま「GPG(GnuPG)」に移行するのをやってみました。
※鍵のセキュリティレベルなどはあまり意識していません。その辺の情報については、他のWEBページなどを参考にしてください。

既存の公開鍵ファイルのエクスポート(PGP)

PGP」から登録されている公開鍵をエクスポートするには「pgp -kxa username filename」の形でコマンドを実行します。

$ pgp -kxa userpubkey userpubkey.asc

これで作成された「userpubkey.asc」を「GPG」側にインポートします。

GPGでの公開鍵の確認

「GPG」で登録されている公開鍵を確認するには「gpg --list-key」を使用します。
ただ、この時点ではまだ「GPG」に鍵がひとつもない状態なので、「gpg --list-key」の結果としては何も表示されません。

代わりというわけではありませんが、アカウントで「GPG」を初めて実行した場合、以下のような形でホームディレクトリに「.gnupg」ディレクトリが作成されます。
「.gnupg」ディレクトリ以下には、「gpg.conf」「pubring.gpg」「trustdb.gpg」が作成されます。

$ gpg --list-key
gpg: ディレクトリー「/home/user/.gnupg」ができました
gpg: 新しい構成ファイル「/home/user/.gnupg/gpg.conf」ができました
gpg: 警告: 「/home/user/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/home/user/.gnupg/pubring.gpg」ができました
gpg: /home/user/.gnupg/trustdb.gpg: 信用データベースができました

公開鍵のインポート(GPG)

「GPG」でファイルから公開鍵をインポートするには、「gpg --import filename」を使用します。

$ gpg --import ./userpubkey.asc
gpg: 鍵輪「/home/user/.gnupg/secring.gpg」ができました
gpg: 鍵8E4DB62B: 公開鍵“userpubkey <userpubkey@exsample.com>”を読み込みました
gpg:     処理数の合計: 1
gpg:           読込み: 1  (RSA: 1)

GPGでインポートした公開鍵の確認

正常にインポートが完了したので、改めて「gpg --list-key」で登録されている公開鍵を確認します。

$ gpg --list-key
/home/user/.gnupg/pubring.gpg
-------------------------------
pub   1024R/8E4DB62B 2010-09-29
uid                  userpubkey <userpubkey@exsample.com>

さっき登録した、公開鍵の情報が表示されています。

PerlからGPGで暗号化したメールを送信してみる

鍵の登録が完了したので、さっそく暗号化を試してみます。
今回は暗号化したメールを送りたかったので、以下のような簡単なPerlスクリプトを書いて試してみました。
メール送信には「mailx」を使ってみました。

Perlスクリプト(サンプル)
#!/usr/bin/perl
use strict;
use warnings;

my $from='from@exsample.com';
my $to='userpubkey@exsample.com';
my $subject='gpg_test_mail';
my $body='mail body. hogehoge.';

open(ML,"| gpg -ea -r userpubkey | mailx -s $subject $to -- sendmail-options -f $from");
print ML $body;
close(ML);
mailxのオプション
$ mailx --help
mailx: invalid option -- -
Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...
            [-- sendmail-options ...]
       mail [-iInNv] -f [name]
       mail [-iInNv] [-u user]

Perlからの「pgp | mailx」の実行

実際にさっき作成したPerlスクリプトをコマンドライン上から実行してみます。
実行すると「それでもこの鍵を使いますか? (y/N) 」を聞かれます。「y」+「Enter」で処理を実行できますが、このままだとプログラムからの自動実行の場合にも毎回聞かれてしまうため、何かと不便です。

$ perl ./gpg_test.pl
gpg: 8E4DB62B: この鍵が本当に本人のものである、という兆候が、ありません

pub  1024R/8E4DB62B 2010-09-29 userpubkey <userpubkey@exsample.com>
 主鍵の指紋: D9 3D 9D 3B 94 CA 74 3A  A5 7C 2B 5A 9B CD A2 2B

この鍵は、このユーザーIDをなのる本人のものかどうか確信でき
ません。今から行うことを*本当に*理解していない場合には、
次の質問にはnoと答えてください。

それでもこの鍵を使いますか? (y/N) y

$

鍵の信用度を変更する

「それでもこの鍵を使いますか? (y/N) 」を聞かれないようにするために、「gpg --edit-key」で鍵の信用度を変更します。
「gpg --edit-key "username"」の形でコマンドを実行すると、対話式のインターフェースが立ち上がります。
最初に「コマンド>」で実行するコマンドを聞かれるので、ここでは「trust」と入力します。
次に「他のユーザーの鍵を正しく検証するために、このユーザーの信用度を決めてください」と鍵の信用度を5つのレベルから選択します。
ここでは「5 = 絶対的に信用する」を選択します。
信用度を選択すると、「本当にこの鍵を絶対的に信用しますか? (y/N)」を聞かれるので「y」を入力します。
最後に「コマンド>」がまた表示されたら「q」で対話式のインターフェースを終了します。

$ gpg --edit-key "userpubkey"
gpg (GnuPG) 1.4.5; Copyright (C) 2006 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.


pub  1024R/8E4DB62B  作成: 2010-09-29  満了: 無期限      利用法: SCEA
                     信用: 未知の     有効性: 未知の
[ unknown] (1). userpubkey <userpubkey@exsample.com>

コマンド> trust
pub  1024R/8E4DB62B  作成: 2010-09-29  満了: 無期限      利用法: SCEA
                     信用: 未知の     有効性: 未知の
[ unknown] (1). userpubkey <userpubkey@exsample.com>

他のユーザーの鍵を正しく検証するために、このユーザーの信用度を決めてください
(パスポートを見せてもらったり、他から得た指紋を検査したり、などなど)

  1 = 知らない、または何とも言えない
  2 = 信用し ない
  3 = ある程度信用する
  4 = 完全に信用する
  5 = 絶対的に信用する
  m = メーン・メニューに戻る

あなたの決定は? 5
本当にこの鍵を絶対的に信用しますか? (y/N) y

pub  1024R/8E4DB62B  作成: 2010-09-29  満了: 無期限      利用法: SCEA
                     信用: 絶対的     有効性: 未知の
[ unknown] (1). userpubkey <userpubkey@exsample.com>
プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、
ということを念頭においてください。

コマンド> q
$

Perlからの「pgp | mailx」の実行 その2

鍵の信用度が変更でしたので、再度Perlスクリプトを実行してみます。
今度は「それでもこの鍵を使いますか? (y/N) 」を聞かれずに処理が終了しました。
これで、自動実行なども問題なく出来ます。

$  perl ./gpg_test.pl
gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u

GPGでの複合化

実際に暗号化されて届いたメールなどは「gpg -d 暗号化されたファイル > 復号化したファイル」で復号化できます。
「> 復号化したファイル」を指定しない場合は、複合結果が標準出力で表示されます。

$ gpg -d userpubkey_enc.eml > userpubkey_dec.eml
$ cat userpubkey_dec.eml
mail body. hogehoge.

GPGでの公開鍵の削除

最後に今回は使用する必要はありませんが、「GPG」での公開鍵の削除方法を書いておきます。
公開鍵の削除には「gpg --delete-key」を使用します。
コマンドを実行すると「この鍵を鍵輪から削除しますか? (y/N)」と最終確認を聞かれるので、「y」を入力します。

$ gpg --delete-key userpubkey
gpg (GnuPG) 1.4.5; Copyright (C) 2006 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.


pub  1024R/8E4DB62B 2010-09-29 userpubkey <userpubkey@exsample.com>

この鍵を鍵輪から削除しますか? (y/N) y
$