Java Cryptography Extension

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Криптографічне розширення Java (англ. Java Cryptography Extension, скор. JCE) —офіційно випущене стандартне розширення для платформи Java і частина Java Cryptography Architecture (JCA). Являє собою набір пакетів, який забезпечує фреймворк і реалізацію таких криптографічних завдань, як шифрування і дешифрування даних, генерація та перевірка на справжність ключів керування, а також реалізацію та Message Authentication Code (MAC) алгоритмів[1].

Криптографічне розширення Java засноване на тому ж, що і криптографічний архітектура Java (JCA) і розглядається як частина JCA. Справа в тому, що американські закони забороняють експорт деяких видів криптографічного програмного забезпечення[en] (зокрема симетричного шифрування і вироблення загального ключового матеріалу) за межі США і Канади або дозволяють експорт з урізаними ключами. Стандартні класи JCA містять тільки хеш-функції, генератори ключів та інші функції, які не потрапляють під це обмеження, і можуть бути спокійно експортовані в складі платформи Java 2. Однак сильні алгоритми шифрування, які потрапляють під експортні обмеження на криптографію в США, повинні бути отримані з інших джерел, тому їх постачається у вигляді окремого продукту - JCE.

Криптографічне розширення Java розроблено таким чином, щоб інші криптографічні бібліотеки могли бути підключені для надання нових алгоритмів без проблем[2].

Складові в JDK 1.2[ред. | ред. код]

На даний момент в JDK 1.2 криптографічне розширення поставляється в трьох пакетах:

  1. javax.crypto — інтерфейс і класи для симетричного шифрування
  2. javax.crypto.interfaces — інтерфейси засобів вироблення ключів для алгоритму Діффі-Гелмана
  3. javax.crypto.spec — класи для управління ключами і параметрами криптографічних алгоритмів

Функціональність[ред. | ред. код]

Як і JCA, JCE не залежить від реалізації конкретних алгоритмів. Завдяки SPI різні реалізації від різних виробників можуть бути одночасно інтегровані в середовищі програмування Java. Починаючи з версії 1.4, Java включає в себе JCE і JCA, проте інші реалізації так само без будь-яких проблем можуть бути підключені як статично, так і динамічно.

Криптографічне розширення Java пропонує наступні функціональні можливості:

  • Шифр — криптографічні алгоритми (симетричні і асиметричні) для шифрування, блокові і потокові шифри
  • Управління ключами — Класи KeyGenerator для генерації ключів, KeyAgreement для безпечного обміну ключами й SecretKeyFactory для поділу закритого та відкритого ключів
  • Перевірка на справжність кодів
  • Створення безпечних об'єктів і цифрових підписів

Аудиторія JCE[ред. | ред. код]

У криптографічного розширення Java є функції безпеки, призначені для різних аудиторій

Користувачі[ред. | ред. код]

Вбудовані функції безпеки JCE захищають користувача від зловмисних програм (включаючи віруси), зберігають конфіденційність файлів користувача та інформації про користувача, перевіряють справжність особистості кожного постачальника коду. Користувач так само може піддати додатки перевірці на безпеку, коли йому це необхідно.

Розробники[ред. | ред. код]

Розробник може використовувати методи JCE, щоб включити функції безпеки в свої програми, в тому числі криптографічні служби та перевірку безпеки. JCE дозволяє визначити та інтегрувати свої власні права доступу (контроль доступу до певних ресурсів) і реалізації криптографічних служб безпеки. Крім того, класи JCE призначені для управління власними приватними парами ключів та сертифікації відкритих ключів від людей, яким довіряє розробник.

Системні адміністратори, розробники і користувачі[ред. | ред. код]

Інструменти JCE керують сховищем ключів (база даних ключів і сертифікатів); генерують цифрові підписи для JAR-файлів, а також перевіряють достовірність таких підписів і цілісність підписаного вмісту; створюють і змінюють приватні файли, які визначають безпеку їх встановлення.

Відомі реалізації 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]

Bouncy Castle[ред. | ред. код]

Так само як і Cryptix JCE, пакет Bouncy Castle є безкоштовним. Перший офіційний реліз Bouncy Castle з'явився в травні 2000 року і був довжиною близько 27 000 рядків. Проект постійно зростав, і до 2012 року код Bouncy Castle для Java становив понад 300 000 рядків.

Він включає в себе:

  • реалізацію протоколу обміну Діффі-Геллмана, включаючи версію алгоритму з еліптичними кривими.
  • обчислення безключових хеш - функції повідомлень — 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. Для написання програми використовувалися засоби пакета Bouncy Сastle.[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. bouncycastle.org. www.bouncycastle.org. Процитовано 2016-12-17. 
  2. Jason Weiss. {{{Заголовок}}}.
  3. The Cryptix project. 
  4. Secure Information and Communication Technologies. 
  5. М.С. Зуев, К.Г. Мирошников. .

Посилання[ред. | ред. код]

Дивись також[ред. | ред. код]