Разработчик(и) | Легион надувного замка Inc. | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Стабильный релиз(ы) [±] | |||||||||||
| |||||||||||
Репозиторий | github.com/bcgit/ | ||||||||||
Написано в | C# и Java | ||||||||||
Платформа | .NET Framework и Java SE | ||||||||||
Тип | API криптографии | ||||||||||
Лицензия | Лицензия Массачусетского технологического института [6] | ||||||||||
Веб-сайт | bouncycastle.org |
Bouncy Castle — это набор API, используемых для внедрения криптографии в компьютерные программы. Он включает API для языков программирования Java и C# . API поддерживаются зарегистрированной австралийской благотворительной организацией : Legion of the Bouncy Castle Inc.
Bouncy Castle имеет австралийское происхождение, поэтому американские ограничения на экспорт криптографии из США на него не распространяются.
Bouncy Castle появился, когда двое коллег устали от необходимости заново изобретать набор криптографических библиотек каждый раз, когда они меняли работу, работая в серверной Java SE . Один из разработчиков был активным разработчиком Java ME (в то время J2ME) в качестве хобби, и проектное соображение должно было включить в библиотеку как можно больше Java VM, включая те, что на J2ME. Это проектное соображение привело к архитектуре, которая существует в Bouncy Castle. [7]
Проект, основанный в мае 2000 года, изначально был написан только на Java, но в 2004 году был добавлен API C#. Оригинальный API Java состоял примерно из 27 000 строк кода, включая тестовый код, и обеспечивал поддержку J2ME, поставщика JCE / JCA и базовой генерации сертификатов X.509 . Для сравнения, выпуск 1.53 состоит из 390 640 строк кода, включая тестовый код. Он поддерживает ту же функциональность, что и исходный выпуск, с большим количеством алгоритмов, а также PKCS #10, PKCS#12, CMS, S/MIME , OpenPGP , DTLS , TLS , OCSP , TSP , CMP , CRMF, DVCS, DANE , EST и сертификаты атрибутов. API C# состоит примерно из 145 000 строк кода и поддерживает большую часть того, что делает API Java.
Некоторые ключевые особенности проекта:
18 октября 2013 года в штате Виктория, Австралия, основными разработчиками и другими лицами была создана некоммерческая ассоциация Legion of the Bouncy Castle Inc., которая взяла на себя ответственность за проект и поддерживала текущую разработку API. Ассоциация была признана австралийской благотворительной организацией с целью продвижения в образовании и целью, которая приносит пользу обществу, Австралийской комиссией по благотворительным и некоммерческим организациям 7 ноября 2013 года. [8] Ассоциация была уполномочена собирать средства для поддержки своих целей 29 ноября 2013 года Управлением по делам потребителей Виктории .
Архитектура Bouncy Castle состоит из двух основных компонентов, которые поддерживают базовые криптографические возможности. Они известны как «легкий» API и поставщик Java Cryptography Extension (JCE). Дополнительные компоненты, построенные на поставщике JCE, поддерживают дополнительные функции, такие как поддержка PGP , S/MIME и т. д.
Низкоуровневый или «легковесный» API — это набор API, реализующих все базовые криптографические алгоритмы. API были разработаны так, чтобы быть достаточно простыми для использования при необходимости, но предоставляли основные строительные блоки для поставщика JCE. Цель состоит в том, чтобы использовать низкоуровневый API в устройствах с ограниченной памятью (JavaME) или когда простой доступ к библиотекам JCE невозможен (например, распространение в апплете ) . Поскольку легковесный API — это всего лишь код Java, виртуальная машина Java (JVM) не накладывает никаких ограничений на работу кода, и на ранних этапах истории Bouncy Castle это был единственный способ разработать надежную криптографию, не искалеченную файлами политики юрисдикции, которые не позволяли поставщикам JCE выполнять «надежное» шифрование.
Поставщик, совместимый с JCE, построен на низкоуровневых API. Исходный код поставщика JCE является примером того, как реализовать многие «распространенные» проблемы криптографии с использованием низкоуровневого API. Многие проекты были созданы с использованием поставщика JCE, включая Open Source Certificate Authority EJBCA .
Выпуски C# и Java также имеют потоки, сертифицированные по стандарту FIPS 140-2 уровня 1. Они отличаются от обычных выпусков тем, что, хотя модули разработаны аналогично обычным выпускам, низкоуровневые API совершенно другие — в основном для поддержки обеспечения контроля, требуемого FIPS при использовании алгоритма. В случае уровня JCE API Java поставщик по-прежнему в значительной степени является заменой обычного выпуска. Первые выпуски, сертифицированные по стандарту FIPS, были доступны в ноябре 2016 года, причем последней версии Java был присвоен номер сертификации 4616, а последней версии C# — номер сертификации 4416.
Операционная система Android , по состоянию на начало 2014 года, включает в себя настроенную версию Bouncy Castle. [9] Из-за конфликтов имен классов это не позволяет приложениям Android включать и использовать официальную версию Bouncy Castle как есть. Сторонний проект Spongy Castle распространяет переименованную версию библиотеки, чтобы обойти эту проблему. [10]
Первоначально предполагалось, что можно также сделать версию Spongy Castle FIPS 140-2 . Оказалось, что из-за обработки файлов DEX в Android для целей FIPS поставщик должен быть установлен на устройстве отдельно от приложения. Выпуск FIPS 140-2 для Android теперь называется Stripy Castle и упакован в org.stripycastle . Это было необходимо для того, чтобы избежать конфликтов с версией Bouncy Castle для Android, а также конфликтов для приложений, которые могут использовать Spongy Castle и не требовать сертифицированных служб FIPS 140-2.