我的项目正在对来自某些第三方软件的某些数据集进行签名验证。使用的签名算法是 SHA1withDSA
。当我使用SDK附带的标准SUN加密提供程序时,一切都很顺利。最近我切换到了Bouncy Castle 1.50,之后,一些以前(即SUN提供者)进行验证的数据集开始失败,而其余的仍然被验证正常。
我探索了两个提供程序的源代码,结果发现SDK的默认提供程序对格式错误的签名有某种保护(同时能够恢复),而Bouncy Castle提供程序没有。查看OpenJDK forJava7(第336-344行)或OpenJDK forJava8(第265-273行):他们在某些情况下做了一些签名修复。虽然没有为org.bouncycastle.jcajce.provider.asymmetric.dsa.DSASigner#engineVerify
做这样的事情,但在org.bouncycastle.crypto.signers.DSASigner#verifySignature
中明确规定数字必须是正数,否则验证会立即失败。
这是BC省的一个错误,还是我错过了什么?为了克服这个问题,我子类化了org.bouncycastle.crypto.signers.DSASigner
,并在那里添加了相同的上述签名修复程序,然后将其作为另一种签名算法插入(通过子类化org.bouncycastle.jcajce.provider.asymmetric.dsa.DSASigner
)。但也许还有另一种方式我忽略了,这个“问题”是众所周知的?请指教。
如果ASN.1整数的错误BER / DER编码 - 存储为有符号大端序,右对齐八位字节序 - 确实是罪魁祸首,那么Bouncy就没有错误。如果设置了编码的第一位,则应使用 00
值字节填充正值,否则它将表示负值。
Sun提供者允许这些类型的签名进行验证是错误的,而另一方当然正在生成无效的签名。请注意,在Sun代码中没有这种“修复”的情况下,可以让签名进行验证:只需在将其提供给验证函数之前调整编码即可。
唯一不可能的情况是DSA验证作为通用签名验证方法从另一个库调用,而不是从可以在调用前调整数据的应用程序调用。
另一方面,我认为您已经创建了一个优雅的修复程序。它的唯一问题是,如果从JCA兼容框架验证了提供者的签名,它可能无法运行。另一个可能的修复程序是在将其提供给Signature
类进行验证之前重新编码。
请注意,我不认为这是一个安全问题;签名由R和S的值组成,它们是如何编码的并不重要,只要最终得到正确的值。
我需要用Java中的Bouncy Castle创建一个自签名X509证书,但我尝试包含的每个类都不推荐使用。我该怎么解决这个问题?还有其他课程吗?谢谢
我正在尝试使用.NET(CNG提供商)的现有ECDSA密钥,以便使用Bouncy Castle对数据进行签名,然后在两种签名格式(P1363和ASN.1)之间进行转换。然而,我总是得到不同的签名。我不太确定转换是否不正确,或者我是否使用了不正确的方法来使用Bouncy Castle读取.NET密钥。 由于某些原因,和已经不同,我假设问题甚至可能在转换之前就出现了。我已经看过许多StackOverf
有人能解释一下为什么这段代码在解密密钥时会在最后一行抛出吗? 以下是来自https://stackoverflow.com/a/27886397/66722对于使用OAEP的RSA也是如此? “RSA/ECB/PKCS1Padding”实际上没有实现ECB模式加密。它应该被称为“RSA/None/PKCS1Padding”,因为它只能用于加密单个明文块(或者实际上是一个密钥)。这只是Sun/Ora
我正在开发一个功能来对某些内容进行数字签名。我有一个带有私钥的有效证书。如何使用私钥和充气城堡进行数字签名? 我尝试了以下方法,但想要一些正确的方法来实现同样的使用充气城堡: 谢谢!
我正在调试bouncy castle 1.47的一个问题。我可以找到“bcprov”的调试jar,但无法找到{org.bouncycastle:bcpkix-jdk15on:1.47:jar}的调试jar。 还有其他地方可以下载bcpkix-jdk15on-1.47吗。包含调试信息的jar? 或 是否有一种工具可以从没有行号的jar(包含. class文件)生成行号,并且还可以为相同生成的jar生
我在玩加密。我被困在用BouncyCastle加载密钥上。密钥是由PuTTYgen(SSH-2 RSA 4096位)生成的。也许有其他方法可以加载它吗? 我得到: “System.IO”类型的未处理异常。BouncyCastle.Crypto中出现“IOException”。dll<br>其他信息:意外的内容结束标记“” 已添加:我使用“ssh-keygen -t rsa -b 4096”生成了一