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

时间:2019-01-03 11:55:02

标签: digital-signature c++

我正在根据RSA-PSSR-Filter-Test.zip示例here使用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是不安全的。

然后我在惠而浦发现了this example。但是,它似乎并没有提取实际的原始消息,只是声称要对其进行验证。 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,实际消息也不包含在签名中?

我也想知道这里“新”分配的用法;该代码实际上会泄漏内存吗?

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

1 个答案:

答案 0 :(得分:0)

通过使用枚举值SHA3_512代替出现的SHA1,可以将原始RSA-PSSR-Filter-Test.zip example修改为使用SHA3。 (您还需要修改一些标头包含和使用指令。)仍不确定为什么我无法从Whirlpool示例中得到响应。有关mailing list的更多详细信息。