web-dev-qa-db-ja.com

OpenSSL 0.9.8でデータに署名する方法は?

Nodejsのライセンスジェネレーターを構築しており、現在 Herok でテストしています。

OpenSSL 1.0.1gを実行しているローカルマシンで、次のようにキーペアをテスト(署名および検証)できます。

# data.txt's content (the content of the string literal): "Tsenkov"
openssl dgst -sha1 -sign private.pem data.txt > license.txt
openssl dgst -verify public.pem -signature license.txt data.txt

しかし、Heroku(OpenSSL 0.9.8)では、次のエラーが発生します。

Error Signing Data
27:error:0606B06E:digital envelope routines:EVP_SignFinal:wrong public key type:p_sign.c:99:

これが私のペアが生成される方法です:

openssl ecparam -genkey -name secp521r1 -noout -out private.pem
openssl ec -in private.pem -pubout -outform PEM -out public.pem

OS X 10.9.2(ローカルマシン)でも同じ問題が発生したことを覚えていますが、他のことを試す前にHomebrewでOpenSSLを更新しました奇跡的にが始まりましたワーキング。

データに署名するための古い方法(構文など)があるとは思いません。

誰か助けてもらえますか?ありがとう。

3
Nikolay Tsenkov

OpenSSL-0.9.8は(2005年から)古いものであり、楕円曲線のサポートは、特にコマンドラインツールでは、その時点では完全には追加されていません。 OpenSSL は主にライブラリ;コマンドラインツールはテスト用に提供されていますが、多くの場合、機能が遅れています。 OpenSSLを使用する「通常の」方法は、ライブラリを呼び出すCコードを記述することにより、プログラム的に行われます。

MacOS XはOpenSSL-0.9.8をまだ使用しています。これは、OpenSSLの人々が一部の機能のバイナリ互換性を破り、MacOSが透過的なアップグレードを実行できなくなったためです(一部のアプリケーションが破損する可能性があります)。 Appleの対応は、すべてのOpenSSL関数を「非推奨」としてマークし(システム提供のOpenSSLヘッダーを使用してCコードをコンパイルすると大量の警告が表示されます)、独自の暗号ライブラリを作成しました。

いずれにせよ、機能を向上させるだけでなく、セキュリティ(たとえば、一部のアルゴリズム実装では サイドチャネル攻撃 )に関して追加のシールドを取得し、パフォーマンス(たとえば64ビットx86では、RSAは1.0.1gの方が0.9.8の場合よりも5または6倍高速です。

2
Thomas Pornin