Алексей Владыкин


Have I Been Pwned

14 октября 2019

На фоне постоянных новостей об утечках из разных сервисов пользовательских данных, нередко с паролями, я озаботился безопасностью своих учетных записей.

В этом вопросе очень помог ресурс Have I Been Pwned. Вбив туда email, можно узнать, утекал ли он и из каких сервисов. Выяснилось, что мой email с сопутствующими данными утекал несколько раз.

На этом же сайте, а точнее на этой странице, можно проверить свои пароли, были ли они скомпроментированы. И хотя сайт сдела Troy Hunt, известный эксперт по безопасности, заслуживающий доверия, а от введенного пароля на сервер отправляется только хеш, и то не весь, у меня все равно не поднялась рука вводить свои пароли в форму на этом сайте.

Пришлось пойти другим путем. К счастью, для этого всё имеется. Базу всех скомпрометированных паролей, а точнее их SHA-1 или NTLM хешей, можно скачать и делать с ним локально всё, что душе угодно. Я решил сам посчитать хеши от своих паролей и поискать их в скачанной базе. К сожалению, искать в базе хеши grep’ом оказалось слишком долго: даже на SSD один grep занимал десятки секунд. Всё из-за того, что файл огромный: упакованный файл весит около десяти гигабайт, после распаковки — более 20.

Для решения этой проблемы за пару вечеров была написана программа, которая ищет в файле хеши бинарным поиском, используя тот факт, что файл отсортирован по хешам (для этого надо качать вариант "(ordered by hash)"). Двоичный поиск гораздо эффективнее последовательного и позволяет проверять по базе сотни паролей за единицы секунд.

В итоге некоторые мои пароли в базе нашлись, пришлось их поменять. Теперь мне гораздо спокойнее. А программой для поиска я решил поделиться и выложил ее на GitHub: https://github.com/vladykin/haveibeenpwned

К оглавлению блога