没有ASN.1编码的Python中的数字签名?

时间:2019-01-28 18:11:38

标签: python openssl rsa digital-signature asn.1

我们需要生成不带ASN.1编码的数字签名,以供下游应用程序进行验证。我们可以在命令行上通过openssl来做到这一点:

openssl pkeyutl -sign -inkey keyfile < hash

但是,当我尝试使用Python(使用PyCrypto库)进行数字签名时,如果没有包含ASN.1编码的库,我将无法这样做(也就是说,除非我分叉PyCrypto允许我删除他们)。 rsa库也不允许这样做。我是否错过了允许这种灵活性的Python密码库或命令?

1 个答案:

答案 0 :(得分:0)

根据this answer,您显示的OpenSSL命令会产生一个RSASSA-PKCS1-v1_5签名,根据定义,该签名始终包含ASN.1 DER编码的结构:您的假设实际上无效。

但是,在哈希算法固定的情况下,接收器无需实现完整的DER解析器,也无需这样做。它可以只检查是否存在某个字节字符串(以及其他填充字节,并在最右边的位置检查摘要之前)。 This other answer显示了最流行的摘要算法的DER编码。

如果您确实不想在签名中包含ASN.1,则只能切换到RSASSA-PSS