【问题标题】:How to check if the openssl libraries are using the FIPS validated crytpography如何检查 openssl 库是否使用 FIPS 验证的密码
【发布时间】:2016-03-29 19:43:55
【问题描述】:

我已打开 OpenSSL 提供的第三方二进制文件(libeay32.dll 和 ssleay32.dll)。我需要检查并验证那些提供的运行时库是否使用符合 FIPS 140-2 的加密算法。有没有办法检查这个?

【问题讨论】:

    标签: windows openssl fips


    【解决方案1】:

    有什么方法可以检查吗?

    是的,有很多方法。最简单的方法是从命令行运行openssl version。如果它的 FIPS 验证加密,那么它会这样说:

    > openssl version
    Version: OpenSSL 1.0.1f-fips 6 Jan 2014
    

    在 Linux 上这样做的一个相关问题是How to check FIPS 140-2 support in OpenSSL?。 Windows 有很大的不同,所以这个问题应该保持开放。

    虽然前一个问题是 Linux,但您可以在 Windows 上使用dumpbin、find 和strings 执行相同的操作。确保打开开发人员提示(而不是常规命令提示)以确保诸如 dumpbin 之类的工具在路径上。

    以下是您可以检查的一些内容(来自下面讨论的幻灯片):

    • 存在预期的用户空间符号
      • FIPS_mode_set()、FIPS_module_mode_set()、FIPS_mode()、FIPS_module_mode()
    • 存在预期的内部符号
      • FIPS_text_start()、FIPS_text_end()、FIPS_rodata_start[]、FIPS_rodata_end[]、FIPS_signature[20];
    • FIPS_set_mode(1) 被调用并且没有失败
      • ERR_get_error 返回 0x0f06d065
      • CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 返回 FTW!
    • 使用字符串
      • “FIPS 2.0 验证模块 2012 年 3 月 14 日”
      • “FIPS 2.0.1 验证测试模块 2012 年 6 月 12 日”
      • 等
    • 已知答案测试
      • 可执行文件 RO 部分中的二进制字符串数据
      • 检查 *.c 文件的静态值
      • 各种子目录:aes, cmac, des, ..., ecdsa, dsa, ...
      • 自测文件:aes_selftest.c、dsa_selftes.c、……

    这是一个二进制字符串的示例,该示例将来自fips/rand/fips_drbg_selftest.h:

    0x2e,0xbf,0x98,0xf9,0x85,0x27,0x8b,0xff,
    0x36,0xb9,0x40,0x0b,0xc0,0xa1,0xa0,0x13,
    0x20,0x06,0xcc,0xe6,0x2a,0x03,0x77,0x7d,
    0xee,0xde,0xcc,0x34,0xe3,0xcd,0x77,0xea,
    0xd0,0x3e,0xbe,0xdd,0xf6,0x15,0xfb,0xa7,
    0xd7,0x8e,0xd0,0x2e,0x2f,0x82,0x4c,0xc7,
    0x87,0xb1,0x6f,0xc5,0xf8,0x5c,0x78,0xde,
    0x77,0x9b,0x15,0x9a,0xb9,0x3c,0x38,0x38
    

    我还向 OpenSSL wiki 上传了关于该主题的幻灯片。它称为Building Applications using OpenSSL Validated Cryptography: Notes from the Field for Developers and Auditors。您需要从幻灯片 18 开始查看材料。

    我为OWASP 制作了幻灯片,但没有兴趣接收它。我知道 Stack Overflow 不喜欢 OpenSSL wiki 上的链接,但我不知道如何在这里提供 35+ 幻灯片。

    【讨论】:

    • 非常感谢 JWW。我使用“dumpbin /ALL libeay32.dll”来获取有关 libeay32.dll 的信息。按照您的建议,我检查了用户空间符号和内部符号。但我只能找到用户空间符号,而不是其中的所有内部符号。 ssl 运行时 libeay32.dll 中也没有提到的字符串。
    • 7E1EFCE0: 66 69 70 73 20 6D 6F 64 65 20 61 6C 72 65 61 64 fips 模式已设置 7E1EFCF0: 79 20 73 65 74 00 00 00 66 69 6E 67 65 72 ..fingerpr7E1EFD00: 69 6E 74 20 64 6F 65 73 20 6E 6F 74 20 6D 61 74 int 不匹配 7E1EFD10: 63 68 20 73 65 67 6D 65 6E 74 20 61 6C 69 61 20: E 6 段 EF 6 716 7D 别名00 66 69 6E 67 65 72 70 72 69 6E 74 20 ing.fingerprint
    • 如此部分验证。这是否意味着 ssl 运行时正在使用所需的加密技术?
    • @SanjayPhanshikar - 经验证的密码学由libcrypto 提供(我不确定在 Windows 上叫什么)。 libssl 使用 libcrypto,所以它只依赖于 libcrypto(同样,我不确定在 Windows 上调用的是什么)。由于某些 SSL 功能受 FIPS 的影响,因此存在一些放弃。但它确实减少到libcrypto。
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2013-09-08
    • 2017-01-29
    • 2020-10-10
    • 2011-06-08
    相关资源
    最近更新 更多