Криптографическое расширение Java (англ. Java Cryptography Extension, сокр. JCE) — официально выпущенное стандартное расширение для платформы Java и часть Java Cryptography Architecture (JCA). Представляет собой набор пакетов, который обеспечивает фреймворк и реализацию таких криптографических задач, как шифрование и расшифрование данных, генерация и проверка на подлинность ключей управления, а также реализацию алгоритмов Message Authentication Code (MAC)[1].
Криптографическое расширение Java основано на том же, что и криптографическая архитектура Java (JCA), и рассматривается как часть JCA. Дело в том, что американские законы запрещают экспорт некоторых видов криптографического программного обеспечения (в частности, симметричное шифрование и выработку общего ключевого материала) за пределы США и Канады или разрешают экспорт с урезанными ключами. Стандартные классы JCA содержат только хеш-функции, генераторы ключей и другие функции, которые не попадают под данное ограничение и могут быть спокойно экспортированы в составе платформы Java 2. Однако стойкие алгоритмы шифрования, попадающие под экспортные ограничения на криптографию в США, должны быть получены из других источников, поэтому их поставляют в виде отдельного продукта - JCE.
Криптографическое расширение Java разработано таким образом, чтобы другие криптографические библиотеки могли быть подключены для предоставления новых алгоритмов без проблем[2].
Составляющие в JDK 1.2
правитьНа данный момент в JDK 1.2 криптографическое расширение поставляется в трех пакетах:
javax.crypto — интерфейс и классы для симметричного шифрования
javax.crypto.interfaces — интерфейсы средств выработки ключей для алгоритма Диффи-Хелмана
javax.crypto.spec — классы для управления ключами и параметрами криптографических алгоритмов
Функциональность
правитьКак и JCA, JCE не зависит от реализации конкретных алгоритмов. Благодаря SPI различные реализации от разных производителей могут быть одновременно интегрированы в среде программирования Java. Начиная с версии 1.4, Java включает в себя JCE и JCA, однако, другие реализации так же без каких-либо про��лем могут быть подключены как статически, так и динамически.
Криптографическое расширение Java предлагает следующие функциональные возможности:
- шифр — криптографические алгоритмы (симметричные и асимметричные) для шифрования, блочные и потоковые шифры
- управление ключами — классы KeyGenerator для генерации ключей, KeyAgreement для безопасного обмена ключами и SecretKeyFactory для разделения закрытого и открытого ключей
- проверка на подлинность кодов
- создание безопасных объектов и цифровых подписей
Аудитория JCE
правитьУ криптографического расширения Java есть функции безопасности, предназначенные для различных аудиторий.
Пользователи
правитьВстроенные функции безопасности JCE защищают пользователя от злонамеренных программ (включая вирусы), сохраняют конфиденциальность пользовательских файлов и информации о пользователе, проверяют подлинность личности каждог�� поставщика кода. Пользователь также может подвергнуть приложения проверке на безопасность, когда ему это необходимо.
Разработчики
правитьРазработчик может использовать методы JCE, чтобы включить функции безопасности в свои программы, в том числе криптографические службы и проверки безопасности. JCE позволяет определить и интегрировать свои собственные права доступа (контроль доступа к определенным ресурсам) и реализации криптографических служб безопасности. Кроме того, классы JCE предназначены для управления собственными приватными/частными парами ключей и сертифицирования открытых ключей от людей, которым доверяет разработчик.
Системные администраторы, разработчики и пользователи
правитьИнструменты JCE управляют хранилищем ключей (база данных ключей и сертификатов); генерируют цифровые подписи для JAR-файлов, а также проверяют подлинность таких подписей и целостность подписанного содержимого; позволяют создавать и изменять приватные файлы, которые определяют безопасность их установки.[2]
Известные реализации JCE
правитьСреди различных реализаций JCE можно выделить пакет Cryptix JCE, пакет Bouncy Castle и пакет IAIK JCE.
Cryptix JCE
правитьПакет Cryptix JCE является самым известным из бесплатных расширений. Работа над ним началась в 1995 году. Это была первая доступная криптографическая библиотека для Java. Тогда криптография не имела широкой доступности, и данный проект играл важную роль в защите информации при разработке программ на Java-платформе. Последняя версия Cryptix была выпущена 28 апреля 2005 года. В том же году поддержка Cryptix была прекращена.
Пакет Cryptix JCE включает в себя:
- шифры Blowfish, CAST5, DES, IDEA, MARS, RC2, RC4, RC6, Rijndael, Serpent, SKIPJACK, Square, TripleDES, Twofish.
- протоколы обмена ключами Диффи-Хелмана
- методы шифрования CBC, ECB, OFB
- хеш-функции — MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-0, SHA-1, Tiger
- MAC-коды — HMAC-MD2, HMAC-MD4, HMAC-MD5, HMAC-RIPEMD-128, HMAC-RIPEMD-160, HMAC-SHA-0, HMAC-SHA-1, HMAC-Tiger
- подписи — RawDSA, RSA
- асимметричные шифры — ElGamal, RSA[3]
Так же, как и Cryptix JCE, пакет Bouncy Castle является бесплатным. Первый официальный релиз Bouncy Castle появился в мае 2000 года и содержал около 27 000 строк кода. Проект постоянно рос, и к 2012 году код Bouncy Castle для Java составлял более 300 000 строк[1].
Он включает в себя
- реализацию протокола обмена Диффи-Хеллмана, включая версию алгоритма с эллиптическими кривыми.
- вычисление бесключевых хеш-функций сообщений — MD2, MD4, MD5, Tiger, RIPEMD, SHA
- вычисления ключевых хеш-функций сообщений — CMAC, HMAC
- асимметричное шифрование PKCS 1
- симметричное шифрование с помощью DES, TripleDES, AES, Blowfish, IDEA, RC2, RC4, RC5, RC6, Twofish, Skipjack и многих других шифров
- генераторы ключей, ключевых пар и других параметров криптографических алгоритмов.
- вычисления MAC с использованием любого блочного шифра, обрабатывающего текст блоками методом CBC, CFB, OFB
- алгоритмы электронной цифровой подписи RSA, DSA, EC-DSA
и обладает следующими свойствами
- содержит криптографические API для языков Java и C#
- содержит провайдер для JCE и JCA
- содержит реализации JCE 1.2.1, созданные разработчиками самостоятельно (то есть, пакет не содержит кодов JCE 1.2.1 от Sun, экспорт которых запрещен в США)
- поддерживает спецификации ASN.1 кодирования объектов
- имеет поддержку сертификатов X.509 различных версий
- имеет поддержку стандартов Open PGP, OCSP, TSP и др.
IAIK JCE
правитьКоммерческий пакет, реализованный институтом прикладной обработки информации и связи (Institute for Applied Information Processing and Communication, IAIK) технологического университета Граца.[4]
Примеры
правитьШифрование массива
правитьВ следующем примере показана реализация шифрования массива байтов с помощью алгоритма AES. Для написания программы использовались средства пакета BouncyCastle.[5]
BufferedBlockCipher cipher =
new PaddedBufferedBlockCipher(
new CBCBlockCipher( new AESFastEngine() )
);
SecureRandom srr = new SecureRandom();
byte[] AESkey = new byte[ 16 ];
srr.nextBytes( AESkey );
byte[] AESinitV = new byte[ 16 ];
srr.nextBytes( AESinitV );
ParametersWithIV piv =
new ParametersWithIV(
new KeyParameter( AESkey ),
AESinitV
);
cipher.init( true, piv );
byte[] result =
new byte[
cipher.getOutputSize( toEncrypt.length )
];
int len =
cipher.processBytes(
toEncrypt,
0,
toEncrypt.length,
result,
0
);
try
{
cipher.doFinal( result, len );
}
catch( CryptoException ce )
{
result = "Cipher error".getBytes();
ce.printStackTrace();
}
Примечания
править- ↑ 1 2 bouncycastle.org . www.bouncycastle.org. Дата обращения: 17 декабря 2016. Архивировано 18 апреля 2018 года.
- ↑ 1 2 Jason Weiss. Java cryptography extensions : practical guide for programmers. — Morgan Kaufmann Publishers, 2004.
- ↑ The Cryptix project . Дата обращения: 19 декабря 2016. Архивировано 23 апреля 2018 года.
- ↑ Secure Information and Communication Technologies . Дата обращения: 11 марта 2016. Архивировано 18 апреля 2018 года.
- ↑ М.С. Зуев, К.Г. Мирошников. Об одном криптографическом расширении Java (рус.) // Вестник ТГУ. — 2008. — 17 ноябрь.
Ссылки
править- Java Cryptography Architecture (JCA) Reference Guide
- Скачать для Java 6, Java 7, и Java 8.
- IAIK-JCE