OpenSSLを用いたデジタル署名

デジタル署名には2つの方法がある
– メッセージに署名するケース
– メッセージのハッシュ値に署名するケース

1. テスト用ファイルの作成
$ echo foobar > foo.txt

2. dsaパラメータの作成(Digital signature algorithm)
DSAパラメータを1セット作成し、PEMファイルに出力する。1024ビット長の素数を利用
$ openssl dsaparam 1024 -in /dev/random -out dsa_param.pem

3. プライベート鍵の作成
$ openssl gendsa dsa_param.pem -out dsa_private.pem

4. 公開鍵の作成
DSAプライベート鍵からDSA公開鍵を作成
$ openssl dsa -in dsa_private.pem -pubout -out dsa_public.pem

5. ダイジェストの作成
テキスト用ファイル(foo.txt)からダイジェストを作成する
$ openssl dgst -sha1 foo.txt | awk ‘{print $2}’ > foo.txt.sha1.sum

6. ダイジェストの署名
DSA秘密鍵を用いて、ダイジェストファイル(foo.txt.sha1sum)からデジタル署名を作成する
$ openssl dgst -dss1 -sign dsa_private.pem -out foo.txt.sig foo.txt.sha1sum

7.ダイジェストの検証
$ openssl dgst -dss1 -sign dsa_private.pem -out foo.txt.sig foo.txt.sha1sum