什么是 CRYPTOPP 中的 FIPS 140-2 合规性?

What is compliance with FIPS 140-2 in CRYPTOPP?

我怎样才能满足这样的合规要求?在 InvertibleRSAFunction 的方法 GenerateRandom 中,调用方法 SignaturePairwiseConsistencyTest_FIPS_140_Only(signer, verifier) 时出现异常。 我选错种子了吗?还是长度?

if (FIPS_140_2_ComplianceEnabled())
{
    RSASS<PKCS1v15, SHA>::Signer signer(*this);
    RSASS<PKCS1v15, SHA>::Verifier verifier(signer);
    SignaturePairwiseConsistencyTest_FIPS_140_Only(signer, verifier);

    RSAES<OAEP<SHA> >::Decryptor decryptor(*this);
    RSAES<OAEP<SHA> >::Encryptor encryptor(decryptor);
    EncryptionPairwiseConsistencyTest_FIPS_140_Only(encryptor, decryptor);
}

How can I meet FIPS140-2 compliance?

这是个大话题。 Crypto++ 在 FIPS DLL 有一个关于这个主题的维基页面。以下是一些较高级别的要点。

  • 验证适用于 Windows
  • 必须下载预构建的 FIPS DLL
  • 操作环境:
    • Windows 2000 专业操作系统,Service Pack 1
    • Windows 2000 专业操作系统,Service Pack 1
    • Windows XP Professional SP2 和 Windows Server 2003 X64 SP1

2017 年夏天,我在 International Cryptographic Module Conference. The talk was titled Crypto++: Past Validations and Future Directions 发表了演讲。

简写为:

  • Crypto++ 在历史验证列表中。出于所有意图和目的,我们不再经过验证
  • Crypto++ 可能不会寻求其他验证。太贵了
  • 验证 C++ 库与验证 C 库没有区别
  • 与 C 库相比,实现和使用 C++ 库是痛苦的
  • Crypto++ 可以使用 OpenSSL 的 FIPS Object Module (FOM) 来提供经过验证的密码学。我在演讲中演示了它

Crypto++ 包装 OpenSSL 似乎有点奇怪。我认为也是。但是,FIPS 140-2 是一个过程。它与算法的实际技术实现关系不大。包装 OpenSSL 模块的 Crypto++ 是解决许多问题的直接解决方案,无需花费任何成本(与新验证的 100,000 美元相比)。


2019 年 6 月编辑:我们在 Crypto++ 8.0 release. As discussed at FIPS DLL 上将 FIPS 相关 Visual Studio 项目标记为已弃用Crypto++ wiki,两个项目分别是cryptdll.vcxprojdlltest.vcxproj。它们可能会在未来的版本中被删除。

我们不会删除这两个项目,直到我们有可能提供 FIPS 验证的密码学的地方。这可能是 OpenSSL 的 FIPS 对象模块的包装器。我们的想法是,我们将验证汇集到 OpenSSL 和世界利益中。用户向 OpenSSL 支付 5,000 美元或 10,000 美元用于新平台验证。 Crypto++ 免费支持 OpenSSL validation/integration。

对用户来说不利的一面是,用户失去了排他性,因为世界上任何人都可以使用新平台。对用户来说好处是,私人验证不需要花费 150,000 美元。实际上,我们的政策将强制用户为了每个人的更好利益而集中资源。