Crypto++ (также известная как CryptoPP, libcrypto++ и libcryptopp) — это бесплатная библиотека C++ с открытым исходным кодом криптографических алгоритмов и схем, написанная китайским компьютерным инженером Вэй Даем. Будучи выпущенной в 1995, библиотека полностью поддерживает 32-разрядные и 64-разрядные архитектуры для многих главных операционных систем и платформ, таких как Android (с использованием STLport), Apple (Mac OS X и iOS), BSD, Cygwin, IBM AIX и S/390, Linux, MinGW, Solaris, Windows, Windows Phone и Windows RT. Проект также поддерживает компиляцию с использованием библиотек различных сред выполнения C++03, C++11 и C++17; и множество других компиляторов и IDE, включающих в себя Borland Turbo C++, Borland C++ Builder, Clang, CodeWarrior Pro, GCC (с использованием GCC от Apple), Intel C++ Compiler (ICC), Microsoft Visual C/C++.
Алгоритмы Crypto++ обычно предоставляет полные криптографические реализации. Например, блочный шифр Camellia, утвержденный ISO/NESSIE/IETF, практически схожий с AES, хеш-функция Whirlpool, также подтвержденная вышеуказанными организациями, схожая с SHA; оба включены в данную библиотеку.
Стоит добавить, что библиотека Crypto++ иногда делает предлагаемые и новейшие алгоритмы доступными для изучения криптографическим сообществом. Например, , универсальный хэш-базированный код аутентификации сообщений, был добавлен в ходе её представления Инженерному совету Интернета; кривые Брэйнпула, предложенные в марте 2009 года в качестве интернет-проекта в RFC 5639, были добавлены в Crypto++ 5.6.0 в этом же месяце. +Crypto++ алгоритмы и их реализацииПримитив или операцияАлгоритмы или реализацииГенераторы псевдослучайных чиселLCG, KDF2, Blum Blum Shub, ANSI X9.17, Вихрь Мерсенна, RDRAND и RDSEEDБыстрые потоковые шифрыChaCha8/12/20, HC-128 и HC-256, Panama, Rabbit, Salsa20, SOSEMANUK, XSalsa20AES and AES candidatesRijndael (AES selection), RC6, MARS, Twofish, Serpent, CAST-256Другие блочные шифрыARIA, Blowfish, Camellia, CHAM, HIGHT, IDEA, Kalyna (128/256/512), LEA, RC5,SEED, SHACAL-2, Simon и Speck (64/128), SIMECK, Skipjack, SM4, TEA, Threefish (256/512/1024), XTEAСпособы блочного шифрованияECB, CBC, CTS, CFB, OFB, CTRРежимы шифрования с проверкой подлинности, GCM, Схемы заполнения блочных шифровPKCS #5, PKCS #7, нулями, единицею и нулями, дополнение W3CКоды аутентификации сообщений, HMAC, CMAC, CBC-MAC, DMAC, Two-Track-MACКриптографическая хеш-функцияBLAKE2 (BLAKE2b и BLAKE2s), Keccak, SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, и SHA-512), SHA-3, Tiger, Whirlpool, (128, 160, 256, и 320)Паролезависимый KDFPBKDF1 и PBKDF2 от PKCS #5, PBKDF от PKCS #12 appendix BКриптография с открытым ключомRSA, DSA, ElGamal, Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC, LUCELG, DLIES (варианты DHAES), ESIGN, curve25519Схемы заполнения для систем с открытым ключомPKCS #1 v2.0, OAEP, PSS, PSSR, IEEE P1363 EMSA2 и EMSA5Криптография эллиптических кривыхECDSA, ECNR, ECIES, ECDH, ECMQV Библиотека также делает доступными примитивы для теоретико-числовых операций, таких как генерация и проверка простых чисел, арифметика над конечным полем, включая GF(p) и GF(2n); операции над полиномами.
Управление криптографическими ключами В терминологии FIPS 140-2 библиотека Crypto++ классифицируется как многочиповый автономный модуль. 32-битная и 64-битная версии библиотеки соответствуют всем требованиям физической безопасности и операционных систем FIPS 140-2 уровня 1. Библиотека Crypto++ содержит только утвержденные криптографические алгоритмы. Неутвержденные алгоритмы, реализованные в продукте Crypto++, не включены в проверенный пакет DLL FIPS.
Все ключи в модуле могут быть либо импортированы в сам модуль, либо сгенерированы изнутри с использованием генератора случайных чисел (ГПСЧ). Сам модуль хранит эти ключи только в оперативной памяти и не сохраняет их в постоянной памяти.
Генерация ключей Модуль генерирует ключи в соответствии с требованиями FIPS, используя утвержденный генератор случайных чисел, в следующем порядке:
Ключи DSA генерируются в соответствии с процедурами, описанными в FIPS 186-2. Ключи ECDSA генерируются в соответствии с процедурами, описанными в ANSI X9.62. Для ключей RSA утвержденный RNG используется для генерирования простых случайных чисел p и q. Остальные ключи (AES, Triple-DES, CBC-MAC / Triple-DES, Skipjack, HMAC-SHA) генерируются с использованием утвержденного генератора случайных чисел (путем генерации случайной строки октетов подходящего размера).
Обмен ключами CMVP позволяет использовать следующие методы обмена ключами: RSA Key Transport и протокол Диффи-Хеллмана.
Crypto++ не накладывает каких-либо ограничений на длину ключей RSA и DH, выбирается их адекватная длина для защиты симметричных ключей во время обмена.
Кроме того, CMVP предъявила следующие минимальные требования к размеру ключа:
После 19 мая 2007 года все ключи должны иметь минимум 80-битный уровень криптостойскости. После 2010 года все ключи должны иметь как минимум 112-битный уровень криптостойскости. После 2030 года все ключи должны иметь не менее 128-битного уровня криптостойскости.
Хранение ключей Модуль не хранит и не архивирует ключи на постоянных носителях.
Производительность В 2007 году во время исследования ECRYPT была проанализирована работа восьми криптографических библиотек, Ашраф Абушарех и Крис Кай обнаружили, что "Crypto++ 5.1" лидирует в плане поддержки криптографических примитивов и схем, но является самой медленной из всех исследованных библиотек.
В 2008 году тесты скорости, проведенные Тимо Бингманном с использованием семи библиотек безопасности с открытым исходным кодом для 15 блочных шифров, показали, что Crypto++ 5.5.2 была самой эффективной библиотекой для двух блочных шифров и не уступала средней производительности библиотек по остальным блочным шифрам.
Crypto++ также включает в себя функцию автоматического теста производительности, доступную из командной строки (cryptest.exe b), результаты которой можно увидеть в Crypto++ 5.6.0 Benchmarks.
Как и во многих других криптографических библиотеках, доступных для 32-разрядных и 64-разрядных архитектур x86, Crypto++ включает в себя процедуры сборки для AES с использованием AES-NI. С AES-NI производительность AES значительно улучшается: пропускная способность 128-битного AES/GCM увеличивается с приблизительно 28,0 циклов на байт до 3,5 циклов на байт.
Релизы версий Crypto++ 1.0 был выпущен в июне 1995 года. Архитектура библиотеки была изменена в версии 5.0. С марта 2009 года было выпущено десять версий с использованием архитектуры 5.0. +Релизы Crypto++, начиная с версии 5.6ВерсияДата релизаCrypto++ 5.6.015 марта 2009Crypto++ 5.6.19 августа 2010Crypto++ 5.6.220 февраля 2013Crypto++ 5.6.320 ноября 2015Crypto++ 5.6.411 сентября 2016Crypto++ 5.6.511 октября 2016Crypto++ 6.0.022 января 2018Crypto++ 6.1.022 февраля 2018Crypto++ 7.0.08 апреля 2018Crypto++ 8.0.028 декабря 2018Crypto++ 8.1.011 февраля 2019Crypto++ 8.2.028 апреля 2019 Список всех предыдущих выпусков от Тео Лоуренса Crypto++, начиная с 1995 года, можно найти в групповом архиве пользователей.
Ратификации FIPS Crypto++ получила три сертификата 1 уровня от FIPS 140-2. +Crypto++ модули, ратифицированные FIPSВерсияСертификатДатыCrypto++ 5.0.4Certificate 3432003-09-05, 2005-10-28Crypto++ 5.2.3Certificate 5622005-07-29, 2005-08-24, 2005-10-28Crypto++ 5.3.0Certificate 8192007-08-13, 2007-08-17 Crypto++ была добавлена в Historical Validation List от CMVP в 2016.
Лицензия Начиная с версии 5.6.1, Crypto++ состоит только из общедоступных файлов и единой лицензии с открытым исходным кодом для авторских прав на компиляцию.
См. также
Computer science Симметричный шифр Криптографические примитивы
Примечания
Ссылки
Crypto++ GitHub project List of projects that use Crypto++ Crypto++ users group
== Литература ==