Java Cryptography Extension

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Криптографическое расширение 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 является самым известным из бесплатных расширений. Работа над ним началась в 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 и др.

Коммерческий пакет, реализованный институтом прикладной обработки информации и связи (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. 1 2 bouncycastle.org. www.bouncycastle.org. Дата обращения: 17 декабря 2016. Архивировано 18 апреля 2018 года.
  2. 1 2 Jason Weiss. Java cryptography extensions : practical guide for programmers. — Morgan Kaufmann Publishers, 2004.
  3. The Cryptix project. Дата обращения: 19 декабря 2016. Архивировано 23 апреля 2018 года.
  4. Secure Information and Communication Technologies. Дата обращения: 11 марта 2016. Архивировано 18 апреля 2018 года.
  5. М.С. Зуев, К.Г. Мирошников. Об одном криптографическом расширении Java (рус.) // Вестник ТГУ. — 2008. — 17 ноябрь.