
- •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
- •Дополнительная литература

Некоторые определения
Открытый ключ - Public Key
Число, ассоциируемое с какой-либо сущностью (например, с человеком или фирмой). Открытый ключ предназначен для того, чтобы быть известным всем, кому требуются безопасные (проверяемые) контакты с этой сущностью
Приватный (закрытый) ключ - Private Key
Число, которое должно быть известно только некоторой сущности, т.е. должно держаться в секрете. Приватный ключ всегда ассоциирован с определенным открытым ключом
Цифровая подпись - Digital Signature
Строка битов, вычисляемая по некоторым данным (т.е. “подписывающая” эти данные) и закрытому ключу некоторой сущности. Цифровая попись может быть использована для проверки того, что данные переданы именно этой сущностью
(C)В.О. Сафонов. 2013

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

Схема аутентификации в Java
(C) В.О. Сафонов. 2013

Безопасные соединения
SSL / TLS – безопасные сокетные соединения
(класс javax.net.ssl.SSLSocket) для передачи данных по протоколу HTTP поверх TCP/IP
Simple Authentication and Security Layer (SASL) – Интернет-протокол для спецификации способа аутентификации и уровня безопасности между клиентом и сервером (без явного определения данных, используемых для аутентификации) – класс javax.security.sasl.Sasl и объекты SaslClient
иSaslServer
(C)В.О. Сафонов. 2013

Управление доступом
При загрузке Java-кода (приложения или апплета) в виртуальную машину загрузчик классов определяет:
Откуда загружен код
Кем подписан код (если подписан)
Полномочия по умолчанию, предоставленные коду
Полномочия безопасности описываются объектами класса java.security.Permission
(C)В.О. Сафонов. 2013

Политика безопасности
Предназначена для администраторов, которые могут ее конфигурировать для Java- платформы
Описывается объектом класса java.security.Policy
Определяет набор полномочий по умолчанию
В каждый момент существует только один объект в виртуальной машине, описывающий политику безопасности
Конфигурирование выполняется с помощью утилиты policytool –file mypolicy.policy,
загружающей в JVM содержимое указанного |
|
.policy-файла |
(C) В.О. Сафонов. 2013 |
|

Фрагмент .policy - файла
//Here is the permission ExampleGame needs.
//It grants code signed by "terry" the
//HighScorePermission, if the
//HighScorePermission was signed by "chris" grant SignedBy "terry" {
permission com.scoredev.scores.HighScorePermission
"ExampleGame", signedBy "chris";
};
//Here is the set of permissions the HighScore
//class needs:
grant SignedBy "chris" {
//The HighScore class needs permission to read
//"user.home" to find the location of the
//highscore file
permission java.util.PropertyPermission "user.home", "read"; … }
(C) В.О. Сафонов. 2013

Защита ресурсов
Реализована с помощью security manager (класс
SecurityManager)
Пример использования:
Permission perm =
new java.io.FilePermission("/my/file", "read"); SecurityManager sm = System.getSecurityManager(); if (sm != null)
{sm.checkPermission(perm); }
SecurityManager реализован по умолчанию так, что он делегирует это решение реализации java.security.AccessController, который для проверки полномочий выполняет “прогулку по стеку”, аналогично .NET
(C)В.О. Сафонов. 2013

Схема проверки полномочий
(C) В.О. Сафонов. 2013

Пример: Вывод всех сервисов безопасности
// Метод выдает все имеющиеся типы сервисов безопасности public static String[] getServiceTypes() {
Set result = new HashSet(); // Все провайдеры
Provider[] providers = Security.getProviders(); for (int i=0; i<providers.length; i++) {
// Сервисы, предоставляемые каждым провайдером Set keys = providers[i].keySet();
for (Iterator it = keys.iterator(); it.hasNext(); ) { String key = (String)it.next();
key = key.split(" ")[0];
if (key.startsWith("Alg.Alias.")) { // Strip the alias
key = key.substring(10);
}
int ix = key.indexOf('.'); result.add(key.substring(0, ix));
}
}
return (String[]) result.toArray(new String[result.size()]);
} |
(C) В.О. Сафонов. 2013 |
|