CryptoPP::selfTestFailure при использовании проверенной библиотеки FIPS и AES

У меня есть сервер. Я хочу добавить к нему шифрование AES. Я пробовал использовать Crypto++, после долгих поисков он скомпилировался, но он всегда выдает исключения, исходящие от «CryptoPP::selfTestFailure». Я где-то читал, что в файле fips140.cpp есть что-то с этим определением:

// Define this to 1 to turn on FIPS 140-2 compliance features, including additional tests during 
// startup, random number generation, and key generation. These tests may affect performance.
#ifndef CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2
#define CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 0
endif

но когда я изменяю определение на 1, проект, из которого я взял DLL, не компилируется. что я сделал не так? / есть ли другой способ имплантации алгоритма AES?


person etamar211    schedule 24.04.2016    source источник
comment
Вы можете попробовать Botan, если CryptoPP доставляет вам кучу проблем   -  person ForceBru    schedule 24.04.2016
comment
@SamVarshavchik Windows 10, Visual Studio 2013   -  person etamar211    schedule 24.04.2016
comment
Я хочу добавить к нему шифрование AES. звучит как плохой подход к безопасности. Почему бы не использовать существующий протокол, такой как TLS или аналогичный?   -  person milleniumbug    schedule 24.04.2016
comment
@ForceBru Хороший звонок. Подумайте о том, чтобы заняться ботаникой. Вы всегда можете посетить Lounge‹Botany++›, где стекается суб-сообщество.   -  person sehe    schedule 24.04.2016
comment
Вы также можете попробовать библиотеку в этой статья проекта кода   -  person Tomer    schedule 24.04.2016
comment
Есть selfTestFailure, но вы не показываете исключение, которое содержит причину сбоя. Когда вы меняете #define и компиляция завершается неудачей, вы не показываете ошибку компилятора. Вам нужно показать детали, если вы хотите помочь.   -  person indiv    schedule 24.04.2016


Ответы (1)


... после долгих поисков он скомпилирован, но всегда выдает исключения, исходящие от "CryptoPP::selfTestFailure". Я где-то читал, что в файле fips140.cpp есть что-то с этим определением:

FIPS DLL — это библиотека Windows специального назначения со значительными ограничениями. Одним из ограничений является операционная среда или OE. OE включает версии ОС и уровни пакетов обновления.

Для FIPS DLL утверждены следующие OE:

  • 5.0.4 — Операционная система Windows 2000 Professional, пакет обновления 1
  • 5.2.3 - Операционная система Windows 2000 Professional, пакет обновления 1
  • 5.3.0 — Windows XP Professional с пакетом обновления 2 (SP2) и Windows Server 2003 X64 с пакетом обновления 1 (SP1)

Если ОС неверна или неправильный уровень пакета обновлений, это может привести к сбою самопроверки. Одна из причин, по которой это может привести к сбою, заключается в том, что DLL находит определенные функции памяти в среде выполнения C++. Если он их не находит, он генерирует исключение.

Есть не столь очевидная зависимость, и это версия Visual Studio. Последняя проверенная версия библиотеки — 5.3, для нее нужна Visual Studio 2005.

Обычно сейчас вам нужно настроить машину для сборки/тестирования с определенной ОС, уровнем пакета услуг и Visual Studio, а затем выполнить сборку и тестирование на ней. Затем, когда вы устанавливаете Crypto++ и свою программу в рабочей среде, вы используете вкладка совместимости, чтобы предоставить OE во время выполнения.


когда я изменяю определение на 1, проект, из которого я взял DLL, не компилируется. что я сделал не так?

Если вам нужны более конкретные ответы, вам необходимо предоставить дополнительную информацию, например, версию Windows, версию Visual Studio и стек вызовов.


Я бы также посоветовал вам по возможности избегать FIPS DLL. Большинство пользователей не осознают его специального назначения и не знают, как им правильно пользоваться. С ним тяжело работать, и это постоянный источник проблем.

Если вам нужна DLL, создайте DLL-оболочку, которая экспортирует символы, которые вы хотите экспортировать. Затем создайте ссылку на статическую версию библиотеки Crypto++.

person jww    schedule 24.04.2016
comment
Знаете ли вы другой способ использования AES в C++ без FIPS DLL? - person etamar211; 25.04.2016