Добавление соли в .htpasswd? - PullRequest
       38

Добавление соли в .htpasswd?

3 голосов
/ 14 ноября 2010

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

Большое спасибо за помощь, Бен

Ответы [ 2 ]

8 голосов
/ 14 ноября 2010

По умолчанию htpasswd использует стандартную функцию crypt , поэтому пароли уже засолены. Обратите внимание, что в этом примере оба пользователя имеют одинаковый пароль, но хэши разные:

simon@diablo:~$ htpasswd -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ htpasswd -b htpasswd simon2 abcd
Adding password for user simon2
simon@diablo:~$ cat htpasswd 
simon:<b>NWvm/LCCxQ64E</b>
simon2:<b>2I.LBzsRqULN6</b>

(примечание: флаг -b обычно не рекомендуется, поскольку другие пользователи могут видеть ваши аргументы командной строки и, следовательно, пароль)

Первые два символа хэша - это соль;пароли проверяются путем повторного вызова crypt().При вводе неверного пароля получается строка, которая не соответствует хешированному паролю:

>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'

, тогда как правильный пароль создает ожидаемый хеш:

>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'

htpasswd -m использует другой алгоритм MD5на основе и использует более длинную соль:

simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ cat htpasswd
simon:<b>$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/</b>

Здесь соль - это 8 символов между вторым и третьим $.

htpasswd -s хранит дайджест SHA-1 снет соли;Похоже, что это для совместимости с Netscape / LDIF:

simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd
Adding password for user simon2
simon@diablo:~$ cat htpasswd 
simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=

Их можно легко перевернуть - преобразовать в шестнадцатеричный дайджест:

>>> "".join("%02x" % ord(c)
...      for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'

, а затем использовать онлайн-базу хеш-данных.

2 голосов
/ 14 ноября 2010

Утилита htpasswd уже использует соли в большинстве случаев:

Форматы crypt () и MD5 переставляют представление, добавляя случайную строку соли, чтобы проводить словарные атаки противпароли сложнее.

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

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

...