Введение

Криптографический интерфейс программирования приложений

Bouncy Castle – это набор API, используемых в криптографии. Он включает в себя API для языков программирования Java и C#. Поддержку API осуществляет зарегистрированная австралийская благотворительная организация: Legion of the Bouncy Castle Inc.

Bouncy Castle имеет австралийское происхождение, поэтому американские ограничения на экспорт криптографии из Соединенных Штатов к нему не применяются.

Архитектура

Архитектура Bouncy Castle состоит из двух основных компонентов, поддерживающих базовые криптографические возможности. Эти компоненты известны как API "легкого веса" и провайдер расширений криптографии Java (JCE). Дополнительные компоненты, построенные на основе провайдера JCE, поддерживают расширенную функциональность, такую как поддержка PGP, S/MIME и т.д. API низкого уровня, или "легкого веса", представляет собой набор API, реализующих все базовые криптографические алгоритмы. Эти API были разработаны таким образом, чтобы быть достаточно простыми в использовании при необходимости, но при этом предоставлять основные строительные блоки для провайдера JCE. Предполагается, что API низкого уровня будет использоваться на устройствах с ограниченным объемом памяти (JavaME) или в ситуациях, когда прямой доступ к библиотекам JCE затруднен (например, при распространении в апплете). Поскольку API "легкого веса" представляет собой просто Java-код, виртуальная машина Java (JVM) не накладывает никаких ограничений на его работу. В ранние годы существования Bouncy Castle это был единственный способ разработки надежной криптографии, не ограниченной файлами политики юрисдикции, которые препятствовали провайдерам JCE выполнять "сильное" шифрование. Провайдер, совместимый с JCE, построен на основе API низкого уровня. Таким образом, исходный код провайдера JCE служит примером реализации многих распространенных криптографических задач с использованием API низкого уровня. Многие проекты были созданы с использованием провайдера JCE, в том числе орган сертификации с открытым исходным кодом EJBCA.

Сертифицированные выпуски

В версиях C# и Java также доступны потоки, сертифицированные по стандарту FIPS 140-2 уровня 1. Они отличаются от обычных версий тем, что, хотя модули разработаны схожим образом, низкоуровневые API существенно отличаются – главным образом, для обеспечения контроля, который FIPS требует при использовании алгоритмов. В случае уровня JCE API Java, провайдер в значительной степени остаётся прямой заменой для обычной версии. Первые сертифицированные версии FIPS были выпущены в ноябре 2016 года, последней версии Java присвоен номер сертификации 4616, а последней версии C# – номер сертификации 4416.

Губчатый замок

Операционная система Android, начиная с начала 2014 года, включает в себя адаптированную версию Bouncy Castle. Из-за конфликтов имён классов это не позволяет приложениям для Android включать и использовать официальную версию Bouncy Castle без изменений. Сторонний проект под названием Spongy Castle распространяет переименованную версию библиотеки для решения этой проблемы.

Полосатый замок

Первоначально предполагалось, что можно также создать версию Spongy Castle, соответствующую стандарту FIPS 140-2. Однако из-за особенностей обработки DEX-файлов в Android для соответствия требованиям FIPS, провайдер необходимо устанавливать на устройство отдельно от приложения. Выпуск FIPS 140-2 для Android теперь называется Stripy Castle и поставляется в пакете org.stripycastle. Это потребовалось, чтобы избежать конфликтов с версией Bouncy Castle, используемой в Android, а также конфликтов с приложениями, которые могут использовать Spongy Castle и не нуждаются в сервисах, сертифицированных по стандарту FIPS 140-2.