Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java17.pptx
Скачиваний:
173
Добавлен:
16.04.2015
Размер:
417.03 Кб
Скачать

Безопасность языка 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

Соседние файлы в папке java1_2013_2014