Поиск…


Вступление

Практики безопасности на Java можно разделить на две широкие, неопределенно определенные категории; Безопасность платформы Java и защищенное программирование на Java.

Практики безопасности платформы Java имеют дело с управлением безопасностью и целостностью JVM. Он включает такие темы, как управление поставщиками JCE и политиками безопасности.

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

замечания

В то время как примеры должны быть четко сформулированы, некоторые темы, которые необходимо охватить, следующие:

  1. Концепция / структура поставщика JCE
  2. Элемент списка

JCE

Расширение Java Cryptography Extension (JCE) - это структура, встроенная в JVM, позволяющая разработчикам легко и безопасно использовать криптографию в своих программах. Он делает это, предоставляя простой, портативный интерфейс для программистов, используя систему JCE Providers для безопасного осуществления основных криптографических операций.

Ключи и управление ключами

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

Одной из общепринятых рекомендаций по управлению ключами во время выполнения является сохранение их только в byte массивов byte и никогда не как строки. Это связано с тем, что строки Java неизменяемы и не могут быть вручную «очищены» или «обнулены» в памяти; в то время как ссылка на строку может быть удалена, точная строка останется в памяти, пока ее сегмент памяти не будет собран и повторно использован для сбора мусора. У злоумышленника будет большое окно, в котором они могут сбросить память программы и легко найти ключ. Напротив, массивы byte изменяемы, и их содержимое может быть перезаписано на месте; это хорошая идея «обнулить» ваши ключи, как только они вам больше не понадобятся.

Общие уязвимости Java

Нужен контент

Проблемы с сетью

Нужен контент

Случайность и вы

Нужен контент

Для большинства приложений класс java.utils.Random является прекрасным источником «случайных» данных. Если вам нужно выбрать случайный элемент из массива или создать случайную строку или создать временный «уникальный» идентификатор, вероятно, вы должны использовать Random .

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

Хеширование и проверка

Необходима дополнительная информация.

Криптографическая хеш-функция является членом класса функций с тремя важными свойствами; последовательности, уникальности и необратимости.

Согласованность: при одинаковых данных хеш-функция всегда возвращает одно и то же значение. То есть, если X = Y, f (x) всегда будет равно f (y) для хэш-функции f.

Уникальность: никакие два входа хеш-функции никогда не приведут к одному и тому же выводу. То есть, если X! = Y, f (x)! = F (y), для любых значений X и Y.

Необратимость. Неправдоподобно, если не невозможно, «перевернуть» хэш-функцию. То есть, учитывая только f (X), не должно быть способа найти исходный X, чтобы не поставить все возможные значения X через функцию f (грубая сила). Не должно быть функции f1, для которой f1 (f (X)) = X.

Во многих функциях отсутствует хотя бы один из этих атрибутов. Например, известно, что MD5 и SHA1 имеют коллизии, т. Е. Два входа, которые имеют одинаковый выход, поэтому им не хватает уникальности. Некоторые функции, которые в настоящее время считаются безопасными, это SHA-256 и SHA-512.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow