我有一个DSA参数的PEM文件。换句话说,内容有这样的页眉/页脚:
-----BEGIN DSA PARAMETERS-----
.......
-----END DSA PARAMETERS-----
我看到bouncycastle有DSAParameters
和DSAKeyGenerationParmaters
的课程。我怀疑这个PEM是这些参数的表示,但我无法弄清楚如何从PEM格式加载它。
(背景:从传统项目中,我预计DSA的签名为40字节,但我得到的是46字节。我怀疑DSA参数应该受到指责,我有这个旧的dsa1024.pem如上所述,我正在尝试加载并使用它来生成密钥/生成签名...)
答案 0 :(得分:1)
至少通过1.57(我还没有安装1.58)BCpkix org.bouncycastle.openssl.PEMParser
没有实现DSA参数(尽管它会做EC参数)所以这不容易。
要查看您的参数,它将(更容易)使用
openssl dsaparam -in file -noout -text
但我保证你在参数中找不到任何错误。经典的DSA参数是1024位组和160位子组,20年没有任何变化或变化,我从未见过任何实现错误。
DSA-1024/160签名占用超过40个八位字节的常见原因是因为按照惯例(虽然FIPS 186不要求),它在ASN.1 DER中编码。如果你问了一个关于这个的问题,我可以向你指出ECDSA的现有Q,它有完全相同的问题:
https://crypto.stackexchange.com/questions/1795/how-can-i-convert-a-der-ecdsa-signature-to-ASN.1
https://crypto.stackexchange.com/questions/33095/shouldnt-a-signature-using-ecdsa-be-exactly-96-bytes-not-102-or-103
https://crypto.stackexchange.com/questions/37528/why-do-openssl-elliptic-curve-digital-signatures-differ-by-one-byte
https://crypto.stackexchange.com/questions/44988/length-of-ecdsa-signature
但是,由于您提出了一个与您的实际问题无关的问题,因此针对您的实际问题为您提供解决方案。
如果您使用参数在OpenSSL中生成DSA 密钥(对),则为FWIW,私钥的所有4种PEM格式(pkcs8清除和加密,'遗留'清除和加密)并且PEMParser
可以读取公钥(SPKI)的常用PEM格式,并且可以生成可以从中提取参数的关键对象。 (从技术上讲,SPKI规范允许在某些情况下省略DSA参数,但OpenSSL从不这样做。)