Как бы вы реализовали соленые пароли в Tomcat 5.5
Мое веб-приложение полагается на безопасность, управляемую контейнером, и мне интересно, можно ли вообще использовать соленые пароли. Насколько я могу судить, достаточно просто сохранить переваренные пароли в базе данных, просто настроив JDBC или DataSource Realm, но добавить соль в этот дайджест невозможно.
Какие-либо предложения?
Изменить: кажется, мне просто нужно немного подумать, прежде чем задавать вопросы;-)
Это всего лишь вопрос выбора того, кто выполняет дайджест (клиент или сервер), и соответствующей настройки Tomcat.
3 ответа
Если вы создаете и храните дайджесты, вы можете создавать и хранить соли одновременно.
Ваша таблица аутентификации будет содержать.... pwdDigest varchar(64), - или int256, если у вас есть один hashSalt int64, ....
Затем, в зависимости от используемого вами протокола аутентификации, вы либо отправляете hashSalt клиенту, когда получаете имя пользователя для шифрования на стороне клиента, либо используете его для хеширования пароля, если вы получаете его в открытом виде.
Я не знаком с технологиями доступа к базам данных, о которых вы говорите, поэтому прошу прощения, если я упустил суть и упростил ответ.
Tomcat 5.5 и 6.0 не поддерживают соленые пароли в JDBCRealms и DataSourceRealms. Это известная ошибка, и предложенный патч работает нормально, но пока не был принят.
Если вы не хотите применять патч, вы можете по крайней мере использовать его в качестве примера реализации:
Ошибка 45871 - Поддержка засоленных и переваренных исправлений в DataSourceRealm
Шифрование на основе пароля в JCE использует соль согласно PKCS#5. См. Пример http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/JCERefGuide.html.