#passwords #password-encryption
#пароли #пароль-шифрование
Вопрос:
С одной стороны, у меня есть: http://forums.enterprisedb.com/posts/list/2481.page Здесь мы объявляем поле как BYTEA и можем расшифровать его, а шифрование выполняется на уровне базы данных.
С другой стороны: https://www.owasp.org/index.php/Hashing_Java Здесь как varchar, и мы сравниваем хэши только для авторизации.
Наконец, весна дает http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/crypto/password/StandardPasswordEncoder.html применяемое значение char secret одинаково для каждого пароля?
Какой подход является наилучшим? (Я склоняюсь к Spring, поскольку, насколько я понимаю, он инкапсулирует аналогичную логику, как OWASP, в нескольких строках кода?)
Комментарии:
1. Что для вас значит «лучший»?
2. меньше кода, больше безопасности.
Ответ №1:
Кодировка PostgreSQL:
- Ваше приложение, вероятно, будет зависеть от PostgreSQL, и, возможно, вам придется переписать эту часть, если вы хотите использовать ее с другой СУБД.
- Если PostgreSQL находится на другом компьютере, вам следует рассмотреть возможность использования какой-либо формы безопасной связи между приложением и СУБД, поскольку пароли передаются между ними в виде обычного текста.
OWASP против Spring:
- Они очень похожи.
- Оба используют соль.
- Spring использует секрет (Owasp нет).
- Конечно, вы можете изменить Owasp, чтобы использовать секрет, если вам это нужно, или вы можете использовать
StandardPasswordEncoder
без секрета. - Spring
encode()
возвращает только одну строку, которая также содержит соль (как обычно в unix / linux), в то время как Owasp требует дополнительного атрибута базы данных для значения соли. - Spring проще и, возможно, поддерживается лучше, чем веб-статья Owasp от 2008 года.
- Owasp объединяет функциональные возможности: он кодирует / проверяет пароли и также содержит много кода JDBC.
- Spring просто кодирует / проверяет пароли, и ваша ответственность — хранение паролей. Но, возможно, ваш фреймворк сделает это за вас, или вы могли бы написать это для себя.
Я бы использовал StandardPasswordEncoder
. Это более просто и работает так же, как Owasp.