【ホームページに戻る】

GnuPG のデジタル署名で DSA2 と SHA-256, SHA-384, SHA-512 を使う方法

はじめに

DSA2 とは、NIST の「Draft Federal Information Processing Standard (FIPS) 186-3 - Digital Signature Standard (DSS)」で更新された新しい DSA を意味します。DSA2 の正式名称は DSA のままなのですが、従来の DSA と区別するために使われています。
DSA 署名アルゴリズムの制限は、1024-bit を超える長さの鍵を作れなかったことと 160-bit の Hash (SHA-1 または RIPEMD/160)だけしか使えなかったことです。DSA2 では、これらの制限がなくなり、2048-bit や 3072-bit の長さの鍵が作成でき、SHA-256 や SHA-512 の Hash が利用できます。
注意すべき点は、DSA2 が新しい仕様なので GnuPG(バージョン 1.4.4 以上)以外の OpenPGP プログラムでは利用できません。(2006年6月末日現在)
なぜ Hash algorithm に SHA-256, SHA-384, SHA-512 を使う必要性があるのかに関しては「次世代メッセージダイジェスト (SHA-256、SHA-384、SHA-512)」をご覧ください。

まず、GnuPG のバージョン 1.4.4 以上が必要です。これは、あなたの通信相手にも要求される条件です。
GnuPG は、Mac OS X 標準装備ではありませんので、インストールする必要があります。インストール方法は「GnuPG-1.4.x のインストール方法」をご覧下さい。初めてインストールする方は「GnuPG-1.4.x の初期設定の方法」もご覧下さい。
また、GPGMail を利用する場合には、バージョン 1.1.2 以上が必要です。(勿論、あなたの通信相手が GPGMail を使わなければならない訳ではありませんが、 SHA-256, SHA-384, SHA-512 に対応したツールは必要です)

さて、GnuPG の既定 Hash algorithm は SHA1 です。これを SHA-256, SHA-384, SHA-512 のどれかに変更するためには、「digest-algo」オプションを使います。(Hash と Digest は、同じ意味で使われています)
例えば、Hash algorithm SHA-256 を使って sample.txt に署名するには、次のようなコマンドを実行します。

Mac:~ lisa$ gpg --digest-algo sha256 --clearsign ./sample.txt 

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Lisa Heartiness (Singer) <lisa@mac.com>”
1024ビットDSA鍵, ID 18C3BAC7作成日付は2004-12-20

gpg: DSAでは160ビットのハッシュ・アルゴリズムの使用が必要です
gpg: ./sample.txt: clearsign failed: 一般的なエラー
Mac:~ lisa$ 

ところが、この実行例では「DSAでは160ビットのハッシュ・アルゴリズムの使用が必要です」というエラーを表示して失敗してしまいました。
実は、GnuPG の既定の署名アルゴリズム「DSA」では、エラー表示の通り 160 ビットの Hash algorithm である SHA1 または RIPEMD160 しか使えません。GnuPG の署名で SHA-256, SHA-384, SHA-512 を利用するためには、署名アルゴリズムとして「RSA」または「DSA2」が必要になります。

初めて GnuPG 鍵ペアを作成する場合ならば、素直に署名アルゴリズムとして RSA または DSA2 を選べば良いのですが、既に DSA の署名用の鍵を利用している場合にはそうはいきません。そのような場合は、RSA または DSA2 の署名用の鍵を新たに追加する必要があります。

(このページでは DSA2 鍵の追加の手順を記していますが、RSA 鍵の追加の手順は「GnuPG のデジタル署名で RSA と SHA-256, SHA-384, SHA-512 を使う方法」を参照して下さい。また、GnuPG における「副鍵やユーザーID の追加」に関する詳細は「GnuPG の仕組み:鍵の構成要素の追加と削除」を参照して下さい)

DSA2 の署名用の鍵を追加する方法

署名アルゴリズム「DSA2」の署名用の鍵を鍵輪に追加する手順は以下の通りです。
(注意事項:この作業を行う前に鍵輪の複製を作っておくことをお勧めします
以下の例では、仮にユーザーID「Lisa Heartiness (Singer) <lisa@mac.com>」が存在するものとします。
オプション「--enable-dsa2」は DSA2 鍵の追加を可能にします。

 Mac:~ lisa$ gpg --enable-dsa2 --edit-key 'lisa@mac.com'
gpg (GnuPG) 1.4.4; 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  1024D/18C3BAC7  作成: 2004-12-20  満了: 無期限      利用法: SCA 
                     信用: 絶対的        有効性: 絶対的
sub  1024g/DC3A46C7  作成: 2004-12-20  満了: 無期限      利用法: E   
[ultimate] (1). Lisa Heartiness (Singer) <lisa@mac.com>

コマンド> addkey	<-- 副鍵を追加するコマンド
鍵は保護されています。     

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Lisa Heartiness (Singer) <lisa@mac.com>”
1024ビットDSA鍵, ID 18C3BAC7作成日付は2004-12-20

パスフレーズを入力: 	<-- パスフレーズを入力する

ご希望の鍵の種類を選択してください:  
   (2) DSA (署名のみ)
   (4) Elgamal (暗号化のみ)
   (5) RSA (署名のみ)
   (6) RSA (暗号化のみ)
選択は? 2		<-- 署名アルゴリズムの DSA を選択する
DSA keys may be between 1024 and 3072 bits long.
What keysize do you want? (1024) 3072		<-- 2048 bit 以上の鍵長を入力する
要求された鍵長は3072ビット                      
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)		<-- 既定値の無期限で良ければ return キー
Key does not expire at all
これで正しいですか? (y/N) y		<-- これで良ければ y を入力する
本当に作成しますか? (y/N) y		<-- これで良ければ y を入力する

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
gpg: WARNING: some OpenPGP programs can't handle a DSA key with this digest size
++++++++++++++++++++.++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++.++
++++++++++++++++++..+++++..++++++++++.+++++.+++++.+++++..+++++...+++++.+++++++++++++++
.++++++++++...++++++++++++++++++++..+++++++++++++++..+++++.+++++.+++++.+++++...+++++..
......................................................................................
......................................................................................
.............................................+++++..+++++

pub  1024D/18C3BAC7  作成: 2004-12-20  満了: 無期限      利用法: SCA 
                     信用: 絶対的        有効性: 絶対的
sub  1024g/DC3A46C7  作成: 2004-12-20  満了: 無期限      利用法: E   
sub  3072D/B053C500  作成: 2006-06-30  満了: 無期限      利用法: S   
[ultimate] (1). Lisa Heartiness (Singer) <lisa@mac.com>

コマンド> save		<-- 以上の更新内容を保存して終了する
Mac:~ lisa$ 

以上で DSA2 の署名用の鍵の追加作業は終了です。
これ以降の署名は、この新しい DSA2 鍵で行われます。ただし、この作業によって、従来の DSA 鍵が損なわれることはありません。よって、従来の DSA 鍵で署名した文書の検証も、新しい DSA2 鍵で署名した文書同様に問題なく行えます。
勿論、以上の作業によって GnuPG 鍵輪を更新したことになりますから、公開鍵の更新も必要です。あなたの通信相手に新しい公開鍵を配布しなければなりません。

以下は、DSA2 の署名用の鍵を追加後に SHA-512 を使って sample.txt に署名し、それを検証した実行例です。署名された文書の二行目の文字列「Hash: SHA512」が、期待通りに署名されたことを示しています。

Mac:~ lisa$ gpg --digest-algo sha512 --clearsign ./sample.txt 

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Lisa Heartiness (Singer) <lisa@mac.com>”
3072ビットDSA鍵, ID B053C500作成日付は2006-06-30 (主鍵ID 18C3BAC7)

Mac:~ lisa$ 

Mac:~ lisa$ cat ./sample.txt.asc 		<-- 署名された文書を表示するコマンド
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

GnuPG の署名で SHA-256, SHA-384, SHA-512 を利用するためには、
署名アルゴリズムとして「RSA」または「DSA2」が必要になります。
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.4 (Darwin)

iFcDBQFEp8AKTH1qDbBTxQARCjOSAQC9paOH1e2K7AHdx9u9K368xZCOplk8xAib
...	(署名データ省略)
=ocob
-----END PGP SIGNATURE-----
Mac:~ lisa$ 

Mac:~ lisa$ gpg --verify ./sample.txt.asc 		<-- 署名の検証コマンド
gpg: 〓〓〓  6/30 23:39:52 2006 JSTにDSA鍵ID B053C500で施された署名
gpg: “Lisa Heartiness (Singer) <lisa@mac.com>”からの正しい署名
Mac:~ lisa$ 

GPGMail の署名で SHA-256, SHA-384, SHA-512 を利用する方法

以下に記した事柄は、GPGMail-1.1.2 以上で対応しています。
GPGMail で署名のときの Hash algorithm として SHA-256, SHA-384, SHA-512 のどれかを使用したい場合には、GnuPG 鍵輪に RSA または DSA2 の署名用の鍵を追加するだけでなく、GnuPG の環境設定ファイル「gpg.conf」を修正する必要があります。
gpg.conf の場所は、ホーム・フォルダ内の「.gnupg」と言う不可視フォルダの中です。よって、gpg.conf のコピーや上書き作業をターミナル (Terminal.app) 上のコマンドで行います。
以上で作業終了です。
これ以後 GPGMail では、設定した Hash algorithm で署名が行われます。
動作試験を行う場合には、自分宛に署名メールを送信してみると良いでしょう。このとき、OpenPGP/MIME 書式ではなく、古い PGP 書式で行うとわかり易いでしょう。(勿論、OpenPGP/MIME 書式の時でも新しく設定した Hash algorithm が使われます。署名メールのソースを見れば分かります)(メールのソースの表示方法は『Command + Option + U」です)

By: Tomio
【ホームページに戻る】