首页 > 解决方案 > 使用 Crypto++ 使用私钥签名;SHA1 与惠而浦

问题描述

我根据此处的 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 是不安全的。

然后我在Whirlpool 中找到了这个例子。但是,它似乎没有提取实际的原始消息,只是声称要验证它。这段代码是否真的验证了消息?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?

我也想知道这里“新”分配的使用;这段代码真的会泄漏内存吗?

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

标签: digital-signaturec++

解决方案


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


推荐阅读