Есть пара моментов, которые здесь не рассматриваются, и я чувствую, что это из-за недостатка понимания того, что такое хеш, как он работает и сколько времени требуется, чтобы успешно атаковать их, используя радугу или любой другой метод. в настоящее время известно человеку ...
Говоря математически, MD5 не «сломан», если вы солите попытки хэша и дросселирования (даже на 1 секунду), ваша безопасность будет так же «сломана», как если бы злоумышленник медленно отбрасывал вашу 1-футовую твердую сталь. стена с деревянной ложкой:
Это займет тысячи лет, и к тому времени все участники будут мертвы; Есть более важные вещи, о которых нужно беспокоиться.
Если вы заблокируете их учетную запись с 20-й попытки ... проблема решена. 20 ударов на твоей стене = 0.0000000001% вероятности, что они пройдут. В буквальном смысле это лучший статистический шанс, что вы на самом деле Иисус.
![You're thinking about it wrong.](https://i.stack.imgur.com/SmEHJ.png)
Также важно отметить, что абсолютно любая хеш-функция будет уязвима для коллизий в силу того, что такое хеш-функция: «(маленький) уникальный идентификатор чего-то другого».
Когда вы увеличиваете битовое пространство, вы уменьшаете частоту столкновений, но вы также увеличиваете размер идентификатора и время, необходимое для его вычисления.
Давайте проведем небольшой мысленный эксперимент ...
SHA-2, если бы он существовал, имел бы всего 4 возможных уникальных идентификатора для чего-то еще ... 00, 01, 10 и 11. Очевидно, он будет вызывать столкновения. Вы видите проблему здесь? Хеш - это просто сгенерированный идентификатор того, что вы пытаетесь идентифицировать.
MD5 действительно очень хорош при случайном выборе числа на основе входных данных. SHA на самом деле не намного лучше; У SHA просто больше места для идентификаторов.
Используемый метод составляет примерно 0,1% от причины, по которой столкновения менее вероятны. Настоящая причина - большее битовое пространство.
Это буквально единственная причина, по которой SHA-256 и SHA-512 менее уязвимы для столкновений; потому что они используют большее пространство для уникального идентификатора.
Фактические методы SHA-256 и SHA-512, используемые для генерации хеша, на самом деле лучше, но ненамного; те же самые радужные атаки будут работать на них, если у них будет меньше битов в их идентификаторах, а файлы и даже пароли могут иметь идентичные идентификаторы с использованием SHA-256 и SHA-512, просто это намного менее вероятно, поскольку использует больше битов.
НАСТОЯЩИЙ ВЫПУСК - как вы реализуете свою безопасность
Если вы позволите автоматическим атакам достигать вашей конечной точки аутентификации 1000 раз в секунду, вы попадете в нее. Если вы дросселируете до 1 попытки за 3 секунды и заблокируете учетную запись на 24 часа после 10-й попытки, это не так.
Если вы храните пароли без соли (соль - это просто дополнительный секрет для генератора, затрудняющий идентификацию плохих паролей, таких как «31337» или «пароль») и у вас много пользователей, вы собираетесь получить взломан Если вы солите их, даже если вы используете MD5, это не так.
Учитывая, что MD5 использует 128 бит (32 байта в HEX, 16 байтов в двоичном формате), а SHA 512 занимает только 4-кратное пространство, но практически исключает коэффициент коллизий, давая вам 2 ^ 384 возможных идентификатора ... Идите с SHA 512, каждый раз.
Но если вы беспокоитесь о том, что на самом деле произойдет, если вы используете MD5, и вы не понимаете реальных, реальных различий, вы все равно, вероятно, будете взломаны, имеет смысл?