Главная » Java, Web, XML » Безопасность предоставления услуг

0

Сфера применения Web-служб стремительно расширяется. В настоящее время в нее вовлекаются банковские транзакции, финансовые операции, медицинские консультации — те Web-услуги, которые требуют секретности, точности, достоверности. Это заставляет обращать особенное внимание на безопасность предоставления услуг.

Вопросы безопасности обсуждаются с тех самых пор, как люди стали предоставлять и получать услуги. При заключении всякой сделки важно убедиться в том, что она будет совершена точно, в срок, с соблюдением всех оговоренных условий. Применительно к Web-услугам можно выделить пять основных проблем безопасности.

?         Конфиденциальность (confidentiality) данных. Сообщения, пересылаемые между Web-службой и ее клиентами, не должны читаться никем, кроме отправителя и получателя. Конфиденциальность достигается шифрованием сообщений.

?         Целостность (integrity) данных. Клиент и Web-служба должны быть уверены, что данные во время пересылки не изменились посторонними лицами или аппаратными средствами. Уверенность в целостности сообщения обеспечивается цифровой подписью или добавлением дайджеста сообщения MD (Message Digest).

?        Аутентификация (authentication) партнера или сообщения. И клиент, и Web-служба должны быть уверены, что имеют дело с тем партнером, за кого он себя выдает. Для этого сообщение подписывается цифровой подписью, известной другой стороне, или к сообщению прилагается цифровой сертификат.

?         Авторизация (authorization) клиента. Клиент может получить только те услуги, которые он имеет право получать. Это достигается разными способами: назначением ролей, составлением списков доступа ACL (Access Control Lists), выбором политики доступа.

?         Неаннулируемость (nonrepudiation) услуг. И клиент, и Web-служба должны быть уверены, что другая сторона строго выполнит взятые на себя обязательства. Этого можно достигнуть при помощи цифровой подписи или NR-маркера.

Как видно из этого перечня, за многие века обмена услугами выработаны и методы решения проблем безопасности. Давно существует и бурно развивается целая наука — криптография. Приведем краткое описание ее основных понятий.

Криптография

Криптография занимается разработкой методов обработки данных с целью сокрытия их смысла. Для этого одним из множества алгоритмов шифрования исходное сообщение преобразуется в бессмысленный набор битов, который можно быстро преобразовать обратно в первоначальный текст, только зная ключ (key) шифрования. Секретность ключа обеспечивает конфиденциальность сообщения.

Различают два вида ключей: симметричные (закрытые) ключи, и асимметричные (открытый и закрытый) ключи.

Симметричные ключи

Шифрование и расшифровка сообщения производятся с помощью одного и того же ключа, поэтому он и называется симметричным ключом. Алгоритмы шифрования с симметричным ключом работают быстро и надежно. Их надежность напрямую зависит от длины ключа — чем длиннее ключ, тем больше времени требует дешифровка сообщения. (Дешифровкой называется попытка чтения зашифрованного сообщения без знания ключа.) Наиболее распространены следующие алгоритмы, применяющие симметричные

?         Широко распространен алгоритм DES (Data Encryption Standard) с 56- разрядным ключом. Это стандарт для защиты от несанкционированного доступа к служебной документации в государственных учреждениях США.

?         В России для тех же целей применяется ГОСТ28147—89. Он использует 256-разрядный ключ.

•          Алгоритм DES часто применяется к сообщению трижды с разными ключами. Эта схема шифрования называется Triple-DES или 3DES.

?         Международный алгоритм шифрования данных IDEA (International Data Encryption Algorithm) использует 128-разрядный ключ.

•         Алгоритмы Брюса Шнайера (Bruce Schneier) Blowfish, с 56-разрядным ключом, и Twofish, в котором длина ключа достигает 256 разрядов, не запатентованы и свободно доступны в Интернете по адресу http://www.counterpane.com/labs.htmI.

•          Широко распространена целая серия алгоритмов Рональда Ривеста (Ronald Rivest) RC2, RC4, RC5, RC6. Они различаются скоростью шифрования и длиной секретного ключа.

Вся проблема заключается в передаче секретного ключа. Обеспечить ее конфиденциальность не менее важно и не менее трудно, чем обеспечить конфиденциальность самого сообщения. Очень часто эту проблему решают применением асимметричных ключей, при помощи которых передается секретный симметричный ключ.

Асимметричные ключи

В этом случае у каждого участника обмена сообщениями — Web-службы и ее клиента — есть по два ключа — открытый (public key), известный всем, и закрытый (private key), известный только самому участнику. Открытый ключ предназначен для шифрования сообщения, закрытый — для его расшифровки. Клиент шифрует свое сообщение открытым ключом Web- службы и посылает шифровку вместе со своим открытым ключом. Зашифрованное сообщение может прочитать только Web-служба, которой оно предназначено. Web-служба расшифровывает его своим закрытым ключом, читает, составляет ответ, и шифрует ответное сообщение открытым ключом клиента. Зашифрованный ответ может прочитать только клиент, расшифровав его своим закрытым ключом.

Итак, при использовании асимметричных ключей вместе с зашифрованным сообщением или до посылается открытый ключ отправителя.

Разработано множество алгоритмов шифрования с асимметричными ключами.

?         Алгоритм DSA (Digital Signature Algorithm) позволяет использовать ключи любого размера. Алгоритм стандартизирован, стандарт DSS (Digital Signature Standard) рекомендует ключи длиной от 512 до 1024 двоичных разрядов. Алгоритм применяется, главным образом, для создания цифровой подписи.

?         Алгоритм RSA, названный по первым буквам фамилий авторов (Rivest, Shamir, Adleman), использует ключи длиной до 1024 битов.

?         Алгоритм Диффи-Хелмана Aff (Diffie-Hellman) работает с ключами длиной до 4096 битов.

?         Алгоритм AlGamal Тегера Эль-Гамала (Taher ElGamal) не запатентован, он используется свободно.

В реальных криптографических системах симметричные и асимметричные ключи часто комбинируются. Например, известно, что шифрование открытым ключом занимает больше времени, чем шифрование секретным ключом. Для ускорения работы поступают так: сообщение шифруют симметричным ключом, затем этот симметричный ключ шифруют открытым ключом получателя и отправляют вместе с зашифрованным сообщением. Получатель сначала расшифровывает симметричный ключ своим закрытым ключом, а затем расшифровывает сообщение уже известным ему симметричным

Дайджест сообщения

Иногда в результате шифрования получают короткий дайджест сообщения MD (Message Digest), который посылают вместе с незашифрованным сообщением. Это делается не с целью достижения конфиденциальности, а для сохранения целостности послания. Получатель повторно шифрует сообщение тем же алгоритмом и сравнивает полученный дайджест с тем, который был прислан вместе с сообщением. Совпадение дайджестов гарантирует неизменность сообщения по пути следования. Своеобразие дайджеста заключается в том, что его не надо расшифровывать. Это позволяет применять для получения дайджеста мощные односторонние алгоритмы.

?         В настоящее время наибольшее распространение получил алгоритм Рональда Ривеста MD5, описанный в рекомендации RFC 1321. Он создает 128-разрядный дайджест.

?         Алгоритм SHA-1 (Secure Hash Algorithm) использует хеш-функцию для получения 160-разрядного дайджеста. У алгоритма есть расширения SHA-256, SHA-384, SHA~512 для получения более длинных дайджестов.

?         В алгоритмах под общим названием MAC (Message Authentication Code) кроме самого алгоритма используется и секретный ключ. Алгоритм используется главным образом для создания цифровой подписи.

Цифровая подпись

Для решения задач аутентификации и неаннулируемости, сообщение часто снабжается цифровой подписью. В самом простом случае для получения цифровой подписи применяются асимметричные ключи обратным способом — автор сообщения шифрует его своим закрытым, а не открытым ключом. После этого всякий желающий может расшифровать сообщение открытым ключом автора и прочитать его. Поскольку закрытый ключ знает только автор, зашифровать сообщение мог только он. Этим подтверждается авторство сообщения.

Зашифровать сообщение можно и симметричным ключом, но потом его придется открыть для проверки авторства. Такой ключ будет одноразовым, для следующего сообщения придется генерировать другой ключ.

В других случаях в качестве цифровой подписи используется дайджест сообщения, зашифрованный с помощью закрытого ключа автора. Адресат может получить тот же дайджест, используя открытый ключ автора сообщения, сравнить его с дайджестом самого сообщения и убедиться в авторстве сообщения.

Цифровой сертификат

Широкое распространение открытых ключей поставило задачу целостности и аутентификации самих открытых ключей. Отправитель, шифрующий сообщение открытым ключом адресата, должен быть уверен, что ключ действительно принадлежит адресату, а не подменен злоумышленником, выступающим от имени адресата. Для этого открытые ключи заверяются цифровой подписью, но подписью не адресата, а доверенного лица — центра сертификации СА (Certificate Authority).

Кроме открытого ключа и цифровой подписи, сертификат содержит сведения о центре сертификации и пользователе ключа, время действия ключа, назначение ключа: шифрование, цифровая подпись, дайджест. Структура сертификата и правила его использования определены международным стандартом ISO X.509.

Центры сертификации имеются во многих странах. Наиболее авторитетна организация VeriSign, у которой есть сеть филиалов

на нескольких сайтах Интернета.

Реализация криптографии в Java

В стандартную поставку Java 2 SDK, Standard Edition входят средства Security API, реализующие многие криптографические алгоритмы. В Security API входит пакет JCA (Java Cryptography Architecture) и дополнение к нему — пакет JCE (Java Cryptography Extension). Эти пакеты составлены из пакетов Java java. security, javax. crypto и их подпакетов, а также пакета com.sun.security и его подпакетов, содержащих средства генерации ключей, шифрования, создания дайджестов и цифровых подписей. Кроме того, в Security API входит пакет      и его подпакеты, содержа

щие средства аутентификации и авторизации и составляющие, вместе с другими пакетами Java, пакет JAAS (Java Authentication and Authorization Service).

Классы, составляющие средства Security API, реализуют криптографические алгоритмы DES, IDEA, DSA, MD5, SHA-1, RSA и другие, создают сертификаты по протоколу Х.509, связывают приложения Java с системой безопасности Kerberos.

Мы не будем здесь рассматривать Security API. Средства этого пакета подробно описаны в книге [13] и множестве других книг, посвященных безопасности Java. Текущая версия Security API полностью описана в документации к вашему набору J2SE SDK, в разделе $JAVA_HOME/docs/guide/security/.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии