2017-08-29 11 views
-1

私は、コマンドを以下により署名するファイルを持っている:sha256withRSA署名をopensslで計算する同等のコマンドはありますか?

$ openssl sha256 -sign privatekey.pem myfile.txt > right.result 

は、同じ結果を得るために任意の同等のコマンドはありますか?私は以下の方法を試みました(最初にsha256ダイジェストを計算してから、ダイジェストに署名します)。しかし、それは動作しないことができます。

$ openssl sha256 -binary myfile.txt > my.digest 
$ openssl rsautl -sign -inkey privatekey.pem -in my.digest > wrong.result 

"wrong.result" の内容をを常に"right.result"は異なっています。誰か私に理由を教えてもらえますか?どうもありがとうございました!

+1

Dupe https://stackoverflow.com/questions/38767660/multiple-openssl-rsa-signing-methods-produce-different-results/38768455などがリンクしています –

答えて

-1

openssl sha256 -sign ...を使用すると、opensslはRFC-8017で完全に指定されているPKCS#1 "SHA256withRSA"アルゴリズムを計算します。

これは、例の2番目の部分と同様に、SHA-256ダイジェストを行い、RSAで署名することを意味するものではありません。

このRFCによると、署名はRSAモジュラスと同じ長さを持っている必要があります。ここでは

が理由です。 RSAモジュラスは512ビット(デフォルト値はopenssl genrsa)以上であるため、計算されたシグネチャは512ビット(またはそれ以上)の長さでなければなりません。ハッシュ関数(HMAC-SHA256)が256ビット長の値を返すとしても。

したがって、256ビットのみのHMAC-SHA256ダイジェストから512ビットのシグネチャを計算するには、RFC-8017では、I2OSP整数 - オクテット文字列プリミティブを使用する必要があります。ハッシュ、整数512(あなたのRSAモジュラスの長さ)。 I2OSPは512ビット長のオクテット文字列を出力します。最後に、これはRSA秘密鍵で暗号化されるこのオクテット文字列です。

しかし、この中間の整数 - オクテット - 文字列値は計算されていません。これがあなたの署名が一致しない理由です。

関連する問題