MbedTLS (прежние названия — PolarSSL и XySSL) — это реализация протоколов TLS и SSL, а также соответствующих криптографических алгоритмов и кода поддержки. MbedTLS распространяется по лицензии Apache версии 2.0. На веб-сайте заявлено, что Mbed TLS стремится быть «простым для понимания, использования, интеграции и расширения» (англ. easy to understand, use, integrate and expand).
История
Библиотека PolarSSL является официальным продолжением библиотеки XySSL, которая была создана французом, «белым хакером» Кристофом Девином (фр. Christophe Devine) и опубликована 1 ноября 2006 года под лицензиями GNU GPL v2 и BSD. В 2008 году Кристоф Девин больше не мог поддерживать XySSL и позволил Полу Баккеру (англ. Paul Bakker) создать официальный форк под названием PolarSSL[4].
В 2011 году правительство Нидерландов одобрило интеграцию OpenVPN и PolarSSL, получившую название OpenVPN-NL. Эта версия OpenVPN была одобрена для использования для защиты правительственных коммуникаций Нидерландов до уровня «ограниченный» (Restricted)[5].
С выпуском версии 1.3.10 PolarSSL был переименован в Mbed TLS, чтобы лучше показать его соответствие экосистеме Mbed[6].
В ноябре 2014 года PolarSSL была приобретена компанией ARM Holdings[7].
Начиная с версии 2.1.0, библиотека стала доступна как по лицензии GPL v2, так и по лицензии Apache v2.0[8].
В 2017 году в Mbed TLS была обнаружена ошибка в реализации обработки криптографических ключей на базе эллиптических кривых secp224k1, получившая индекс CVE-2017-2784. В версии 2.4.2 уязвимость устранена[9]
Начиная с версии 2.17, Mbed TLS лицензируется исключительно по лицензии Apache 2.0[10][11].
В 2020 году Mbed TLS присоединена к проекту TrustedFirmware[12].
Библиотека
Основная библиотека SSL написана на языке программирования C и реализует модуль SSL, основные криптографические функции и предоставляет различные служебные функции. В отличие от OpenSSL и других реализаций TLS, Mbed TLS похож на wolfSSL в том смысле, что он предназначен для небольших встраиваемых устройств, при этом минимальный полный стек TLS требует менее 60 КБ программного пространства и менее 64 КБ ОЗУ. Он также является модульным: каждый компонент, например криптографическая функция, может использоваться независимо от остальной части платформы. Также доступны версии для Microsoft Windows и Linux . Поскольку Mbed TLS написан на языке программирования C без внешних зависимостей, он работает на большинстве операционных систем и архитектур.
Начиная с версии 1.3.0, библиотека имеет уровни абстракции для распределения памяти и потоковой передачи к ядру, «чтобы поддерживать лучшую интеграцию с существующими встроенными операционными системами» (англ. to support better integration with existing embedded operating systems)[13].
Приоритеты дизайна
В библиотеке Mbed TLS уделено особое внимание читаемости кода, документации, автоматическим регрессионным тестам, слабосвязанному дизайну и переносимому коду[14].
Документация для разработчиков
Разработчикам доступна следующая документация:
- Проектирование высокого уровня[15]: высокоуровневое описание различных модулей внутри библиотеки с UML-диаграммами, вариантами использования и взаимодействиями в общих сценариях.
- Документация по API[16]: Документация, сгенерированная Doxygen из заголовочных файлов библиотеки.
- Документация исходного кода[17]: Исходный код библиотеки документирован для пояснения структур, решений и конструкций кода.
Автоматизированное тестирование
Автоматизированное тестирование Mbed TLS включает в себя:
- В исходный код включена среда тестирования, содержащая более 5000 автоматических тестов (в зависимости от количества тестов в версии библиотеки 1.3.2) для проверки регрессий и совместимости на разных платформах.
- Сценарий совместимости (compat.sh [18]), который проверяет совместимость связи SSL с OpenSSL и GnuTLS .
- Система непрерывной интеграции на базе Travis CI и Jenkins[19].
Использование
Mbed TLS используется в качестве компонента SSL в крупных проектах с открытым исходным кодом:
Платформы
Mbed TLS в настоящее время доступен для большинства операционных систем, включая Linux, Microsoft Windows, OS X, OpenWrt, Android, iOS, RISC OS[20] и FreeRTOS. Поддерживаемые наборы микросхем включают как минимум ARM, x86, PowerPC, MIPS.[источник не указан 371 день]
Алгоритмы
Mbed TLS поддерживает ряд различных криптографических алгоритмов.
- Криптографические хэш-функции:
- MD2, MD4, MD5, RIPEMD-160, SHA-1, SHA-2, SHA-3
- Режимы MAC:
- СMAC[англ.], HMAC
- Шифры:
- AES, ARIA, Blowfish, Camellia, ChaCha, DES, RC4, Triple DES, XTEA
- Режимы шифрования:
- ECB, CBC, CFB, CTR, OFB, XTS
- Аутентифицированные режимы шифрования:
- CCM[англ.], GCM, упаковка ключей[англ.] NIST, ChaCha20-Poly1305[англ.]
- Функция формирования ключа
- HKDF[англ.]
- Функция растягивания ключа[англ.]
- PBKDF2, PKCS #5 PBE2, PKCS #12 формирование ключа
- Криптография с открытым ключом
- RSA, обмен ключами Диффи-Хеллмана, Криптография на эллиптических кривых (ECC), Эллиптическая кривая Диффи–Хеллмана (ECDH), Эллиптическая кривая DSA (ECDSA), Эллиптическая кривая J-PAKE[англ.]
См. также
Примечания
Ссылки