6

RSA署名がデータに対して一意であるかどうかを知りたいです。

「hello」文字列があるとします。RSA署名を計算する方法は、最初にsha1ダイジェスト(これらはデータのunqiueです)を取得し、次にOIDとパディングスキームを含むヘッダーを追加し、数学的ジグルを実行して署名を与えることです。

パディングが同じであると仮定すると、openSSLまたはBouncy Castleによって生成される署名は同じになりますか?

はいの場合、私の唯一の恐れは、「テキスト」/データを取り戻すのは簡単ではないでしょうか?

一部のデータのRSA署名を実際に実行しようとしましたが、OpenSSLとBCの署名が異なっていました。私はそれを繰り返しましたが、それぞれに対して何度も同じ署名を取得しました。パディングの違いにより、メソッドの2つのシグネチャが異なることに気付きました。ただし、各ライブラリの署名が、繰り返すたびに同じである理由はまだわかりません。誰か簡単な説明をお願いできますか?

4

3 に答える 3

14

PKCS#1で「古いスタイルのv1.5」パディングとして説明されている「通常の」パディングスキームは、決定論的です。それはこのように動作します:

  • 署名するデータはハッシュされます(たとえば、SHA-1を使用)。
  • 固定ヘッダーが追加されます。そのヘッダーは、実際には、データの処理に使用されたばかりのハッシュ関数を識別するASN.1構造体です。
  • パディングバイトが追加されます(左側):0x00、次に0x01、次にいくつかの0xFFバイト、次に0x00。0xFFバイトの数は、結果の全長がモジュラスのバイト長と正確に一致するように調整されます(つまり、1024ビットRSAキーの場合は128バイト)。
  • パディングされた値は整数(モジュラスよりも小さい)に変換され、RSAのコアにあるべき乗剰余を通過します。結果はバイトのシーケンスに変換され、それが署名です。

これらの操作はすべて決定論的であり、ランダムではありません。したがって、同じデータに同じキーと同じハッシュ関数で署名すると、これまでと同じ署名が生成されることが正常であり、予想されます。

ただし、ASN.1ベースの固定ヘッダーにはわずかな仕様不足があります。これは、ハッシュ関数とそのハッシュ関数の「パラメーター」を識別する構造です。通常のハッシュ関数はパラメーターを受け取らないため、パラメーターは特別な「NULL」値(数バイトかかる)で表すか、完全に省略します。どちらの表現も受け入れられます(前者が推奨されると思われます)。したがって、生の効果は、特定のハッシュ関数に対して2つのバージョンの「固定ヘッダー」があることです。OpenSSLとBouncycastleは同じヘッダーを使用しません。ただし、署名検証者は両方を受け入れることになっています。

PKCS#1は、PSSと呼ばれる新しいパディングスキームについても説明しています。これは、より複雑ですが、より強力なセキュリティ証明を備えています。PSSにはランダムなバイトが多数含まれているため、毎回個別の署名を取得できます。

于 2011-05-04T13:31:52.567 に答える
4

署名はプライバシーメカニズムではありません。平文を元に戻すことができれば、問題とは見なされません。メッセージを秘密にしておく必要がある場合は、署名だけでなく暗号化も行ってください。

それでも、RSA署名は署名者の秘密鍵を使用して作成されることに注意してください。このような署名が与えられると、署名者の公開鍵を使用してRSA変換を「元に戻す」(メッセージの署名をe、mod nに上げる)ことができ、入力として提供されたSHA1またはその他のハッシュ値を取得できます。それでも、ハッシュ関数を元に戻して、メッセージから切り離された署名に対応する入力プレーンテキストを取得することはできません。

暗号化のためのRSAは別の問題です。ここでの暗号化のパディング方法には、トラフィック分析を無効にするためのランダムデータが含まれています。

于 2011-05-04T12:52:23.840 に答える
-2

これが、キーの上にソルト/初期化ベクトルを追加する理由です。そうすれば、どのレコードが同じ平文から来たのかを知ることができないはずです。

于 2011-05-04T12:41:07.543 に答える