GnuPGで暗号化してみる

■GnuPG

$ apt-cache show gnupg | grep -A 18 ^Desc
Description-ja: GNU Privacy Guard - フリーな PGP 代替品
 GnuPG は通信とデータ保存を安全なものにする GNU ツールです。GnuPG はデータの暗号
 化とデジタル署名の作成に使うことができます。GnuPG は先進的な鍵管理機能を
 持ち、RFC 2440 で定めた提案中の OpenPGP インターネット標準に準拠します。
 .
 GnuPG 1.4 はスタンドアローンでモジュール化されていないシリーズです。gnupg2
 パッケージが収録するバージョン 2 シリーズとは異なり、S/MIME のサポートや、
 デスクトップ環境に便利な他のいくつかのツールが含まれませんが、そのため少な
 い依存関係にもなっています。
 .
 本 gnupg パッケージは libcurl を使わずに構築されています。そのため、HKPS 鍵
 サーバに対応していません。libcurl を使って構築された、HKPS に対応している鍵
 サーバ補助ツールを利用するには、gnupg-curl パッケージをインストールしてくだ
 さい。
 .
 GnuPG は、いかなる特許アルゴリズムも使用しません。これはつまり GnuPG が
 PGP2 との互換性を持たないことを意味します。その理由は、PGP2 は数多くの国で
 特許を取得した IDEA を使用しているためです。
Homepage: http://www.gnupg.org

■既に導入されているはずですが、インストールする場合は以下のように。。。

$ sudo apt-get install -y gnupg mutt
$ dpkg -L gnupg | grep 'bin/'
/usr/bin/gpg-zip
/usr/bin/gpgsplit
/usr/bin/gpg
/usr/bin/lspgpot

■「.gnupg」ディレクトリの作成
 ※「--- [Ctrl]+[C]で停止 ---」行は出ません。操作をして下さい。

$ gpg
gpg: ディレクトリー「~/.gnupg」ができました
gpg: 新しい構成ファイル「~/.gnupg/gpg.conf」ができました
gpg: 警告: 「~/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「~/.gnupg/secring.gpg」ができました
gpg: 鍵輪「~/.gnupg/pubring.gpg」ができました
gpg: 開始します。メッセージを打ってください ...
--- [Ctrl]+[C]で停止 ---

$ ls .gnupg/
gpg.conf  pubring.gpg  secring.gpg

■鍵の作成
 ※「2>&1」して「tee」にパイプしてますが、最後の出力分しか保存されません。
  また、ユニークな内容にするため、メールの送信側(labunix@vmdebian.localdomain)でしか出力しません。
  フルネームもメールドメインも異なるので、同じユーザでもかまいませんが、ここでは受信側を「dummy」ユーザとします。

$ gpg --gen-key 2>&1 | tee -a gpg.log
$ gpg --list-key | wc -l
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/XXXXXXXX 2012-09-16
uid                  labunix <labunix@vmdebian.localdomain>
sub   2048R/YYYYYYYY 2012-09-16

■公開鍵の出力

$ gpg --output `whoami`.asc --export --armor labunix@vmdebian.localdomain
$ head -2 `whoami`.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)

■「dummy」ユーザの公開鍵を追加。
 ※作成方法は上記と変わらないので、省略。

$ gpg --import dummy.asc
gpg: 鍵ZZZZZZZZ: 公開鍵“dummy vmsqueeze (dummy <dummy@vmsqueeze.localdomain>) <dummy@vmsqueeze.localdomain>”を読み込みました
gpg:     処理数の合計: 1
gpg:           読込み: 1  (RSA: 1)

■「dummy」ユーザさんの公開鍵に署名する。
 ※名前でも可能ですが、ユニークなメールアドレスを指定する。

$ gpg --lsign-key "dummy vmsqueeze"
$ gpg --lsign-key dummy@vmsqueeze.localdomain

■フィンガープリントの確認

$ gpg --fingerprint dummy@vmsqueeze.localdomain
pub   2048R/ZZZZZZZZ 2012-09-16
                 指紋 = ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ  ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ
uid                  dummy vmsqueeze (dummy <dummy@vmsqueeze.localdomain>) <dummy@vmsqueeze.localdomain>
sub   2048R/XXXXXXXX 2012-09-16

■gpgのログを送ってみます。

$ gpg -o gpg.log.gpg -r "labunix@vmdebian.localdomain" -e ~/gpg.log
$ uuencode ~/gpg.log.gpg pgp.log.pgp | mail -s "GPG Test Mail" dummy@vmsqueeze.localdomain

■添付ファイルを「test.log」として保存、復号化。
 「uuencode/uudecode」と「mail」コマンドが使えれば、S/MIMEではないので「Mew/Mutt」は不要。
 「test.log」に落として「begin行〜end行」以外をエディタで削除する。

$ mail
s 1 test.log
$ vim test.log
$ uudecode -o gpg.log.gpg test.log
$ gpg -o gpg.log -d gpg.log.gpg

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:
“dummy vmsqueeze (dummy vmsqueeze <dummy@vmsqueeze.localdomain>) <dummy@vmsqueeze.localdomain>2048ビットRSA鍵, ID XXXXXXXX作成日付は2012-09-16 (主鍵ID XXXXXXXX)

gpg: 2048-ビットRSA鍵, ID XXXXXXXX, 日付2012-09-16に暗号化されました
      “dummy vmsqueeze (dummy vmsqueeze <dummy@vmsqueeze.localdomain>) <dummy@vmsqueeze.localdomain>”

■中身。。。というか送信側、受信側の両方のサーバで元の「gpg.log」のチェックサムが一致すればよしとする。

$ md5sum gpg.log
28138651879bb05362fff680895a793a  gpg.log
$ md5sum gpg.log
28138651879bb05362fff680895a793a  gpg.log

■同様に送り返してチェック。

■Mew(Emacs系)

 参考:MewでGnuPGを使おう
 http://itpro.nikkeibp.co.jp/linux/column/inflection/4/index.shtml

$ apt-cache show mew | grep -A 15 Desc
Description-ja: Emacs 向けの PGP/MIME をサポートするメールリーダ
 Mew (Messaging in the Emacs World) はテキストメッセージ、マルチメディア
 メッセージ (MIME)、ニュース記事、および PGP・S/MIME・SSH・SSL を含む
 セキュリティ機能へのユーザインターフェイスです。
 .
 Mew の機能一覧:
 .
  - POP、SMTP、NNTP および IMAP をサポート。
  - 非常に複雑な構造のメッセージを容易に表示可能。
  - メッセージ一覧が完全に構築されるまえにメッセージを表示開始可能。
  - リファイルの場合、デフォルトフォルダは適切に推奨される。
  - フィールド名、メールアドレス、受信者名、ドメイン名およびフォルダ名
    を自動補完可能。
  - キーワードなどを使って簡単にメッセージを検索可能。
  - メッセージの流れを表示するメカニズムであるスレッドをサポート。
Homepage: http://www.Mew.org/

■Mutt(Vim系)

$ apt-cache show mutt | grep -A 16 Desc
Description-ja: MIME, GPG, PGP, スレッドサポート付きテキストベースメーラ
 Mutt は洗練されたテキストベースのメーラです。いくつか特徴を挙げます:
 .
  * MIME のサポート (RFC1522 8 ビットメッセージのエンコード/デコードや UTF-8
    のサポートを含む)
  * PGP/MIME サポート (RFC 2015)
  * SSL による暗号化と SASL 認証をサポートした先進的な IMAP クライアント
  * POP3 のサポート
  * メールボックスのスレッド化 (strict および non-strict)
  * デフォルトのキーバインディングは ELM 類似
  * キーバインディングを設定可能: Mush および PINE ライクなキーバインドを
    サンプルとして供給
  * 通常の mbox フォーマットに加え、MMDF, MH および Maildir を操作可能
  * メッセージを (永久に) 延期可能
  * 配色のサポート
  * 簡単だが力強い rc ファイルを通じた高度の設定が可能
Homepage: http://www.mutt.org/

$ dpkg -L mutt | grep 'bin/'
/usr/bin/mutt-org
/usr/bin/mutt_dotlock
/usr/bin/smime_keys