使用Crypto++使用私钥进行签名;SHA1 vs惠而浦

Using Crypto++ to sign using private key; SHA1 vs Whirlpool

本文关键字:SHA1 vs Crypto++ 私钥 使用      更新时间:2023-10-16

我根据这里的RSA-PSSR-Filter-Test.zip示例使用crypto++,它很有效。

我正在努力寻找一种可以可靠地使用私钥对消息进行签名的方法,并在Qt应用程序中以编程方式使用公钥验证消息的来源。

我很高兴我可以在验证签名时提取消息:

StringSource(signature, true,
new SignatureVerificationFilter(
verifier,
new StringSink(recovered),
SignatureVerificationFilter::THROW_EXCEPTION | SignatureVerificationFilter::PUT_MESSAGE) // SignatureVerificationFilter
); // StringSource
assert(ui->plainTextEdit->toPlainText().toStdString() == recovered);

但是SHA1是不安全的。

然后我在惠而浦找到了这个例子。然而,它似乎并没有提取实际的原始消息,只是声称要验证它。不过,这段代码真的验证了消息吗?ArraySink的用法对我来说似乎有点深奥,所以我不知道。

bool result = false;
Verifier verifier(publicKey);
CryptoPP::StringSource ss2(decodedSignature + aMessage, true,
new CryptoPP::SignatureVerificationFilter(verifier,
new CryptoPP::ArraySink((byte*)&result,
sizeof(result))));
return result;

我试图将代码转换为类似于SHA1的示例,但这没有提取任何消息:

CryptoPP::StringSource ss2(decodedSignature, true,
new CryptoPP::SignatureVerificationFilter(verifier,
new StringSink(recovered)));

是否可以使用Whirlpool转换此代码以从签名中实际提取消息,或者实际消息是否未包含在签名中,尽管它看起来是PSSR?

我还想知道这里"新"分配的用法;这个代码真的会泄露内存吗?

对于任何错误的术语,我深表歉意;我不在安全领域。

原来RSA-PSSR-Filter-Test.zip示例可以修改为使用SHA3,例如使用枚举值SHA3_512,而不是出现它的SHA1。(您还需要修改一些头包含和使用指令。)仍然不确定为什么我不能从Whirlpool示例中得到响应。有关邮件列表的更多详细信息。