Interested Article - Crypto++

Crypto++ (также известная как CryptoPP , libcrypto++ и libcryptopp ) — это бесплатная библиотека C++ с открытым исходным кодом криптографических алгоритмов и схем, написанная китайским компьютерным инженером Вэй Даем . Будучи выпущенной в 1995, библиотека полностью поддерживает 32-разрядные и 64-разрядные архитектуры для многих главных операционных систем и платформ, таких как Android (с использованием ), 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 года в качестве интернет-проекта в , были добавлены в Crypto++ 5.6.0 в этом же месяце .

Crypto++ алгоритмы и их реализации
Примитив или операция Алгоритмы или реализации
Генераторы псевдослучайных чисел LCG , , Blum Blum Shub , , Вихрь Мерсенна , RDRAND и RDSEED
Быстрые потоковые шифры ChaCha8/12/20 , HC-128 и HC-256 , Panama , Rabbit , Salsa20 , SOSEMANUK , XSalsa20
AES and AES candidates Rijndael ( ), RC6 , MARS , Twofish , Serpent , CAST-256
Другие блочные шифры ARIA , Blowfish , Camellia , , HIGHT, IDEA , Kalyna (128/256/512), , 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 , , Two-Track-MAC
Криптографическая хеш-функция BLAKE2 (BLAKE2b и BLAKE2s), Keccak , SHA-1 , SHA-2 (SHA-224, SHA-256, SHA-384, и SHA-512), SHA-3 , Tiger , Whirlpool , RIPEMD ( 128 , 160 , 256 , и 320 )
Паролезависимый KDF и PBKDF2 от PKCS #5 , PBKDF от PKCS #12 appendix B
Криптография с открытым ключом RSA , DSA , ElGamal , Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC , LUCELG , (варианты ), ESIGN , curve25519
Схемы заполнения для систем с открытым ключом PKCS #1 v2.0, OAEP , PSS , , IEEE P1363 и
Криптография эллиптических кривых ECDSA , , ECIES , ECDH , ECMQV

Библиотека также делает доступными примитивы для теоретико-числовых операций, таких как генерация и проверка простых чисел, арифметика над конечным полем, включая GF(p) и GF(2 n ); операции над полиномами .

Управление криптографическими ключами

В терминологии FIPS 140-2 библиотека Crypto++ классифицируется как многочиповый автономный модуль. 32-битная и 64-битная версии библиотеки соответствуют всем требованиям физической безопасности и операционных систем FIPS 140-2 уровня 1. Библиотека Crypto++ содержит только утвержденные криптографические алгоритмы. Неутвержденные алгоритмы, реализованные в продукте Crypto++, не включены в проверенный пакет DLL FIPS .

Все ключи в модуле могут быть либо импортированы в сам модуль, либо сгенерированы изнутри с использованием генератора случайных чисел ( ГПСЧ ). Сам модуль хранит эти ключи только в оперативной памяти и не сохраняет их в постоянной памяти .

Генерация ключей

Модуль генерирует ключи в соответствии с требованиями FIPS , используя утвержденный генератор случайных чисел , в следующем порядке:

  • Ключи DSA генерируются в соответствии с процедурами, описанными в .
  • Ключи ECDSA генерируются в соответствии с процедурами, описанными в ANSI X9.62 .
  • Для ключей RSA утвержденный RNG используется для генерирования простых случайных чисел p и q.
  • Остальные ключи ( AES , Triple-DES , CBC-MAC / Triple-DES, Skipjack , HMAC-SHA) генерируются с использованием утвержденного генератора случайных чисел (путем генерации случайной строки октетов подходящего размера).

Обмен ключами

позволяет использовать следующие методы обмена ключами: RSA Key Transport и протокол Диффи-Хеллмана .

Crypto++ не накладывает каких-либо ограничений на длину ключей RSA и DH, выбирается их адекватная длина для защиты симметричных ключей во время обмена.

Кроме того, CMVP предъявила следующие минимальные требования к размеру ключа:

Хранение ключей

Модуль не хранит и не архивирует ключи на постоянных носителях .

Производительность

В 2007 году во время исследования была проанализирована работа восьми криптографических библиотек, Ашраф Абушарех и Крис Кай обнаружили, что "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.0 15 марта 2009
Crypto++ 5.6.1 9 августа 2010
Crypto++ 5.6.2 20 февраля 2013
Crypto++ 5.6.3 20 ноября 2015
Crypto++ 5.6.4 11 сентября 2016
Crypto++ 5.6.5 11 октября 2016
Crypto++ 6.0.0 22 января 2018
Crypto++ 6.1.0 22 февраля 2018
Crypto++ 7.0.0 8 апреля 2018
Crypto++ 8.0.0 28 декабря 2018
Crypto++ 8.1.0 11 февраля 2019
Crypto++ 8.2.0 28 апреля 2019

Список всех предыдущих выпусков от Тео Лоуренса Crypto++, начиная с 1995 года, можно найти в групповом архиве пользователей .

Ратификации FIPS

Crypto++ получила три сертификата 1 уровня от FIPS 140-2 .

Crypto++ модули, ратифицированные FIPS
Версия Сертификат Даты
Crypto++ 5.0.4 Certificate 343 2003-09-05, 2005-10-28
Crypto++ 5.2.3 Certificate 562 2005-07-29, 2005-08-24, 2005-10-28
Crypto++ 5.3.0 Certificate 819 2007-08-13, 2007-08-17

Crypto++ была добавлена в от CMVP в 2016.

Лицензия

Начиная с версии 5.6.1, Crypto++ состоит только из общедоступных файлов и единой лицензии с открытым исходным кодом для авторских прав на компиляцию .

The License of Crypto++ is somewhat unusual amongst open source projects. A distinction is made between the library as a (i.e., collection), which is copyrighted by Wei Dai, and the individual files in it, which are public domain . The library is copyrighted as a compilation in order to place certain disclaimers (regarding warranty, export, and patents) in the license and to keep the attributions and public domain declarations intact when Crypto++ is distributed in source code form. The fact that individual files are public domain means that legally you can place code segments, entire files, or small sets of files (up to the limit set by fair use) into your own project and do anything you want with them without worrying about the copyright.
30px

См. также

Примечания

  1. J. Kelsey, B. Schneier, D. Wagner, C. Hall. // Fast Software Encryption, 5th International Proceedings. — 1998. — С. 8 . 30 декабря 2014 года.
  2. Yinglian Xie David O’Hallaron Michael K. Reiter. // 2006 22nd Annual Computer Security Applications Conference (ACSAC'06) : Conference. — Miami Beach, FL, USA, 2006. — С. 17 . — ISBN 0-7695-2716-7 . — ISSN . — doi : . 17 июня 2019 года.
  3. Ashraf Abusharekh Kris Gaj. P.10,11,15,29. Department of Electrical & Computer Engineering George Mason University (2007). Дата обращения: 24 декабря 2019. Архивировано из 24 декабря 2019 года.
  4. Jeffrey Walton. P.4,5,7 (2017). Дата обращения: 24 декабря 2019. 24 декабря 2019 года.
  5. Arsi Hartikainen. P. 16. Lappeenranta University of Technology (2005). Дата обращения: 4 февраля 2020. 4 февраля 2020 года.
  6. . PHYS.ORG . 2005-07-20. из оригинала 19 декабря 2019 . Дата обращения: 5 февраля 2020 .
  7. M. Lochter. (англ.) // IETF : RFC. — 2010. — P. 4 . — ISSN . 15 февраля 2020 года.
  8. . Crypto++ Website . Дата обращения: 8 августа 2010. 24 февраля 2021 года.
  9. Wei Dai. . Crypto++ P. 2,9,10. NIST (7 августа 2007). Дата обращения: 1 февраля 2020. 19 декабря 2019 года.
  10. Timo Bingmann. // Panthema.net. — 2008. — С. 1 . 22 января 2020 года.
  11. . Crypto++ Website (2009). Дата обращения: 10 августа 2010. 15 октября 2008 года.
  12. Crypto++ user group (2010). Дата обращения: 11 августа 2010. 9 ноября 2012 года.
  13. . Crypto++ Website (2002). Дата обращения: 10 августа 2010. 19 сентября 2010 года.
  14. Announcement. . Crypto++ Mailing List . Дата обращения: 9 августа 2010. 9 ноября 2012 года.
  15. Announcement. . Crypto++ Mailing List (2002). Дата обращения: 9 августа 2010. 9 ноября 2012 года.
  16. . Sourceforge.net. Дата обращения: 14 августа 2010. 23 июня 2011 года.
  17. L. Teo. . Crypto++ Mailing List (2002). Дата обращения: 9 августа 2010. 9 ноября 2012 года.
  18. . Crypto++ Website . Дата обращения: 15 августа 2010. 26 июля 2010 года.

Ссылки

  • — официальный сайт Crypto++

Литература

  • Wei Dai. Security Policy. — NIST, 2007. — С. 2,9–10. — 22 с.


Источник —

Same as Crypto++