GnuPG について (8) 鍵ペアを作る

このまま対称暗号機能だけを使って、GnuPG を使ったプログラミングに関する記事を先に書くか、公開鍵暗号を先に説明するか少し迷ってしまった。
GnuPG をプログラミングに使いたい人のほうが数は少なそうなので、とりあえず、公開鍵暗号の話から進めて行くことにする。

このブログを読んでいる人、JanusDG や KageHinata を使っている人は、公開鍵暗号の基礎知識はあるとは思うが念のために軽く解説しておく。

公開鍵暗号は、データを暗号化する際と、復号する際とで、異なる鍵を用いる暗号方式のことだ。
暗号化用の鍵ではデータを暗号化しかできない。数学上は暗号化の過程を逆算することで元のデータを取り出すことはできるのだが、それには途方も無く時間がかかる。宇宙が燃え尽きるまでかかっても無理なくらいに。正直、わたしも数学の専門化ではないので詳しくは説明できないのだが、世の中には、このように、逆算するのに異様に時間のかかる関数というものがいくつも存在するのだ。
ところが、復号用の鍵を用いれば、この暗号をたちどころに解いてしまうことができる。もちろん、暗号化用の鍵と復号用の鍵には数学的に密接な関係がある。

このような特性のため、暗号化用の鍵は第三者に漏れてしまっても暗号の安全性には影響が出ない。暗号化用の鍵ではデータを元に戻せないからだ。このため、ユーザーは、暗号化用の鍵を広く公開し、自分宛のデータはすべてこの鍵で暗号化してもらうという運用が可能になる。

対称暗号のように相手にこっそりパスワードを伝える必要がないので、その分、安全性が高いといえる。

ただし、別の人が、相手になりすまして「わたしが○○です。この暗号鍵を使ってください」と言ってきたとして、それにころっと騙された場合は、その人にデータを盗まれることになってしまうので要注意だ。

以上が簡単ではあるが、公開鍵暗号の説明になる。

で、ここでは、自分用の暗号化鍵と復号鍵のペアを生成していくことにする。

まずは、コマンドプロンプトを起動し、作業用のフォルダに移動する。先日の作業用フォルダが残っているなら
> CD "C:\Documents And Settings\(ユーザー名)\My Documents\GPGTEST"
でいいだろう。
また、実験用のホームフォルダも用意する。
> MKDIR HomeDir

そして、gpg.exe を鍵生成用に起動する
> gpg.exe --homedir=HomeDir --gen-key
---- 画面表示 ----
gpg (GnuPG) 1.4.8; Copyright (C) 2007 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: 鍵輪「HomeDir\secring.gpg」ができました
gpg: 鍵輪「HomeDir\pubring.gpg」ができました
ご希望の鍵の種類を選択してください:
(1) DSAとElgamal (既定)
(2) DSA (署名のみ)
(5) RSA (署名のみ)
選択は?
---- ここまで ----

ここで一旦表示が止まるので、(1)を選択(1が既定になっているので何も選択しなくてもよい)し、Enter。

---- 画面表示 ----
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
---- ここまで ----

DSA keypair というのは、公開鍵暗号方式の一つである DSA (Digital Signature Algorithm の略。名前のとおりで電子署名用 )による鍵ペアで、GnuPG では電子署名用にこれを使う。1024bit で固定されている。
そして、ELG-E というのは、公開鍵暗号方式の一つである ElGamal 暗号方式による鍵ペアで、1024bit から 4096bit までの間で好きな長さを設定できる。鍵の長さについてよく分からないのであればここは何も入力せずに Enter だけを押せばよい。
このように GnuPG では、電子署名とデータの暗号化で異なる暗号方式・鍵ペアを使用している。

---- 画面表示 ----
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
= 鍵は n 日間で満了
w = 鍵は n 週間で満了
m = 鍵は n か月間で満了
y = 鍵は n 年間で満了
鍵の有効期間は? (0)
---- ここまで ----

続いて鍵の有効期限の設定である。状況によっては鍵の有効期限を設定したほうがいいだろう。
特に理由がなければ無期限でも問題ないので、分からなければこれは実験用と割り切って、何も入力せずに Enter を押せばよい(無期限になる)。

---- 画面表示 ----
Key does not expire at all
これで正しいですか? (y/N)
---- ここまで ----

と聞いてくるので、ここは「y」と入力して Enter。

---- 画面表示 ----
あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
"Heinrich Heine (Der Dichter) "

本名:
---- ここまで ----

「同定する」という聞きなれない日本語が出ているが、これは鍵輪の中から鍵を検索して見つけ出すための ID だと考えればいい。
まず「本名」の入力が求められる。
本名というのは例にあがっている
"Heinrich Heine (Der Dichter) "
の「Heinrich Heine」に相当する部分のことで、5文字以上でなければならない。
また、GnuPG は設計上は UTF-8 の文字列を受け付けることになっているが、Windows のコマンドプロンプトからは UTF-8 の文字列を入力することはできないので、現実的には半角英数記号(スペース含む)で適当な本名を作ることになる。

本名を入力すると、続いて電子メールアドレスの入力を求められる。
電子メールアドレスは必ずしも入力の必要はない(が、GnuPG と連携するソフトの中にはこのメールアドレスを参照するものもあるので、入力しておいたほうが便利だ)。

それに続いてコメント。上の例でいう「Der Dichter」の文字列に相当する部分だ。ここも理論上は UTF-8 可だが、現実には半角英数記号(スペース含む)のみで入力することになる。これも省略可能だ。

コメントまで入力すると

---- 画面表示 ----
次のユーザーIDを選択しました:
“Kazuyoshi Kakihara

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)?
---- ここまで ----

という確認画面が現れる。名前を修正するには N、コメントを修正するには C、メールアドレスを修正するには E を入
力して Enter を押す。これで確定してよければ O を入力して Enter を押す。
なお、試しに Q を入れたら、以後何の確認もなしに、本当にすぐに gpg.exe が終了してしまった。

---- 画面表示 ----
秘密鍵を保護するためにパスフレーズがいります。

パスフレーズを入力:
---- ここまで ----

続いて秘密鍵を保護するためのパスフレーズの入力を求められる。
適当な文字列を入力して Enter。すると、

---- 画面表示 ----
パスフレーズを再入力:
---- ここまで ----

と表示されるので、また同じ文字列を入力する。

ちなみにここで、テスト用だと割り切って、パスフレーズを設定せずに Enter を押したところ、

---- 画面表示 ----
パスフレーズが不必要なようですが、おそらくそれはろくでもない
考えです! いちおう続行します。パスフレーズは、このプログラム
の“--edit-key”オプションでいつでも変更できます。
---- ここまで ----

と表示されはしたものの、鍵の生成は可能となっていた。

---- 画面表示 ----
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
+++++++++++++++++++++++++..++++++++++.++++++++++++++++++++++++++++++++++++++++++
+++++++++++++....++++++++++..+++++.+++++.++++++++++..+++++.+++++>++++++++++>++++
+...................................+++++
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
.+++++..+++++++++++++++...+++++++++++++++..+++++.++++++++++.+++++....+++++.+++++
+++++.+++++..++++++++++...+++++++++++++++.++++++++++.++++++++++...++++++++++.+++
++++++++++++>++++++++++>+++++>.+++++..+++++^^^
gpg: HomeDir\trustdb.gpg: 信用データベースができました
gpg: 鍵691C6296を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
pub 1024D/691C6296 2008-09-25
指紋 = F062 581F BB1B EB4D 89CA E74F 6F1A 84C1 691C 6296
uid Kazuyoshi Kakihara
sub 2048g/51D9D693 2008-09-25
---- ここまで ----

ここで一旦 gpg.exe は終了し、コマンドプロンプトに戻ってくることになる。これで一作業完了だ。

HomeDir には
秘密鍵用の鍵輪 secring.gpg
公開鍵用の鍵輪 pubring.gpg
信用データベース trustdb.gpg
乱数の素 random_seed
の 4 つのファイルができている(ばあいによっては 5 番目のファイル pubring.bak もできている)。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック