Как следует защищаться от атаки паролем "грубой силы" в автономном режиме? - PullRequest
3 голосов
/ 14 апреля 2009

Мне было интересно, если это обычная практика - подсолить и хэшировать пароль типа

E (заполнение || хеш (соль || пароль))

где || Конкатенация и E использует RSA, например. В первую очередь я задаю этот вопрос для транспортировки базы паролей (а не онлайн-хранилища, где на сервере всегда будет личный ключ для расшифровки зашифрованного пароля).

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

Это не типичная проблема, но я не смог найти ссылку на того, кому нужно правильно транспортировать базу паролей и защищаться от автономной атаки.

Ответы [ 6 ]

4 голосов
/ 14 апреля 2009

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

Т.е.. используйте что-то вроде PGP для транспорта.

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

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

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

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

Атаки на такие зашифрованные файлы с гораздо меньшей вероятностью будут успешными, если вы выберете надежный алгоритм и реализацию шифрования (PGP, GPG и т. Д.), Чем придумаете что-то самостоятельно или, по крайней мере, упростите его для злоумышленник находит отдельные пароли небольшими порциями.

2 голосов
/ 14 апреля 2009
  1. Используйте пароли, которые не отображаются в словаре.
  2. Использование Усиление ключа .

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

1 голос
/ 29 января 2013

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

Это действительно имеет значение, если вы можете угадать миллионы хешей в секунду или только несколько десятков.

У CodingHorror есть отличная статья на эту тему: http://www.codinghorror.com/blog/2012/04/speed-hashing.html

1 голос
/ 14 апреля 2009

Смысл в том, что вы будете вводить пароль тем же способом, когда сравниваете его при входе в систему и при сохранении пароля. Хорошая соль помешает кому-то выполнить стандартный поиск, а также усилит хэш против атак по словарю. Если соль и пароль будут объединены в хеш, это значительно уменьшит использование автономных атак, и вам не нужно будет предпринимать никаких особых мер предосторожности для его защиты.

0 голосов
/ 14 апреля 2009

Все остальные ответы хороши, но я бы добавил:

Принудительное изменение пароля на регулярной основе.

Это верный способ отразить оффлайн атаки грубой силы. Сложнее поразить движущуюся цель.

0 голосов
/ 14 апреля 2009

если вы управляете функцией, которая пытается расшифровать базу данных, установите таймер в 1 секунду между повторными попытками?

это наверняка немного замедлит грубую силу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...