Вопрос

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

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

Это было полезно?

Решение

По умолчанию HTPASSWD использует стандарт крипта Функция и, таким образом, пароли уже солены - обратите внимание на этом примере, что у обоих пользователей один и тот же пароль, но хэси отличаются:

Simon @ Diablo: ~ $ htappasswd -b-c htpasswd simon abcd Добавление пароля для пользователя simon simon @ diablo: ~ $ htpasswd -b htpasswd simon2 abcd Добавление пароля пользователя simon2 simon @ diablo: ~ $ cat htpasswd simon:NWVM / LCCXQ64ESimon2:2i.lbzsrquln6.

(Обратите внимание -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 -b -c htpasswd simon abcd Добавление пароля пользователя simon simon @ diablo: ~ $ cat htpasswd simon:$ APR1 $ mfvnbvmg $ iihihoah9vcimg5g.8eva /

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

htpasswd -s хранит переваривание SHA-1 без соли; Это, кажется, для совместимости с Netscape / ldif:

Simon @ Diablo: ~ $ HTAPASWD -S -S -B-C-HTPASSWD SIMON ABCD Добавление пароля пользователя Simon Simon @ Diablo: ~ $ HTPASSWD -S -S -B HTAPASWD SIMON2 ABCD Добавление пароля пользователя Simon2 Simon @ Diablo: ~ $ CAT HTAPASWD SIMON: {Sha} gf6l / odxbd7likjvjleec4kres8 = simon2: {sha} gf6l / odxbd7likjvjleec4kres8 =

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

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

Затем используйте AN Онлайн-база данных Hash.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top