【问题标题】:verify signature without need to original message (in java)验证签名而不需要原始消息(在java中)
【发布时间】:2023-03-15 00:31:01
【问题描述】:

我想签署一条消息,然后我从签名中获取原始消息。 我在 java 中找到 RSA 和 DSA 签名:http://docs.oracle.com/javase/tutorial/security/apisign/vstep4.html
但是他们的验证方法使用原始数据进行验证,无法从签名中恢复消息。
有没有办法在 Java 或任何 Java 的免费库中做到这一点?
谢谢大家。

【问题讨论】:

  • 无法从签名中恢复消息。签名几乎总是短得多,因此它不可能包含足够的数据。签名只会验证消息,不会复制它。
  • 但是对于某些签名方法,可以恢复消息。例如 RSA。看到这个页面:(javadoc.iaik.tugraz.at/iaik_jce/current/iaik/iso/iso9796/…)但是iaik库不是免费的。
  • 在 ISO-9796 中指定的一些算法名称中出现了 RSA 这个词,但它不是 RSA 签名。但你是对的,一些签名算法确实支持消息恢复。请在下面查看我的答案。

标签: java signature verify


【解决方案1】:

您可以使用 BouncyCastle。它supports ISO-9796-2。 ISO9796Test.java 提供了一个例子。以下摘录可能会有所帮助:

RSAKeyParameters pubParameters = new RSAKeyParameters(false, mod3, pub3);
RSAKeyParameters privParameters = new RSAKeyParameters(true, mod3, pri3);
RSAEngine rsa = new RSAEngine();
byte[] data;
ISO9796d2Signer eng = new ISO9796d2Signer(rsa, new RIPEMD128Digest());
eng.init(true, privParameters);
eng.update(msg4[0]);
eng.update(msg4, 1, msg4.length - 1);
data = eng.generateSignature();
eng.init(false, pubParameters);
eng.update(msg4[0]);
eng.update(msg4, 1, msg4.length - 1);
if (eng.hasFullMessage()) {
    eng = new ISO9796d2Signer(rsa, new RIPEMD128Digest());
    eng.init(false, pubParameters);
    if (!eng.verifySignature(sig4)) {
        // signature tampered with
    }
    byte[] message = eng.getRecoveredMessage(), 0, msg4);
}

【讨论】:

  • 谢谢。我也有其他问题,当符号输入文本的长度变大时,验证无法完成。这个问题应该怎么解决?
  • 请提出一个新问题。随意参考这个。您需要提供更多详细信息,例如算法、消息长度、预期行为、实际行为(任何例外?)、成功案例和失败案例之间的已知差异。
【解决方案2】:

我想您指的是 ISO9796-2 数字签名方案 1,尾部字段 1,不需要原始消息的八位字节“BC”。

    RSAEngine rsa = new RSAEngine();
    //DS as SHA1
    Digest dig = new SHA1Digest();
    //3rd parameter "true" indicates implicit which means TF1(octet BC)
    ISO9796d2Signer eng = new ISO9796d2Signer(rsa, dig, true);
    eng.init(false, pubKeyParameter);

    eng.verifySignature(sig);  // if the signature is valid
    eng.getRecoveredMessage(); // get the recovered message, only after successful signature verification

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多