GnuPG
ポータブルな環境で気軽に暗号を取り扱う
基本情報
導入メモ
- 事前に OpenSSLとlibldapを(プログラムエリアに)導入しておく
- 入手元サイトから以下のファイルを入手する (2007/02/12現在)
- gnupg_1.4.8-1_arm.ipk (2007/12/20 21:11, 976,391 バイト)
- 入手したファイルを SD カードの Documents/Install_Files/Utilities/Files/Crypt/GnuPG/v1.x/ に配置する。
- 「ファイル」タブで配置したディレクトリに移動、ipk ファイルを選択し「OK」キー押下。
- ソフトウェア インストーラー 起動。
- 端末ウィンドウを起動し、gpg --version コマンドでバージョン表示されることを確認する
% gpg --version
gpg (GnuPG) 1.4.8
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
% _
共通鍵(単一のパスフレーズのみ)で暗号化テスト
適当なテキストファイルにて動作テスト。 例えば、~/Documents/hello.txt という内容で中身は以下のように。
Hello world!
そんなテキストファイルに対し、暗号化を試みます。
% gpg -ca ~/Documents/hello.txt
Enter passphrase: (ここでパスフレーズを入力)
Repeat passphrase: (もう一度パスフレーズを入力)
パスフレーズは安直に 「password」としておきましょうか。その作業を終えると、hello.txt.asc というファイルができてます。中身は以下のように cat や lv といったコマンドで読めるテキスト形式になっています(gpg -ca ではなく gpg -c とするとバイナリファイルの hello.txt.gpg というファイルになります、つまりは -c オプションが暗号化で -a がテキスト出力を意味しているわけですね)。
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.8 (GNU/Linux)
jA0EAwMCguUBT90BHS5gySpeti0nPzr8gR/MQn4X3gwIhuCj0xgdXjy8TVSOx899
CyA5m2EA9JxaJx4=
=5/53
-----END PGP MESSAGE-----
暗号化したファイルについては、パスワードで元に戻せます。ということで、オリジナルのファイルを削除し...
% rm -i ~/Documents/hello.txt
元に戻すコマンドは以下のとおりです。
% gpg -d ~/Documents/hello.txt.asc > hello.txt
gpg: CAST5 encrypted data
Enter passphrase: (ここでパスフレーズを入力)
% cat hello.txt
Hello world!
%
-d というオプションを使わなくても元に戻すことはできるようです。
% gpg ~/Documents/hello.txt.asc
gpg: CAST5 encrypted data
Enter passphrase: (ここでパスフレーズを入力)
% cat hello.txt
Hello world!
%
WARNING (警告) に関して
暗号化や元に戻す際に以下の警告が出ます。
gpg: WARNING: using insecure memory!
「安全ではないメモリでの利用」と言われてもピンときませんが、対策は可能です。
% su
# chmod 4755 /home/QtPalmtop/bin/gpg
以上のコマンドで安全ではないメモリの警告は抑制できます。
もう一つの警告(暗号を元に戻すときに表示される「もはや内容は堅く保護されていない」=原文 gpg: WARNING: message was not integrity protected )については、 -c 系の暗号化のときに必ず出るようなので気にしないのがいいのかも。
公開鍵と秘密鍵を生成する
共通鍵の方式だと、パスワードを破られたら終わりです。それに、人に秘密のテキストを渡す前にパスワードの事前取り決めが必要になってしまい、パスワード管理が大変です。ということで、秘密鍵・公開鍵というものを生成することにします。ここは暗号入門サイトではないので秘密鍵や公開鍵が何かということについては割愛します。
とりあえず、サンプルとして asaasa_mix@sample.gpgkeys.co.jp という(架空の)メールアドレスの山田太郎さん(Taro Yamada)という(架空の)人がパスフレーズ password のキーを生成するという手順を。
下記コマンドによって鍵の生成モードになります。
% gpg --gen-key
英語の指示が出ますので、順番に以下のように入力していきます。
- Please select what kind of key you want: (どんな鍵方式をお望み?)
- 1 を入力し、Enter ((1) DSA and Elgamal (default) を選択です)
- DSA keypair will have 1024 bits...(以下略、鍵の長さは1024bit~4096bitで選んでね)
- 1024 と入力し、Enter (1024bitsを意味します。)
- Zaurus 上では最小の数値指定が無難ですね...できれば4096を指定したいところですが、PDA 上で鍵生成は時間がかかりすぎます。よって、4096bits の鍵がほしければ PC で生成して Zaurus に秘密鍵を移植した方がよいでしょうね)
- Please specify how long the key shoudl be valid. (鍵の期限はどうする?)
- 0 を入力し、Enter (期限を設けない=無効にしないことを意味します。)
- 数字を入れると、その数日間だけ有効になります。2w のようにすると2週間に、3m や 5y で3ヶ月や5年となりますが、英語が簡単なのですぐわかるはず。
- Is this correct? (y?N) (これで正しいの?)
- Real name: (本名は?)
- Taro Yamada と入力してEnter (サンプルなので。実用に使う場合は本当の自分の名前を入れます)
- Email address: (E-Mail のアドレスは?)
- Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit
- Enter passphrase: (パスフレーズをどうぞ)
- password と入力し、Enter。実用で使う場合はこんな安直なパスワードは避けましょう
- Repeat passphrase: (もう一度パスフレーズをどうぞ)
- もう一度 password (さっき入力したもの)を入力し、Enter。
- 鍵の生成が始まります。
- 途中で Not enough random bytes available. ... (もっとランダムさが必要だよ) と注意されるので、でたらめなキー入力を行います。
- 鍵の生成が完了しました。
公開鍵を配布する
公開鍵を取り込む
- gpg --import mypub.asc
- このように公開鍵が入っているファイルを --import オプション付きで指定すれば取り込めます。
公開鍵を使って暗号化する / 元に戻す
まずは暗号化。
- gpg -aes hello.txt
- これでテキスト形式の署名付きの暗号ファイル作成モードになります。
- オプションは -a はテキスト形式出力、-e は公開鍵による暗号化、-s は署名を意味します。よって、署名不要なら -ae、署名だけでよければ -as でも OK。
- Enter passphrase: (パスフレーズは?)
- Enter the user ID. End with an empty line: (ユーザーIDを入れて。終わりなら空行に)
- Enter the user ID. End with an empty line: (ユーザーIDを入れて。終わりなら空行に)
- hello.txt.asc が生成されます。
次に元に戻す作業です。
- gpg hello.txt.asc
- Enter passphrase:
- ここでpassword (鍵生成の時につかったパスフレーズ)を入力。
- 解読には秘密鍵が必要といった表示が英語でされています。
- Signature made *****(日付の英語表記) using DSA key ID nnnnnnnn と表示され、次の行に Good signature from (メールアドレス) と出てれば署名の検証が完了です。また、hello.txt ができてます。
秘密鍵の抽出と取り込み
秘密鍵については、以下のコマンドでバックアップがとれます。ただし、秘密鍵は作った本人だけが使うものですので誤って公開しないようにしましょう。(ここでは説明のために意図的にサンプルの秘密鍵を出しています)
- gpg --export-secret-keys asaasa_mix@sample.gpgkeys.co.jp
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v1.4.8 (GNU/Linux)
lQHhBEXQYEkRBACq6TglsQ28/oXBhbxjz+f4oA2GhSlkZnSQOoQ3eaHeaBMFzreZ
yf9k6mLIud/mk9NEL2TB3XcN3+TY3sFKCL6C6bLSC5yqE9Tokopk4KQHuRlMQFYa
uUVRq88nrkzPSY4VFP5hYYo/cIYBy+RLxBvJGufCXV/FSR0yP6mUVuR2UwCglUOl
QIrz0S7SBna+zsPCzqURuuED/inxmGC3Axtl+v4rpJXmTpM7VFdp0C/fhQ90dmYA
tg5LRkziGCegGsie8vj85+sSHevvciwkJ06SEzkaDl0OpSzp60nVol5Dr284tnUa
usKB4amQoaWbHtYlaAnA/EVZw5QAVeuuCj585VEwnmyu2FKFsDIsemc8q1zjHcLA
wDkOA/9XbFR5eTnuL5JGfdy8HU2FtPTs27WpjDeOBp2EbkZ5rSZnqc8CGjHuN0u4
/8Wkp9WSM47uesKE/gOyI9DF0R0sd6Q6FWfE3Fm7CzObNWsIw6wGqDIPE9j/76H5
3yY9sEixKBJE37sem96LdSY8bLPI0aBsa9YXvSOmQcrAJ4KhSP4DAwJ4C6ttcYm8
2GAn3x54ZRt933t9xTJjijhE5XYyi6aU+JChNuHuh2X3G4Q4mgVSUuy4DS0CMyfc
V5he8bQtVGFybyBZYW1hZGEgPGFzYWFzYV9taXhAc2FtcGxlLmdwZ2tleXMuY28u
anA+iGAEExECACAFAkXQYEkCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBf
rjO1SiNLr+UqAJ9o02MkZNhgtslKVBCLX88Hv3J1sACfYwZZTyvd9Xm18I+RDC1c
LQEybHKdAVgERdBgcBAEAMO2YQW9kg99ugLzntF7BEPBv50Ax5T0CJz0jr0rYSo2
h+Ty2r1DSj4yHlU4jY+L6HjpFxw1eL6Xv8F3vz3HOrHoNIY8TeaJeubOJaEiuxJx
piIvDAm3tsDuxInpBkdJfyK/MqQRchO7YaOVBaSTfSZFRyDVRwJDmet8aa2ojCFH
AAMFA/9tB8Yi8zbNjHPOuuQJeikpv/cDRxplj7YyssfGm3a9M2b8ZOYROtt8JXBe
Fe/3dM8j1OqvKq4Y2O2cXDRqq8k5DDPtC96KIOSM4p+g9M1tvpL7BdhUHRF5pKWi
OVh2bBWZrtr/Z1nWoVwCrWFukZoaN/V+vJN/tI9ld+7FIQ9hSv4DAwJ4C6ttcYm8
2GCLMfxEIJknsnYuVx3mvl19J287aVWVrLsJIS8Vyvswkj2aLlV2kp2eWFJj/W8x
y2rMnyXdzRZwVKsGP9BY2YhJBBgRAgAJBQJF0GBwAhsMAAoJEF+uM7VKI0uvayMA
mgNmBR70Ih4ZEh8gx37JVqGh0vs1AKCKduq/h8KfKb03Xr9ABITfwWJ4Gg==
=JdK5
-----END PGP PRIVATE KEY BLOCK-----
秘密鍵の取り込みは公開鍵と同じく、gpg --import filename でいけます。
その他のコマンドのリファレンス