首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSA签名验证失败与libtomcrypt

RSA签名验证失败与libtomcrypt
EN

Stack Overflow用户
提问于 2019-04-10 13:34:44
回答 1查看 486关注 0票数 0

我在一个项目中使用libtomcrypt,特别是使用RSA对一些数据进行散列和签名。由于内存需求,我想切换到mbedtls。然而,当我试图用mbedtls验证由libtomcrypt生成的签名时,我注意到了一个问题。存在一个填充(PKCS#1 PSS)解码问题。

因为我不知道这些库中有哪个(可能)有bug,所以我使用openssl来验证。

我用openssl成功地验证了用mbedtls生成的签名,并且在验证一个生成的libtomcrypt时出现了验证失败,这使我认为libtomcrypt有一个bug。

但是,因为这可能是一个配置问题,所以我创建了一个带有最小示例的回购,希望有人能够检测到来自我的问题,而不是来自库本身。

测试回购是这里

感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-11 09:46:05

这里缺少一个重要的部分,您不应该对数据进行签名,而应该对数据进行散列。

增加这一点可以解决以下问题:

代码语言:javascript
复制
diff --git a/test-rsa-sign-verify-libtomcrypt-openssl.c b/test-rsa-sign-verify-
libtomcrypt-openssl.c
index 758994a..25e1312 100644
--- a/test-rsa-sign-verify-libtomcrypt-openssl.c
+++ b/test-rsa-sign-verify-libtomcrypt-openssl.c
@@ -9,6 +9,7 @@
 #include "openssl/err.h"
 #include "openssl/rsa.h"

+#define ERRORe(e) printf("%d: \"%s\"\n", __LINE__, error_to_string(e));
 #define ERROR() printf("Error at line : %d\n", __LINE__);

 char *data = "This is the data which will be hashed and then signed by RSA";
@@ -57,10 +58,18 @@ int main(void)
     printf("* Random number generator registered\n");

     size_t data_length = strlen(data);
+
+    uint8_t hash[32];
+    unsigned long hash_length = sizeof(hash);
+    if ((err = hash_memory(hash_idx, data, data_length, hash, &hash_length)) != CRYPT_OK) {
+       ERRORe(err);
+       return -1;
+    }
+
     unsigned long signature_length = 256;
     unsigned char *signature = calloc(signature_length, sizeof(unsigned char));

-    err = rsa_sign_hash((const unsigned char *) data, data_length,
+    err = rsa_sign_hash((const unsigned char *) hash, hash_length,
                         signature, &signature_length,
                         NULL, prng_idx, hash_idx, 12,
                         &private_key);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55613950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档