Во-первых, контекст: я пытаюсь создать инструмент на основе командной строки (Linux), который
требуется логин. Аккаунты этого инструмента не имеют ничего общего с
учетные записи системного уровня - ничего из этого не выглядит в /etc/passwd.
Я планирую хранить учетные записи пользователей в текстовом файле в том же формате (примерно), что и /etc/passwd.
.
Несмотря на то, что не использовались файлы паролей системного уровня, использование crypt казалось
быть хорошей практикой, в отличие от хранения паролей в
в открытом виде. (Хотя crypt, конечно, лучше, чем хранить пароли в
Открытый текст, я открыт для других способов сделать это.)
Мои знания склепа основаны на этом:
https://docs.python.org/2/library/crypt.html
Документация, кажется, требует чего-то, что невозможно:
рекомендуется использовать полный зашифрованный пароль в качестве соли при проверке
для пароля. "
А? Если я создаю зашифрованный пароль (как при создании пользователя
запись) как я могу использовать зашифрованный пароль в качестве соли? Это
еще не существует (Я предполагаю, что вы должны использовать ту же соль для создания и проверки пароля.)
Я пытался использовать незашифрованный пароль в качестве соли. Это делает
работа, но есть две проблемы; одного легко преодолеть, а одного серьезного:
1) Первые две буквы незашифрованного пароля включены в
зашифрованный пароль. Вы можете исправить это, не написав первые два
символов в файле:
user_record = '%s:%s:%s' % (user_name, crypted_pw[2:], user_type)
2) При использовании открытого текста в качестве соли, вы, казалось бы,
уменьшение количества энтропии в системе. Возможно я
недопонимание назначения соли.
Лучшая практика, которую я смог извлечь, - это использовать первые два
символы из имени пользователя в виде соли. Будет ли это уместно,
или я что-то упустил, что делает это плохим ходом?
Мое понимание соли заключается в том, что она предотвращает предварительный расчет пароля
хеши из словаря. Я мог бы использовать стандартную соль для всех
пароли (такие как мои инициалы, «JS»), но это, кажется, менее
бремя для атакующего, чем использование двух символов от имени пользователя каждого пользователя.