FIPS_mode_set (код) не найден в OpenSSL пакете
Вы должны знать, как спросить ...
openssl-1.0.1f$ grep -R FIPS_mode_set *
apps/openssl.c: if (!FIPS_mode_set(1)) {
CHANGES: *) Functions FIPS_mode_set() and FIPS_mode() which call the underlying
crypto/cpt_err.c:{ERR_FUNC(CRYPTO_F_FIPS_MODE_SET), "FIPS_mode_set"},
crypto/evp/evp_cnf.c: if (!FIPS_mode() && !FIPS_mode_set(1))
crypto/crypto.h:int FIPS_mode_set(int r);
crypto/o_fips.c:int FIPS_mode_set(int r)
Binary file fips_premain_dso matches
ssl/ssltest.c: if(!FIPS_mode_set(1))
util/libeay.num:FIPS_mode_set 3253 EXIST::FUNCTION:
openssl-1.0.1f$
Декларация в crypto/crypto.h
и определение в crypto/o_fips.c
. Вот от o_fips.c
:
int FIPS_mode_set(int r)
{
OPENSSL_init();
#ifdef OPENSSL_FIPS
#ifndef FIPS_AUTH_USER_PASS
#define FIPS_AUTH_USER_PASS "Default FIPS Crypto User Password"
#endif
if (!FIPS_module_mode_set(r, FIPS_AUTH_USER_PASS))
return 0;
if (r)
RAND_set_rand_method(FIPS_rand_get_method());
else
RAND_set_rand_method(NULL);
return 1;
#else
if (r == 0)
return 1;
CRYPTOerr(CRYPTO_F_FIPS_MODE_SET, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED);
return 0;
#endif
}
Если вы искали FIPS_mode_set
войти в «режим FIPS» со специальной установкой или переключить некоторые алгоритмы, что не происходит на этом этапе.
Это случается раньше при связывании. Что происходит под капотом: fipsld
- это компилятор, и он ищет вызов LD
. Если LD
is не вызывается, то fipsld
просто вызывает ваш обычный компилятор (возможно, /usr/bin/gcc
). Если он видит вызов LD
, то он делает три вещи.
Во-первых, он составляет fips_premin.c
. Затем он вызывает реальный ld
, чтобы выполнить финальную ссылку со всем вашим объектным файлом и созданным fips_premain.o
. Наконец, он вызывает incore
для обмена в модуле объектов FIPS, вычисляет подпись по соответствующим text
и data
(релевантно означает код и данные FIPS), а затем вставляет подпись в исполняемый файл.
Подпись генерируется с помощью HMAC, а ключ встроен в исполняемый файл. В этом нет ничего особенного, и он будет постоянным во всех исполняемых файлах по всему миру. Вот использованный ключ: etaonrishdlcupfm
.
Если вы не предпринимаете специальных шагов при создании своего исполняемого файла, то, вероятно, вам не хватает некоторых шагов. Вот шаги, чтобы использовать fipsld
и incore
:
$ export CC=`find /usr/local -name fipsld`
$ echo $CC
/usr/local/ssl/fips-2.0/bin/fipsld
$ export FIPSLD_CC=`find /usr/bin -name gcc`
$ echo $FIPSLD_CC
/usr/bin/gcc
Теперь, сделайте стандартный config
и make
. Иногда вам нужно сделать config
, затем отрегулируйте CC
и FIPSLD_CC
, а затем запустите make
, потому что некоторые config
файлов затвора на устройстве. Иногда вам необходимо открыть Makefile
после config
и сменить CC
на /usr/local/ssl/fips-2.0/bin/fipsld
. Существует множество способов сделать это, пытаясь обойти определенную упаковку.
Я скачал OpenSSL-ФИПС-2.0.1 коды из OpenSSL, однако, я не был в состоянии проследить на определение FIPS_mode_set()
openssl-fips-NNN
обеспечивает FIPS валидацию криптография если вы создаете модуль объектов FIPS в соответствии с политикой безопасности. Вы можете найти OpenSSL FIPS 1402- Security Policy at here.
Если все, что вы сделали, было загружено и построено openssl-fips-NNN
, то вы, вероятно, не используете криптографию с проверкой FIPS. Существует процедура, которой следует следовать, и включает в себя получение «доверенной» копии исходного кода. Вы можете загружать и проверять подпись, но вам нужна проверка подлинности подписи FIPS, которая создает проблему с курицей и яйцом, потому что вы не можете ее создать из источников. Поэтому практическое решение - заказать компакт-диск из OpenSSL Foundation. Это странно, но это правда. См., Например, OpenSSL FIPS User Guide или OpenSSL FIPS Security Policy, Приложение B, Отпечаток пальца с контролируемым распределенным файлом.
После того, как вы создали и установили модуль объекта FIPS, вы можете создать версию библиотеки FIPS Capable. FIPS Capable OpenSSL будет использовать модуль объектов FIPS, если он доступен. Подумайте об этом как о «подключаемой» архитектуре.
FIPS Capable версия библиотеки - это просто openssl-NNN
, например openssl-1.0.1e
и openssl-1.0.1f
. Это то, что вы знаете и любите.
Вы также могли бы рассмотреть что-то вроде ctags
как исходный код браузера, чтобы помочь вам найти вещи и прыгать вокруг. См. Exuberant Ctags на Sourceforge.
Привет, нолоадер, я хотел, чтобы этот ответ наступил раньше. Я бы дал тебе щедрость. Я помечаю ваши комментарии +1 для вас. Кстати, как вы устанавливаете ключ hmac. В настоящее время он жестко закодирован. Где мы можем хранить ключ и как его читать во время выполнения? –
«как вы устанавливаете ключ hmac ...» - я добавил дополнительную информацию в ответ. – jww
+1 для @noloader. Чтобы подтвердить, что мы не можем изменить ключ проверки, и нет проблемы безопасности, что он является общедоступным? –