Как использовать хеширование md5 в Jboss 6 для JAAS WebAuthentication? - PullRequest
1 голос
/ 24 февраля 2011

написание приложения на Java EE 6 Мне нужна помощь с использованием DatabaseServerLoginModule с хэшированием md5.

Настройка:

login-config.xml:

 <application-policy name = "app">
      <authentication>
      <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required">
        <module-option name = "dsJndiName">java:/MySQLDS</module-option>
        <module-option name = "principalsQuery">Select password from user where email_current=?</module-option>
        <module-option name="rolesQuery">
            SELECT r.name, 'Roles' FROM role r, user_2_role ur, user u WHERE
            u.email_current=? AND u.id_user=ur.id_user AND ur.id_role=r.id_role
        </module-option> 
        <module-option name ="hashAlgorithm">md5</module-option>
        <module-option name="hashEncoding">base64</module-option>
        <module-option name="ignorePasswordCase">false</module-option>
        <module-option name="hashStorePassword">false</module-option>
        <module-option name="hashUserPassword">true</module-option>
     </login-module>
     <!-- login-module code="org.jboss.security.ClientLoginModule" flag="required" /-->
     </authentication>
 </application-policy>

web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Customer Content</web-resource-name>
        <url-pattern>/customer/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>AuthorizedUser</role-name>
        <role-name>customer</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>The Restricted Zone</realm-name>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/login.html</form-error-page>
    </form-login-config>
</login-config>
<security-role>
    <description>The role required to access restricted content </description>
    <role-name>customer</role-name>
</security-role>

Реализация входа в систему (важная часть):

// login
WebAuthentication pwl = new WebAuthentication();
if (pwl.login(aEmail, aPassword)) {
    return "customer/dashboard?faces-redirect=true";
} else {
    throw new IncorrectCredentialsException();
}

Я храню пароли, используя следующую реализацию:

final byte[] md5Hash = DigestUtils.md5(newPassword);
md5NewPassword = Hex.encodeHexString(md5Hash);

Я проверил значение, которое было записано в базу данных с некоторыми генераторами md5 из Интернета, например http://www.miraclesalad.com/webtools/md5.php

напишите все то же самое.

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

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Помимо MD5 против SHA2 (что является хорошей идеей), на самом деле гораздо важнее добавлять случайно сгенерированную соль к каждому паролю. Он рекомендовал бы по крайней мере 128 бит случайно сгенерированной соли для каждого пароля. Это предотвращает атаки таблиц Rainbow (форма предварительно вычисленных хэшей паролей).

Вам также следует многократно повторять свой алгоритм хеширования, передавая ему результаты каждого хэша. Алгоритмы хеширования разработаны для быстрой работы, это означает, что злоумышленник может вычислять миллионы или миллиарды хэшей в секунду с помощью дешевого персонального компьютера и видеокарты. Рекомендуется выполнить более 25 000 итераций алгоритма хеширования, чтобы вернуть выходные данные во входные данные. На современном процессоре это занимает гораздо меньше секунды. Если вы сделаете это, взлом пароля станет намного сложнее в вычислительном отношении.

1 голос
/ 24 февраля 2011

Взгляните на класс MessageDigest:

http://download.oracle.com/javase/1.4.2/docs/api/java/security/MessageDigest.html

Не используйте MD5.Вместо этого используйте что-то вроде SHA-256, а также итеративно хешируйте строку и добавляйте соль перед первым хешем.Функции хеширования не предназначены для шифрования пароля.

1 голос
/ 24 февраля 2011

nogamawa, назначение алгоритма SHA аналогично MD5, это одностороннее шифрование, т.е. нет способа расшифровать сообщение. Доказано, что SHA2 намного сильнее. Криптографические расширения Java (JCE) поддерживают оба алгоритма. --kiran.kumar

1 голос
/ 24 февраля 2011

хэш md5 теперь признан небезопасным.Он был сломан во многих отношениях.

Лучше использовать SHA.

...