【发布时间】:2013-04-19 21:42:26
【问题描述】:
我正在尝试编写代码来验证一些 RSA 签名。签名是使用 OpenSSL 命令行工具生成的,使用此命令行的等效项:
openssl dgst -sha1 -sign private_key_file.pem < binary_data_file > sig
我正在尝试使用libtomcrypt 进行验证:
这里是libtomcrypt中RSA验证函数的调用签名:
int rsa_verify_hash_ex(
const unsigned char *sig, unsigned long siglen, // signature to verify
const unsigned char *hash, unsigned long hashlen, // hash value to check against sig
int padding, // defined constant value, see below
int hash_idx, // identifies which hash algorithm, see below
unsigned long saltlen, // specify salt length, see below
int *stat, // output parameter, returns whether verify succeeded or not
rsa_key *key); // RSA public key to use for verify
如果该函数运行没有错误,则返回 0,否则返回错误代码。如果运行无误,stat 输出参数指示签名是否验证。
大多数参数看起来很简单:传入要检查的签名、用于比较的哈希值以及用于检查的 RSA 密钥。 hash_idx 在libtomcrypt 包含的示例代码中很清楚;它是受支持的哈希算法表的索引,我可以找到与此代码 sn-p 一起使用的正确值:hash_idx = find_hash("sha1")
但我想知道 padding 和 saltlen 的值。 padding 并没有让我太担心,因为只有两个可能的值,我可以同时尝试它们。但是我应该为saltlen 传递什么?
用于 RSA 验证的 OpenSSL 函数的 OpenSSL 文档未显示 saltlen 参数。 openssl dgst 的手册页(即 man dgst 的结果)没有讨论盐。
所以我的问题:
- 如何确定要使用的正确盐长度?
- OpenSSL 的
dgst命令是否在输入中插入任何额外的内容,例如:(stdin)=
(我通过搜索 StackOverflow 找到了 (stdin)= 的东西:Why are the RSA-SHA256 signatures I generate with OpenSSL and Java different?)
-
libtomcrypt也有一个名为pkcs_1_pss_decode()的函数,它被记录为“解码 PSS 编码的签名块”。有没有可能这是我需要调用的函数?
感谢您能给我的任何帮助。
编辑:感谢以下来自@Jonathan Ben-Avraham 的帮助,我今天能够完成这项工作。我的问题的答案分别是:
- 使用长度 0 作为盐,完全没有盐。
- 不,OpenSSL 没有插入任何额外内容,例如
(stdin)= - 我需要调用
rsa_verify_hash_ex(),并且需要将padding参数指定为LTC_LTC_PKCS_1_V1_5。
【问题讨论】:
标签: c openssl rsa libtomcrypt