2016-09-21 3 views
1

Я использую FIPS вместе с библиотеками OpenSSL. Когда я не хочу FIPS, производительность системы ухудшается из-за самопроверки FIPS. Из-за проблем с производительностью, я хочу иметь следующее решение: -Как динамически использовать библиотеки FIPS и non-FIPS openssl на основе флагов?

  1. Либа -> OpenSSL + FIPS
  2. LibB -> OpenSLL только

Когда я включаю FIPS, это касается файла в/tmp directory & перезагружает систему. Теперь, основываясь на наличии файла, я хочу либо загрузить LibA, либо LibB. Здесь LibA & LibB - это библиотеки openssl с FIPS или без.

Is возможно это сделать? Если да, то как? Есть ли еще лучшее решение?

Примечание: - Платформа LINUX.

ответ

1

Я хочу иметь следующее решение:

  • Либа -> OpenSSL + FIPS
  • LibB -> OpenSLL только

Чтобы включить или отключить FIPS, вы звоните FIPS_mode_set , FIPS_mode_set(1) должен включить режим, если библиотека поддерживает FIPS, а FIPS_mode_set(0) отключает алгоритмы FIPS.

Я думаю, что в вашем желаемом использовании, когда загружается libA, он проверяет файл temp и только вызывает FIPS_mode_set(1), если файл присутствует.

Если вы скомпилируете и связываетесь с FIPS-совместимыми и FIPS-неспособными, то вам следует защищать код с помощью OPENSSL_FIPS.

Так что, может быть что-то вроде:

#ifdef OPENSSL_FIPS 

int mode, ret = 0; unsigned long err = 0; 
mode = FIPS_mode(); 

if (temp_file_exsts && mode == 0) 
{  
    ret = FIPS_mode_set(1 /*on*/); 
    err = ERR_get_error(); 
} 
else if (temp_file_exsts && mode != 0)) 
{ 
    ret = FIPS_mode_set(0 /*off*/); 
    err = ERR_get_error(); 
} 
else 
{ 
    printf("Who knows..."); 
} 

if(ret != 1) 
{ 
    printf("FIPS_mode_set failed: %lx.", err);  
} 
#endif 

Как динамически использовать FIPS и не-FIPS

Вы используете dlopen и друзей. Вам нужно будет выполнить некоторые трюки, чтобы гарантировать, что libA всегда загружает/использует ссылки до libB. Изучите это и задайте новый вопрос, если у вас есть проблемы.


это касается файла в каталоге/TMP & перезагружает систему

научно-исследовательский, как написать временный файл и как программно перезагрузить систему. Задайте новый вопрос, если у вас есть проблемы.

+0

Я могу достичь 1-й и последней части. Я был заблокирован во время использования библиотек FIPS и non-FIPS на основе флагов. позвольте мне попробовать ваше предложение. Благодарю. – 0x07FC