使用FIPS验证的库和AES

时间:2016-04-24 16:38:26

标签: c++ encryption aes crypto++ fips

我有一台服务器。我想添加AES加密。 我已经尝试过使用Crypto ++,经过大量搜索后编译但是它总是抛出来自" CryptoPP :: selfTestFailure"的异常。 我已经在fips140.cpp文件中读到了某个与此定义有关的内容:

// Define this to 1 to turn on FIPS 140-2 compliance features, including additional tests during 
// startup, random number generation, and key generation. These tests may affect performance.
#ifndef CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2
#define CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 0
endif

但是当我将define更改为1时,我从不编译DLL的项目。 我做错了什么? /有没有其他方法植入AES算法?

1 个答案:

答案 0 :(得分:2)

  

...经过大量搜索后编译但总是抛出来自“CryptoPP :: selfTestFailure”的异常。我已经在文件fips140.cpp:

中读到了某个与此定义有关的内容

FIPS DLL是一个特殊用途的Windows DLL,有很多限制。其中一个限制是运营环境或OE。 OE包括操作系统版本和服务包级别。

对于FIPS DLL,这里是批准的OE:

  • 5.0.4 - Windows 2000 Professional操作系统,Service Pack 1
  • 5.2.3 - Windows 2000 Professional操作系统,Service Pack 1
  • 5.3.0 - 带有SP2的Windows XP Professional和带有SP1的Windows Server 2003 X64

如果操作系统错误或Service Pack级别错误,则可能导致自检失败。它可能导致失败的原因之一是因为DLL从C ++运行时定位某些特定的内存函数。如果找不到它们,则抛出异常。

有一个不太明显的依赖,这是Visual Studio的版本。已验证的库的最后一个版本是5.3,对于它,您需要Visual Studio 2005。

通常你现在要做的就是建立一个具有特定操作系统,服务包级别和Visual Studio的构建/测试机器,然后构建并测试它。然后,当您在生产中安装Crypto ++和您的程序时,使用compatibility tab来提供运行时OE。

  

当我将define更改为1时,我从中获取DLL的项目不进行编译。我做错了什么?

如果您需要或需要更具体的答案,那么您需要提供更多信息,例如您的Windows版本,您的Visual Studio版本和调用堆栈。

我还鼓励你尽可能避免使用FIPS DLL。大多数用户没有意识到它的特殊用途,也不知道如何正确使用它。它是一种痛苦的屁股,也是一直存在的问题。

如果需要DLL,则创建一个包装DLL,用于导出要导出的符号。然后,链接到Crypto ++库的静态​​版本。