DSA キーと openssl を使用してファイルに署名したいと考えています。DGST(1) のマニュアル ページには、次のように記載されています。
ファイル...
ダイジェストするファイル。ファイルが指定されていない場合は、標準入力が使用されます。
私にとって、これは、次の 2 つの端末コマンドが同じ結果をもたらすはずであることを意味しますが、そうではありません。od
結果はバイナリなので、出力をパイプで渡しました。
コマンドラインでファイルを指定する
openssl dgst -dss1 -sign private_key.pem test_archive.zip | od -x 0000000 2c30 1402 e30d 9073 0059 0de7 f03e 8fd2 0000020 874b 5252 b025 8f44 1402 ed26 2f55 7fa4 0000040 f474 0426 1d44 787c ecd6 5059 921b 0000056
ファイルを openssl コマンドにパイプする
openssl dgst -dss1 -sign private_key.pem < test_archive.zip | od -x 0000000 2c30 1402 2444 c3a5 f498 7bb8 3dfe 715d 0000020 e179 c5ad c0a5 2b16 1402 173b 692b 9d71 0000040 3970 c497 9994 9cbc 4cfd d642 62df 0000056
ご覧のとおり、両方の出力は同じではありませんが、署名する必要があるファイルはどちらの場合も同じです。
これはなぜですか?ここで明らかな何かが欠けていますか?
編集
FreeBSD で OpenSSL バージョン 0.9.8y 2013 年 2 月 5 日、Mac OS X 10.7.5 で 2011 年 2 月 8 日バージョン 0.9.8r を使用し、両方への影響を観察しています。
編集 2 - テスト用のキーを生成する方法
適切なキーを生成するための小さなシェル スクリプト
#!/bin/bash
openssl=/usr/bin/openssl
${openssl} dsaparam 1024 < /dev/urandom > dsaparam.pem
${openssl} gendsa dsaparam.pem -out private_key.pem
${openssl} dsa -in private_key.pem -pubout -out public_key.pem
rm dsaparam.pem
OpenSSL バージョン 1.0.0-fips を使用して CentOS 6 Linux システムでテストを実行したところ、同じ奇妙な動作が見られました。
編集 3 - テスト済みのより多くのバージョン
また、2013 年 2 月 11 日に新しくコンパイルされた OpenSSL バージョン 1.0.1e もこの動作を示します。