GnuGPは、公開鍵方式で、ファイルに署名をしたり暗号化するためのソフトウェアです。もっともポピュラーな使い方は、メールの暗号化や署名でしょうか。
オープンソースの世界では、リリースする成果物が不正に改竄されていないことが確認できるように開発者が署名したりします。
Windows環境でもCygwinやWindows用のバイナリがあります。画面の例は、Cygwin環境で作成した鍵とThunderbird + Enigmailプラグインを使って暗号メールを自分自身に送付して確認したものです。
以下GnuPGの簡単な使い方です。
GnuPGのインストール
Cygwinは、setup.exeからgnupgパッケージを選択するだけです。
Debian環境では、aptからgnupgをインストールします。
$ sudo apt-get install gnupg
鍵の生成
GnuPGは、公開鍵方式なので秘密鍵と公開鍵を生成して、秘密鍵は文字通り自分だけの秘密にする必要があります。公開鍵は、必要な相手に何らかの方法で渡す必要があります。
gpgコマンドの–gen-keyオプションで鍵を作ることができます。このとき入力するパスフレーズの入力を求められるので十分に複雑なフレーズを用いる必要があります。さもないと、なりすましや盗聴といった被害が自分の身に降りかかってくる可能性が高くなります。
$ gpg --gen-key gpg (GnuPG) 1.4.6; 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. Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection? DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: XXXX Email address: XXXX@XXXX Comment: XXXX You selected this USER-ID: "XXXX (XXXX) <XXXX@XXXX>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O You need a Passphrase to protect your secret key. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. ++++++++++.+++++..+++++.++++++++++.+++++++++++++++.++++++++++++++++++++.+++++.++++++++++..++++++++++++++++++++++++++++++.+++++++++++++++++++++++++.........>+++++..........>.+++++..........<+++++............+++++ ++++++++.+++++++++++++++.+++++.+++++..++++++++++.++++++++++++++++++++.+++++++++++++++..+++++.++++++++++++++++++++++++++++++...+++++.+++++>+++++.+++++..........................................................................................>.+++++................................................................................................................................+++++^^^^^ gpg: /home/user/.gnupg/trustdb.gpg: trustdb created gpg: key XXXXXX marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 1024D/XXXX 2008-01-03 Key fingerprint = XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX uid XXXX (XXXX) <XXXX@XXXX> sub 2048g/XXXX 2008-01-03 $
ファイルの暗号化
ファイルの暗号化は、gpgコマンドの-aeオプションを使います。-rオプションで鍵を生成したときに指定したReal Nameを指定します。
例えば、誰かが私に暗号化されたメールを送付するには、私から公開鍵を手に入れて下記のようにファイルを暗号化します。暗号化されたtext.ascファイルを私に送付すると、秘密鍵を持っている私だけが複合化できるファイルになるわけです。
$ cat text plain text $ gpg -ea -r "XXXX" text $ cat text.asc -----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.6 (GNU/Linux) hQIOA1KhtR8VEvk8EAf+OavoK9r+5roF/GlQBwpl5TUJHKsqc963fPuXgvZbqm7D nINuuQPCScV2DeiDPSCtLNHjUtlbiOyxvzydIlMSQlyLnfoANiu+FsEnnibhs4Af Es6481GnEoUm31JL4hOHI51LhRtT3iqMkzPVlE8gMppMVUfLVY9p+ivQR4DGucLW WfwSlq14hPTwZW2f8HzS1A231kQABXCSy7R6KGqC4dKgUrk65jEPGss8uAxy0lxu RfiJBH7iwPlwTYTqevGD2Fj3i8aaa7sNBQE5jPjdetqtRoZCw7L2B7O0ARn+YfTB rSlTPjsiYJ58p4rwhfOSvO+JTMv043vXbYT9qwS9fQf/fgSBEjTWs4U0LjQAcQvj zMvsvHMwE5Msc1dDzdOuh4mdvh3MOSpD7lMznWX2C7qdXelRDG8O73dXOsVhGuGm tGe7FiuJ0bzk6T5r+v5jnfEZNekyBIzWl6sKJUwbCtXiOCaEnrWsoxGW64iQcma3 kc483pTHP3n2nlf7cjFucfbaCEaaTWTAlVXXx1PzHvIHG+gfuJQHnwvK8ntCtSSi xSNAR6fP0t89qttCl7igA5UOCWOEMRTqqU6WkHPczZ4JF66AngeN+J2sXz09ZRfx x9y6uAl656LBe88k+rxwoyw3KtHoifMMJT292OL1K2eUfcyLID3NUU1v2Rqt1bae nNJIAeru5NnATmOVPdgXmUpbzPPO/RXdogpKgU+whEXkKFh5G3M8HiL2f8bJkTZD yhZzuRENQIDlYk+zg+A/yOHVHnHW4v1hc0/6 =ObSu -----END PGP MESSAGE----- $
ファイルの複合化
先ほどのファイルを複合化してみます。
$ gpg -d text.asc You need a passphrase to unlock the secret key for user: "XXXX (XXXX) <XXXX@XXXX>" 2048-bit ELG-E key, ID XXXX, created 2008-01-03 (main key ID XXXX) Enter passphrase:<鍵を生成したときに入力した秘密のパスフレーズを入力する> gpg: encrypted with 2048-bit ELG-E key, ID XXXX, created 2008-01-03 "XXXX (XXXX) <XXXX@XXXX>" plain text $