У меня есть OpenSSL, предоставленные двоичные файлы от третьего лица (libeay32.dll
и ssleay32.dll
). Мне нужно проверить и проверить, используют ли предоставленные библиотеки времени выполнения криптографические алгоритмы, придерживающиеся FIPS 140-2. Есть ли способ проверить это?Как проверить, используются ли библиотеки openssl с проверенной криптографией FIPS
ответ
Есть ли способ проверить это?
Да, существует несколько способов. Проще всего запустить 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
. Обязательно запустите Developer Prompt (а не обычную командную строку), чтобы инструменты, такие как 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 должен ПРОВЕРЯЕМЫЕ модуль 14 Мар 2012»
- «FIPS 2.0.1 ПРОВЕРЯЕМЫЕ тестовый модуль 12 июн 2012»
- и т.д.
- Известные Ответ Тесты
- Двоичные данные строки в разделе RO исполняемого файла
- Проверьте * .c файлы для статических значений
- Различных подкаталогов ОПЗА КЦРА, жел, ..., ECDSA, DSA ...
- SELFTEST файлов: aes_selftest.c, dsa_selftes.с, ...
Вот пример бинарной строки, которая будет присутствовать в 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 вики. Его называют Building Applications using OpenSSL Validated Cryptography: Notes from the Field for Developers and Auditors. Вы хотите просмотреть материал, начиная со Слайда 18.
Я построил слайд-колоду для OWASP, но не было никакого интереса к ее получению. Я знаю, что Stack Overflow хмурится ссылками, подобными той, что есть в вики OpenSSL, но я не знаю, как предоставить здесь более 35 слайдов.
Большое спасибо JWW. Я использовал 'dumpbin/ALL libeay32.dll', чтобы получить информацию о libeay32.dll. Как вам предложили, я проверил символы пользовательского пространства и внутренние символы. Но я мог найти только символы пользовательского пространства, а не все внутренние символы. Также упомянутые строки отсутствуют в ssl runtime libeay32.dll. –
7E1EFCE0: 66 69 70 73 20 6D 6F 64 65 20 61 6C 72 65 61 64 fips mode alread 7E1EFCF0: 79 20 73 65 74 00 00 00 66 69 6E 67 65 72 70 72 y установлено ... 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 73 ch сегментный псевдоним 7E1EFD20: 69 6E 67 00 66 69 6E 67 65 72 70 72 69 6E 74 20 ing.fingerprint –
так частично проверен. Означает ли это, что время выполнения ssl использует криптографию? –