linux – 如何检查OpenSSL中的FIPS 140-2支持?
我们有一个客户端询问OpenSSL FIPS(联邦信息处理标准)140-2兼容支持验证加密使用.如何检查OpenSSL是否有FIPS投诉是否提供FIPS验证加密?
操作系统:Redhat 5 Linux 解决方法
这取决于您想要检查的方式和时间.它还取决于应用程序. FIPS可以使用但不能使用.因此,应用程序必须通过FIPS_mode_set启用经过验证的加密,并且调用必须成功. 如果要检查FIPS Capable Library(如OpenSSL 1.0.1e)是否配置为使用FIPS对象模块,则可以: $cat /usr/local/ssl/include/openssl/opensslconf.h | grep -A 2 -i fips #ifndef OPENSSL_FIPS # define OPENSSL_FIPS #endif OPENSSL_FIPS告诉您FIPS Capable Library配置为使用FIPS对象模块.因此,可以使用FIPS验证的加密. 但是,OPENSSL_FIPS并不意味着应用程序正在使用FIPS验证的加密技术.应用程序必须调用FIPS_mode_set,该函数必须返回成功. 在运行时,您可以打印与以下内容关联的字符串(取自我专门为此使用的代码): ostringstream oss; oss << OPENSSL_VERSION_TEXT; LogVersion(oss.str().c_str()); 代码将生成类似于以下内容的日志条目: Version: OpenSSL 1.0.1f-fips 6 Jan 2014 您可以通过一些技巧来审核模块.例如,如果可执行文件是真正的FIPS,则以下将测试必须存在的某些符号. 在这种情况下,我正在测试OpenSSL FIPS Capable共享对象.如果应用程序链接到libcrypto.a,那么您可以审核程序而不是OpenSSL共享对象. $nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_* 00000000000c7f60 T ERR_load_FIPS_strings 00000000000c2250 T FIPS_add_error_data 00000000000c3900 T FIPS_add_lock 0000000000082820 T FIPS_bn_bin2bn 0000000000082980 T FIPS_bn_bn2bin 0000000000082760 T FIPS_bn_clear 0000000000082350 T FIPS_bn_clear_free 00000000000823d0 T FIPS_bn_free 0000000000087c90 T FIPS_bn_generate_prime_ex 0000000000082790 T FIPS_bn_get_word 0000000000082d20 T FIPS_bn_is_bit_set 0000000000087c80 T FIPS_bn_is_prime_ex 0000000000087750 T FIPS_bn_is_prime_fasttest_ex ... 您还有来自fips_premain.c的符号: $nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_text_* 00000000000c4520 T FIPS_text_end 000000000007b340 T FIPS_text_start $nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_rodata* 00000000001e1e20 R FIPS_rodata_end 00000000001d8ce0 R FIPS_rodata_start $nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_signature* 00000000004696c0 B FIPS_signature $nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_incore* 000000000007b5a0 T FIPS_incore_fingerprint 现在,这真是鬼鬼祟祟.您可以检查模块是否包含自检.例如,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,0x34,0xe3,0xcd,0xea,0xd0,0x3e,0xbe,0xdd,0xf6,0x15,0xfb,0xa7,0xd7,0x8e,0x2e,0x2f,0x82,0x4c,0xc7,0x87,0xb1,0x6f,0xc5,0xf8,0x5c,0x78,0x9b,0x9a,0x3c,0x38 您可以通过转储符号FIPS_signature的20个字节来验证开发人员在其可执行文件上运行incore或macho_incore以嵌入FIPS指纹.如果它的20个字节为0(默认来自fips_premain.c),则指纹未嵌入,FIPS_mode_set将失败.因此,在这种情况下,不可能使用FIPS验证的加密. 更新:我上传了一个关于主题的幻灯片到OpenSSL wiki.它被称为Building Applications using OpenSSL Validated Cryptography: Notes from the Field for Developers and Auditors.您将需要查看从幻灯片18开始的材料. 我为OWASP建造了滑梯,但没有兴趣接收它.我知道Stack Overflow对OpenSSL wiki上的链接皱眉,但我不知道如何在这里提供35个幻灯片. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |