Безопасно ли посолить пароли на базе 64?

В веб-приложении я читаю несколько байтов из /dev/urandom, чтобы получить случайную соль для хэширования паролей.

Это хорошо для base64 соли до хеширования? Потому что в кодировке base64 иногда добавляется some = в конце, что может привести к известной атаке открытого текста. Но это может не быть проблемой, потому что соль все же хранится в БД, или я ошибаюсь?

Влияет ли это на безопасность приложения?

4 ответа

Решение

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

Пока ваша соль имеет разумную длину, вы, вероятно, в порядке.

Это зависит от используемого алгоритма хеширования, какой алфавит символов принимается как соль. Например, BCrypt будет принимать следующие символы, которые почти совпадают с текстом в кодировке base64:./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,

Известная атака обычным текстом здесь не проблема, поскольку мы ничего не шифруем, особенно соль.

Нет, это не безопасно.

Вы не должны использовать хеш-функции для паролей пользователей. Вместо этого вы должны использовать основанную на пароле функцию получения ключа, такую ​​как PBKDF2 или scrypt с соответствующим количеством итераций, чтобы замедлить хэширование, что снижает риск атак методом перебора.

В чем разница между функцией получения ключа и хэшем пароля?

Если вы используете PHP для своего веб-приложения:

Нужно ли base64 кодировать мою соль (для хеширования паролей)?

Безопасный хэш и соль для паролей PHP

Цель соли - убедиться, что каждый пароль хранится по-разному. То есть, если два человека используют один и тот же пароль, хранение двух паролей не идентично. Это защищает от радужных и хэш-таблиц атак, если злоумышленнику удается извлечь данные из таблицы паролей.

Хотя для Base64 нет никаких причин - хеш должен быть последовательностью байтов, а не текстом ASCII - это не должно влиять на безопасность ваших хешированных паролей. Да, будут использоваться ограниченные последовательности байтов (только те, которые представляют действительные символы ASCII), однако ваш хэш будет длиннее и будет представлять тот же диапазон возможных значений.

Другие вопросы по тегам