Манипулировать паролем - PullRequest
1 голос
/ 16 мая 2011

Мое Java-приложение манипулирует паролем, который в конечном итоге используется для шифрования файла.Я загружаю его в структуру

public char[] password; 

, потому что я видел его в разгаре JPasswordField.

Полагаю, это добавляет некоторый уровень защиты от сканирования памяти на наличие паролей.Я думаю, что это просто маленький уровень "мрака", а не настоящая защита.Мне кажется, что это полезно, потому что это эффективно против многих тривиальных сканеров.У меня такие вещи, или я что-то упустил?

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

Причина, по которой некоторые люди предпочитают использовать char[] вместо String, заключается в том, что char[] можно очистить после использования, сужая окно, когда пароль, появляющийся в дампах ядра или открывающийся из-за сбоя связанной проверки, читает из буферы.

Однако для JPasswordField он работает не так хорошо по ряду причин:

  • ГХ может перемещать объект, не обязательно сразу же закрывая оригинальную копию.
  • JPasswordField часто используется с ActionListener, который получает пароль в виде строки команды в ActionEvent.
  • Реализация Document может делать копии.
  • Люди забывают очистить JPasswordField после извлечения char[].
  • Вероятно, есть более важные меры безопасности, на которые вы могли бы затратить усилия (например, досмотры в аэропорту, следящие за бутылкой воды и пропускающие бомбы).

Что касается профессионалов, вы получаете функцию списка тиков, и вам не нужно объяснять себя, потому что вы выполняете Best Practice.

2 голосов
/ 16 мая 2011

Как уже говорили другие, char[] не предлагает никаких реальных преимуществ безопасности по сравнению с String. Однако char[] предлагает эти преимущества по сравнению с String объектами:

  • Труднее случайно раскрыть пароль (метод массива toString() не раскрывает его содержимого)
  • Содержимое можно очистить, когда оно больше не нужно
1 голос
/ 16 мая 2011

Вы имеете в виду, что вы думаете, что char [] более безопасен для сканирования памяти, чем String?Ммм нетВнутренне строка хранит свой текст в символе [].Они бы выглядели одинаково.

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

...