标签: digital-signature

使用 java 安全提供程序分离摘要和签名

由于一些实现细节,我需要拆分散列和签名生成。我尝试使用“NONEwithRSA”签名算法来实现这一点。

这是一个基本的工作示例:

public void rsaSignatureIntegrityTest() {
    KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
    gen.initialize(2048, new SecureRandom());
    KeyPair pair = gen.generateKeyPair();

    byte[] digest = MessageDigest.getInstance("SHA-256").digest(MESSAGE);
    Signature signer = Signature.getInstance("NONEwithRSA");
    signer.initSign(pair.getPrivate());
    signer.update(digest);
    byte[] signed = signer.sign();

    Signature verifier = Signature.getInstance("SHA256withRSA");
    verifier.initVerify(pair.getPublic());
    verifier.update(MESSAGE);
    verifier.verify(signed);
}
Run Code Online (Sandbox Code Playgroud)

运行这个,该verifier.verify()方法抛出一个签名异常:

java.security.SignatureException: Signature encoding error
    at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:204)
    at java.security.Signature$Delegate.engineVerify(Signature.java:1219)
    at java.security.Signature.verify(Signature.java:652)
    at testing.rsaSignatureIntegrityTest(testing.java:38)
    ...
Caused by: java.io.IOException: Sequence tag error
    at sun.security.util.DerInputStream.getSequence(DerInputStream.java:297)
    at sun.security.rsa.RSASignature.decodeSignature(RSASignature.java:229)
    at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:195)
    ... 26 more
Run Code Online (Sandbox Code Playgroud)

验证者对象似乎期望某种 DER 编码结构,它不是由签名者对象产生的。

有关如何使其工作的任何建议?

java hash cryptography rsa digital-signature

1
推荐指数
1
解决办法
1598
查看次数

如何检查“PDF数字签名”是否符合“PAdES”标准?

我们如何检查 PDF 上的数字签名是否符合“PAdES”标准?

pdf digital-signature pades

1
推荐指数
1
解决办法
4969
查看次数

从较长的密钥导出密钥

我使用用户提供的 32 字节密钥来使用 HMAC-256 签署一些数据。我还希望我的应用程序使用 AES-192 加密数据。我应该要求用户提供另一个密钥(这次大小为 16 字节),还是有一种安全的方法可以从另一个 32 字节密钥派生出 16 字节强密钥?第二种方法将使应用程序配置更容易一些。有什么指导方针或提示吗?或者这种做法完全是无稽之谈?

encryption cryptography aes digital-signature hmac

1
推荐指数
1
解决办法
381
查看次数

如何为时间戳签名启用LTV并设置不允许更改pdf?

我正在使用数字证书签署 pdf iText。现在我可以签名并添加 LTV,但证书级别可以是:

signatureAppearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_FORM_FILLING_AND_ANNOTATIONS);
Run Code Online (Sandbox Code Playgroud)

我只想设置PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED. 最终结果应如下所示:

在此输入图像描述

sap.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED);
MakeSignature.signDetached(signatureAppearance, privateKey, "SHA-512", chain, null, ocspClient, tsaClient, 0, MakeSignature.CryptoStandard.CADES);
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的代码进行签名,那么使用AdobeLtvEnabling.java添加LTV在使用ACROBAT检查时会提示签名无效,因为添加LTV时该文件正在修改不可修改的PDF文件。那么,我该怎么做才能达到最终的效果呢?

java certificate itext digital-signature

1
推荐指数
1
解决办法
3183
查看次数

签名验证期间的Java异常(错误解码签名字节)

我必须验证证书。我不是密码学专家,所以可能我做错了什么(或所有:))。当代码到达最后一步 ( boolean b = sig.verify(CertSign);) 时,它会触发一个异常:java.security.SignatureException: errordecodeing signature bytes。有人可以帮我弄清楚我做错了什么吗?

以下是显示问题的测试代码:

    private void test() {
        byte [] CertBody = new byte[]{(byte)0x7F,(byte)0x4E,(byte)0x81,(byte)0x82,
                               (byte)0x5F,(byte)0x29,(byte)0x01,(byte)0x00,
                               (byte)0x42,(byte)0x08,(byte)0xFB,(byte)0x55,
                               (byte)0x54,(byte)0x4F,(byte)0x02,(byte)0xFF,
                               (byte)0xFF,(byte)0x01,(byte)0x5F,(byte)0x4C,
                               (byte)0x07,(byte)0xFF,(byte)0x53,(byte)0x4D,
                               (byte)0x52,(byte)0x44,(byte)0x54,(byte)0x02,
                               (byte)0x7F,(byte)0x49,(byte)0x4E,(byte)0x06,
                               (byte)0x09,(byte)0x2B,(byte)0x24,(byte)0x03,
                               (byte)0x03,(byte)0x02,(byte)0x08,(byte)0x01,
                               (byte)0x01,(byte)0x07,(byte)0x86,(byte)0x41,
                               (byte)0x04,(byte)0x6C,(byte)0x17,(byte)0x5B,
                               (byte)0xB9,(byte)0xEF,(byte)0x5D,(byte)0x02,
                               (byte)0x20,(byte)0x51,(byte)0xCC,(byte)0xB2,
                               (byte)0x89,(byte)0x09,(byte)0x42,(byte)0x15,
                               (byte)0x85,(byte)0xD3,(byte)0x1A,(byte)0xCD,
                               (byte)0xA7,(byte)0x1B,(byte)0x08,(byte)0x4A,
                               (byte)0x48,(byte)0x8F,(byte)0x7B,(byte)0x77,
                               (byte)0x5B,(byte)0x57,(byte)0x9B,(byte)0xB7,
                               (byte)0x41,(byte)0x3B,(byte)0xDA,(byte)0x4C,
                               (byte)0xDE,(byte)0x70,(byte)0x11,(byte)0x17,
                               (byte)0xE0,(byte)0xD9,(byte)0xD1,(byte)0x0F,
                               (byte)0x74,(byte)0xD6,(byte)0x25,(byte)0xB2,
                               (byte)0x86,(byte)0xCA,(byte)0x04,(byte)0x64,
                               (byte)0x54,(byte)0x4F,(byte)0x1B,(byte)0x53,
                               (byte)0xF3,(byte)0x24,(byte)0x02,(byte)0xD3,
                               (byte)0xB3,(byte)0x74,(byte)0xEF,(byte)0xA6,
                               (byte)0xC7,(byte)0x5F,(byte)0x20,(byte)0x08,
                               (byte)0xEA,(byte)0xF4,(byte)0xBE,(byte)0xCC,
                               (byte)0x03,(byte)0x18,(byte)0x02,(byte)0xA3,
                               (byte)0x5F,(byte)0x25,(byte)0x04,(byte)0x5A,
                               (byte)0xAF,(byte)0xA9,(byte)0xDF,(byte)0x5F,
                               (byte)0x24,(byte)0x04,(byte)0x5C,(byte)0x90,
                               (byte)0xDD,(byte)0x5F};

        byte [] CertSign = new byte[]{(byte)0x3D,(byte)0x61,(byte)0x23,
                                      (byte)0xBE,(byte)0x6C,(byte)0x0B,
                                      (byte)0xC1,(byte)0x3E,(byte)0x7A,
                                      (byte)0x2D,(byte)0x60,(byte)0x3D,
                                      (byte)0x28,(byte)0xF0,(byte)0x29,
                                      (byte)0xCC,(byte)0x8C,(byte)0x55,
                                      (byte)0xF1,(byte)0x9A,(byte)0x5C,
                                      (byte)0x7E,(byte)0xBE,(byte)0xFD,
                                      (byte)0x43,(byte)0x27,(byte)0x1A,
                                      (byte)0x9D,(byte)0xA1,(byte)0x7C,
                                      (byte)0x81,(byte)0x09,(byte)0x5C,
                                      (byte)0x1D,(byte)0x26,(byte)0x27,
                                      (byte)0x76,(byte)0x73,(byte)0x74,
                                      (byte)0x87,(byte)0xF9,(byte)0x6C,
                                      (byte)0x2A,(byte)0xC9,(byte)0xA3,
                                      (byte)0x32,(byte)0x3C,(byte)0x60,
                                      (byte)0x51,(byte)0x71,(byte)0x6D,
                                      (byte)0x2F,(byte)0xC0,(byte)0xF6, …
Run Code Online (Sandbox Code Playgroud)

java security digital-signature der ecdsa

1
推荐指数
1
解决办法
1041
查看次数

1
推荐指数
1
解决办法
1106
查看次数

iText 和 Shadow 攻击

我想知道 iText 是否正在研究或已经修补了此处描述的影子攻击:https ://www.pdf-insecurity.org/ 影子攻击:隐藏和替换签名 PDF 中的内容(2020 年 7 月)我刚刚找到有关2019 年发现的漏洞 https://itextpdf.com/en/blog/technical-notes/avoiding-pdf-digital-signature-vulnerabilities-itext

security itext digital-signature itext7

1
推荐指数
1
解决办法
211
查看次数

从WebSphere Portal 6.1(AS7)中的密钥存储中检索PrivateKey

我需要在WebSphere Portal 6.1上运行的应用程序中使用数字签名.是否有任何API可以从服务器密钥存储中检索java.security.PrivateKey?我想在我的应用程序源代码中避免使用密钥存储和存储密码的显式路径.

digital-signature websphere-portal websphere-7 private-key

0
推荐指数
1
解决办法
3080
查看次数

让jSignature与Twitter Bootstrap Modal一起使用

我目前正在尝试使用jSignature(一个捕获签名的插件)在twitter bootstrap模式中工作.由于某种原因,签名框缩小以适应模态并使签名无法正常工作.这里有一个jsFiddle供参考http://jsfiddle.net/someyoungideas/3B3jS/.

<!-- Button to trigger modal -->
<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a>

<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="myModalLabel">Modal header</h3>
  </div>
  <div class="modal-body">
    <p id="signature"></p>
  </div>
  <div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
    <button class="btn btn-primary">Save changes</button>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

谢谢

jquery digital-signature twitter-bootstrap

0
推荐指数
1
解决办法
4251
查看次数

Java/Scala - hmacSHA256签名每次都不同

我得到了这种奇怪的行为,每次sha256签名对于相同的输入和密钥都是不同的.不知道为什么.这是代码和一些printlns.

def apply(algorithm: String, data: String, key: String): Array[Byte] = {

  val _key = Option(key).getOrElse(throw new IllegalArgumentException("Missing key for JWT encryption via " + algorithm))
  val mac: Mac = Mac.getInstance(algorithm)
  val secretKey: SecretKeySpec = new SecretKeySpec(_key.getBytes, algorithm)
  mac.init(secretKey)
  val res = mac.doFinal(data.getBytes)

  println(s"$algorithm $data $key $res $secretKey")
  res
}
Run Code Online (Sandbox Code Playgroud)

以下是使用此代码从测试套件进行的日志记录:

HmacSHA256 eyJIZXkiOiJmb28ifQ== secretkey [B@4959742d javax.crypto.spec.SecretKeySpec@fa77d7a8
HmacSHA256 eyJIZXkiOiJmb28ifQ== secretkey [B@6a790e37 javax.crypto.spec.SecretKeySpec@fa77d7a8
HmacSHA256 eyJIZXkiOiJmb28ifQ== secretkey [B@2347f330 javax.crypto.spec.SecretKeySpec@fa77d7a8
HmacSHA256 eyJIZXkiOiJmb28ifQ== secretkey [B@5298db1f javax.crypto.spec.SecretKeySpec@fa77d7a8
HmacSHA256 eyJIZXkiOiJmb28ifQ== secretkey [B@5cb80eb0 javax.crypto.spec.SecretKeySpec@fa77d7a8
Run Code Online (Sandbox Code Playgroud)

为什么签名都不同?

java scala digital-signature hmac

0
推荐指数
1
解决办法
1198
查看次数