1

秘密鍵で署名されたデータがあります。署名された初期データを取得するにはどうすればよいですか? Bouncy Castle を使用して多くの例を見てきましたが、それらは主に、一部のデータが正しい秘密鍵によって署名されているかどうかを確認するためのものでした。

CMSSignedData s = new CMSSignedData(new CMSProcessableByteArray(toverify.getBytes()),contents);
SignerInformationStore signers = s.getSignerInfos();
SignerInformation signerInfo = (SignerInformation)signers.getSigners().iterator().next();
boolean result = signerInfo.verify(new JcaSimpleSignerInfoVerifierBuilder().setProvider("BC").build(cert.getPublicKey())); 

CMSSignedData オブジェクトは、次の 2 つのパラメーターを取ります。

1.toverify - これは署名されたサンプル文字列です

2.contents - これは取得した署名付きデータです

問題は、「中身」しか持っていないことです。署名を検証するには、「toverify」部分を生成する必要があります。

「toverify」文字列を生成するにはどうすればよいですか?

4

3 に答える 3

3

署名からデータを回復することはできません。署名は小さなデータであり、特定の署名スキーム、キー、および表現に対して常に同じサイズです。署名と公開鍵があれば、署名が対応する秘密鍵によって作成されたものであることを確認できますが、その情報だけではほとんど役に立ちません。通常、署名を検証するポイントは、一部のデータが本物であることを検証することです。検証しているデータが必要です!

于 2013-08-08T09:27:30.510 に答える
0

これを行う方法は 1 つしかありません。その方法を説明します。

  1. 公開指数とモジュラス (公開鍵を構成する) を使用して生の剰余累乗を実行します。
  2. 署名データの一部として使用されたハッシュ値を取得する
  3. 指定されたハッシュに対してすべての可能な値を試すことにより、プレーンテキストをブルートフォースします

ブルート フォースが複雑すぎる場合は、うまくいきません。(一方向) ハッシュは署名スキームの不可欠な部分であり、名前が示すように元に戻せないように設計されています。

(部分的な)メッセージ回復を提供する RSA の標準があります。しかし、その標準である ISO 9796 パート 1 は、セキュリティ上の懸念から撤回されました。現在、オーバーヘッドの少ない署名が必要な場合は、代わりに ECC 署名を使用することをお勧めします。

于 2013-08-10T18:45:23.857 に答える
0

署名を検証するには、「toverify」部分を生成する必要があります。

いいえ、ありません。署名と公開鍵とともに既に提供されているはずです。そうしないと、プロセス全体が無意味になります。署名は、署名するデータがなければ意味がありません。いずれにせよ、署名からデータを回復することはできません。暗号化ではありません。

于 2013-08-09T00:13:13.637 に答える