Сейчас моя система входа в систему:
- Пароль должен иметь длину не менее 8 символов и содержать по крайней мере одну букву верхнего и нижнего регистра, номер и символ.
- Пароль не может содержать имя пользователя в качестве подстроки.
- Имя пользователя, соленый + хешированный (с использованием SHA2) пароль, хранящийся на db.
- Nonce (соль) уникален для каждого пользователя и сохраняется как открытый текст вместе с именем пользователя и паролем.
- Весь процесс входа в систему можно выполнить только через TLS
Как вы оцениваете эффективность следующих мер по повышению безопасности?
- Увеличить длину пароля
- Принудительно изменить пароль на каждый
X
период времени, а новый пароль не может быть последнимY
предыдущими паролями -
Увеличить размер nonce от 32 байт до 64 байт(удалено для бесполезности) - Зашифруйте соль с помощью AES с ключом, доступным только для приложения, выполняющего аутентификацию
- Повторно переименуйте пароль несколько раз
- Используйте соль, которая содержит комбинацию более длинной соли со всей соли + уникальной потребительской соли на db.
Я не очень люблю 1 и 2, потому что это может неудобно для пользователя. 4 и 6, конечно, эффективны только тогда, когда злоумышленник скомпрометировал db (например: через SQL-инъекцию), но не в файловую систему, в которой находится приложение.