- •JAVA-ТЕХНОЛОГИЯ
- •Безопасность – основные понятия
- •Безопасность: основные понятия
- •Безопасность: основные виды атак
- •Инициатива Trustworthy Computing
- •Безопасность в Java
- •Эволюция безопасности в Java: Безопасность в JDK 1.0
- •Эволюция безопасности в Java: Безопасность в JDK 1.1
- •Эволюция безопасности в Java: Безопасность в JDK 1.2
- •Эволюция безопасности в Java
- •Безопасность языка Java и верификация байт-кода
- •Принципы безопасности Java
- •Провайдеры безопасности
- •Поиск сервиса безопасности по списку провайдеров
- •Выбор сервиса безопасности у конкретного провайдера
- •Криптография в Java –
- •Java Cryptography Extension
- •Public Key Infrastructure (PKI) – Поддержка криптования на основе публичных ключей
- •Утилиты keytool и jarsigner(JDK)
- •Аутентификация
- •Некоторые определения
- •Свойства цифровой подписи
- •Схема аутентификации в Java
- •Безопасные соединения
- •Управление доступом
- •Политика безопасности
- •Фрагмент .policy - файла
- •Защита ресурсов
- •Схема проверки полномочий
- •Пример: Вывод всех сервисов безопасности
- •Пример: Результаты вывода
- •Сравнение с .NET
- •Дополнительная литература
Безопасность языка Java и верификация байт-кода
В языке Java многие распространенные виды ошибок и операций, которые могут привести к уязвимостям, принципиально невозможны (переполнение буфера, обращение по пустому указателю или к несуществующему объекту, адресная арифметика и др.)
Модификаторы доступа в Java (private, protected и др.) обеспечивают возможность гибкого управления степенью доступности данных
Байт-код любого класса Java при его загрузке в JVM
верифицируется. В частности, проверяется корректность использования памяти (отсутствие переполнения или исчерпания стека и др.), корректность переходов, корректность использования
типов. Это позволяет избежать многих видов |
|
уязвимостей |
(C) В.О. Сафонов. 2013 |
|
|
Принципы безопасности Java
Безопасность управляется провайдерами безопасности (security providers)
Java-приложения не должны сами обеспечивать свою безопасность. Они должны запрашивать сервисы безопасности у Java-платформы с помощью
провайдеров безопасности. Одно и то же приложение может использовать несколько провайдеров безопасности
Java-приложение не привязано к определенному провайдеру, а провайдер – к определенному
приложению
Платформа Java включает набор встроенных провайдеров, обеспечивающих наиболее
распространеные сервисы безопасности. Если их не
хватает, платформа Java допускает инсталляцию и
(C) В.О. Сафонов. 2013
использование дополнительных (custom) провайдеров
Провайдеры безопасности
java.security.Provider – класс, определяющий структуру провайдера безопасности для Java-платформы
Каждый провайдер безопасности имеет свой приоритет
В каждый момент могут использоваться несколько провайдеров безопасности
При использовании какого-либо сервиса безопасности из списка доступных провайдеров выбирается провайдер с максимальным приоритетом
Пример выбора сервиса безопасности:
MessageDigest md = MessageDigest.getInstance(“MD5”);
- выбор реализации алгоритма криптования MessageDigest “MD5” из провайдера по умолчанию
MessageDigest md = MessageDigest.getInstance(“MD5”,”MyProvider”);
- выбор реализации данного алгоритма криптования от конкретного провайдера
(C) В.О. Сафонов. 2013
Поиск сервиса безопасности по списку провайдеров
(C) В.О. Сафонов. 2013
Выбор сервиса безопасности у конкретного провайдера
(C) В.О. Сафонов. 2013
Криптография в Java –
Java Cryptography Extension (JCE)
Message digest algorithms
Digital signature algorithms
Symmetric bulk encryption
Symmetric stream encryption
Asymmetric encryption
Password-based encryption (PBE)
Elliptic Curve Cryptography (ECC)
Key agreement algorithms
Key generators
Message Authentication Codes (MACs)
(Pseudo-)random number generators
(C)В.О. Сафонов. 2013
Java Cryptography Extension
java.security – содержит классы для криптографических сервисов, не подпадающих под ограничения экспортного контроля: Signature, MessageDigest
javax.crypto – содержит классы, для которых действуют ограничения экспортного контроля: Cipher, KeyAgreement
(C)В.О. Сафонов. 2013
Public Key Infrastructure (PKI) – Поддержка криптования на основе публичных ключей
Управление ключами и сертификатами
Пользователь идентифицируется по цифровой подписи (сертификату)
Пакеты java.security и java.security.cert
(C) В.О. Сафонов. 2013
Утилиты keytool и jarsigner(JDK)
keytool - используется для создания хранилищ ключей
иуправления ими
Создание пар public/private key
Воспроизведение, импорт и экспорт сертификатов X.509 v1, v2 и v3 в виде файлов
Создание self-signed certificates
Отправка запросов на сертификаты CA (Certification Authority)
Импорт полученных от CA сертификатов
Пометка сертификатов public key certificates как надежных (trusted)
jarsigner - используется для генерации и проверки
цифровыx подписей jar-архивов
(C)В.О. Сафонов. 2013
Аутентификация
Проверка пользователя на идентичность (identity)
В Java реализована с помощью класса LoginContext пакета javax.security.auth.login
Модули входа (login) могут быть добавлены к любому Java- приложению
Java-платформа поддерживает следующие встроенные модули входа (пакет com.sun.security.auth.module package):
Krb5LoginModule - аутентификация по протоколам Kerberos
JndiLoginModule – аутентификация вида username/password с использованием LDAP или NIS
KeyStoreLoginModule – вход в любое хранилище ключей (key store)
Аутентификация конфигурируется не с помощью провайдеров,
ас помощью своей собственной уникальной конфигурации
(C)В.О. Сафонов. 2013
