Как безопасно хранить ключи шифрования в Java? - PullRequest
20 голосов
/ 02 декабря 2011

У меня есть объект свойств java с информацией аутентификации для веб-службы. Мне нужно зашифровать эти данные, но я не знаю, где мне нужно хранить ключ шифрования, чтобы он оставался в безопасности.

Каковы лучшие методы шифрования этих данных и их безопасного извлечения?

Есть ли преимущество использования хранилища ключей?

ws_user=username
ws_password=password
ws_url=https://www.whatever.com/myservice

Ответы [ 4 ]

8 голосов
/ 08 декабря 2011

Ваша проблема обычная. В Linux пароли пользователей хранятся в текстовом файле. Хотя хранятся только хэши паролей, если злоумышленник получит доступ к этому файлу, он не займет много времени, чтобы найти какой-либо пароль с помощью автономной атаки по словарю. В этом случае ОС полагается на права доступа к файлам, чтобы запретить доступ неавторизованным пользователям. В вашем случае это не сильно отличается. Необходимо правильно настроить разрешения для файла паролей и обеспечить физическую безопасность сервера.

4 голосов
/ 09 декабря 2011

Суть в том, что где-то должен быть пароль «корень цепи» в незашифрованном виде. Локальный файл, защищенный ОС, удаленный файл, защищенный ОС, жестко закодированный в источнике и т. Д.

Единственный способ обойти это - попросить человека ввести начальный пароль при запуске приложения, что, очевидно, невозможно для приложений, которым требуется автоматический запуск.

4 голосов
/ 08 декабря 2011

Это проблема куриного яйца.
Затем вам нужно будет найти, где хранить пароль для хранилища ключей и т. Д.

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

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

0 голосов
/ 08 декабря 2011

Я успешно использовал Jasypt StringEncrytor для шифрования конфиденциальной информации в файлах свойств и некоторых внутренних процедур для генерации солей и получения пароля.Так как вы используете веб-сервис, вы можете использовать JBAIT * Web PBE Configuration , чтобы вручную ввести пароль во время развертывания или даже развернуть свое собственное подобное решение.

...