Есть ли ваш пароль в утечке данных?
Утечка данных — это когда база паролей сервиса вырывается наружу, а корпус утечек — это собрание паролей, добытых из сотен таких побегов, проиндексированное так, чтобы любой мог спросить, есть ли среди них конкретный пароль. Если ваш там есть, у злоумышленников он уже есть: он лежит в словарях, которые автоматически перебираются на каждой странице входа, до которой они могут добраться. Эта статья объясняет, как проверка работает, ни разу не раскрывая пароль, что на самом деле означает число “найден 52 миллиона раз”, почему “не найден” — не справка о здоровье, и почему нельзя вставлять пароль в чат-бот, чтобы спросить, безопасен ли он. Чтобы выполнить проверку, воспользуйтесь Проверкой утечки пароля.
Что такое корпус утечек
Каждая крупная утечка оставляет один и тот же остаток: базу имён пользователей и паролей, обычно хранящихся в виде хэшей, скопированную из систем компании и переданную дальше, проданную или опубликованную. По отдельности эти базы — доказательство провала одной компании; собранные вместе, очищенные от дублей и проиндексированные, они становятся чем-то другим — переписью паролей, которые люди реально используют. Корпус Pwned Passwords от Have I Been Pwned, который опрашивает проверщик этого сайта, содержит более миллиарда паролей из сотен утечек и растёт каждый раз, когда появляется новая утечка. Это не список слабых паролей, составленный теоретиками. Это запись паролей, которые реальные люди выбрали, ввели и потеряли.
Вот почему корпус — такое безжалостное зеркало. Пароль, который вы придумали за пять секунд, — имя плюс год рождения, спортивная команда плюс восклицательный знак, проход по клавиатуре с цифрой в конце — с большой вероятностью уже придумали в точно такой же форме тысячи других людей, и если кто-то из них использовал его на взломанном сервисе, он уже в корпусе. Злоумышленники не угадывают пароли по одному, как это делал бы человек. Они занимаются credential stuffing: берут список утёкших пар логин-пароль или словарь утёкших паролей и перебирают их автоматически, миллионы попыток в час, на страницах входа повсюду. Пароль в корпусе — это пароль, который уже есть в списке.
Как работает проверка из пяти символов
Проверить пароль по базе в миллиард записей звучит так, будто для этого нужно отправить пароль кому-то, — и годами это было честным возражением против каждого сервиса проверки утечек. Решение — приём под названием k-анонимность, и его достаточно просто изложить в одном предложении: сервис никогда не узнает, о каком пароле вы спрашивали, потому что никогда не видит его достаточно, чтобы отличить. Ваш пароль хэшируется в браузере с помощью SHA-1, что даёт 40-символьный отпечаток. Сервису отправляются только первые 5 символов этого отпечатка. Сервис возвращает все суффиксы отпечатков, разделяющие эти 5 символов, — обычно около восьмисот, — а ваш браузер ищет собственный суффикс в этом списке локально, на вашем устройстве.
Пять символов — несущее число. У 5-символьного шестнадцатеричного префикса около миллиона возможных значений, поэтому каждый префикс в корпусе на миллиард записей разделяют примерно тысяча паролей — похожих достаточно, чтобы сервис не мог идентифицировать ваш пароль, и при этом достаточно мало, чтобы ответ умещался в один небольшой ответ. Ничто о самом пароле не пересекает сеть: ни пароль, ни его полный хэш, ни даже намёк на его длину. Тот же дизайн — причина, по которой проверке не нужны ни учётная запись, ни ключ API, ни заметный лимит скорости, и по которой ответы можно кэшировать неделями: ответ для префикса одинаков для всех, кто спрашивает. Проверка утечки пароля на этом сайте реализует ровно эту модель, в браузере, причём хэш вычисляется локально, прежде чем что-либо будет отправлено.
Что означает “найден N раз” — и что делать
Число больше нуля означает, что пароль встречался в утечках столько раз, и это число — прямая мера того, насколько рано его будут пробовать. Число в миллионы — сам “password” встречался более пятидесяти миллионов раз — означает, что пароль входит в число самых первых догадок при каждом запуске credential stuffing, и его следует сменить везде, где он используется, начиная с учётных записей, которые защищают остальные: сначала почта, затем банк, затем пути восстановления пароля. Маленькое число — тоже не оправдание. Даже одно появление означает, что пароль уже есть в словаре злоумышленника, и, как правило, это ещё и признак того, что пароль следует угадываемому шаблону — тому же шаблону, который поместил в корпус тысячи похожих рядом с ним.
Решение при любом числе одно: замените пароль уникальным, который вы больше нигде не использовали, и сохраните его в менеджере паролей, а не в голове. Человеческая память — причина, по которой существуют повторно используемые пароли: никто не может запомнить сотню разных случайных строк, — а менеджер — это инструмент, который делает уникальность доступной. Сгенерируйте замену с помощью Генератора паролей, сохраните её в менеджере, а затем смените пароль на каждом сервисе, где использовался старый, начиная с тех, которые позволили бы злоумышленнику сбросить остальные. Если один и тот же пароль защищал несколько учётных записей, считайте их все скомпрометированными: злоумышленники пробуют утёкший пароль на каждом сервисе, до которого могут добраться, а не только на том, откуда он утёк.
Чего не означает “не найден”
Ноль — хорошая новость с жёстким ограничением. Он означает, что пароль не встречался в утечках, которые знает этот корпус, — и не более того. Это не означает, что пароль надёжен: короткий пароль, собранный из словарного слова и цифры, может отсутствовать в корпусе и всё равно пасть под атакой перебора за считаные минуты, потому что для угадывания не нужно, чтобы пароль сначала утёк. Это не означает, что пароль безопасен: утечкам нужны месяцы или годы, чтобы всплыть, а пароль, сидящий в несообщённой утечке, невидим для каждого корпуса до того дня, когда он перестанет быть невидимым. И это не означает, что повторно используемый пароль в порядке: пароль, используемый на десяти сайтах, в одной утечке от потери всех десяти, что бы ни говорило сегодняшнее число.
Честный способ прочитать ноль — как одну пройденную проверку из нескольких. Пароль не известен как утёкший — это стоит знать, и это единственное, что может сказать проверка. Является ли он к тому же достаточно длинным, достаточно случайным и используемым ровно в одном месте — отдельный вопрос, и проверка не может на него ответить. Стандарт, которого стоит придерживаться, — тот, что приведён в руководстве NIST по запоминаемым секретам ниже: отдавать предпочтение длине, а не правилам сложности, никогда не требовать периодических смен ради самих смен и проверять новые пароли по корпусам утечек в момент их выбора — именно та проверка, которую описывает эта статья. Пароль, который длинный, случайный, уникальный и не найден, — хороший пароль. Уберите любое из этих четырёх свойств, и ноль перестанет значить очень многое.
Никогда не вставляйте пароль в чат-бот
Самый опасный способ спросить “безопасен ли мой пароль?” — вставить пароль в чат-бот или ИИ-ассистент и спросить его напрямую. Чат сохраняет стенограмму: ваш пароль окажется на чужих серверах, будет храниться согласно их политике хранения, использован для обучения или донастройки моделей и, возможно, процитирован дословно — в последующем ответе, совершенно другому человеку. То же самое относится к любому сайту, который просит ввести пароль в его форму и обещает его оценить: если страница не хэширует пароль локально и не показывает механизм, как это делает проверщик на этом сайте, считайте, что пароль отправляется, сохраняется и записывается в журнал. Проверка утечек стоит того именно потому, что её можно сделать, никому не передавая секрет, — и в тот момент, когда вы вставляете секрет в чат, чтобы спросить о нём, вы создаёте то самое раскрытие, которое проверка существует, чтобы обнаружить.
Правило обобщается. Пароли, ключи API, токены и приватные ключи — всё это вещи, которые никогда нельзя вводить в чат, тикет, сообщение на форуме или общий документ в сыром виде, — поэтому на этом сайте есть также Secret Redactor, чтобы удалять их из текста перед тем, как поделиться им, и сопутствующая статья о маскировании секретов перед вставкой. Когда секрет действительно должен перейти из рук в руки, отправьте его через менеджер секретов или истекающую одноразовую ссылку для просмотра, в отдельном канале от обсуждения. А когда вам нужно узнать, утёк ли пароль, используйте механизм, построенный для этого вопроса: вычислите хэш локально, отправьте пять символов и сопоставьте остальное на собственном устройстве. Это и есть вся проверка, и это единственная форма вопроса, которая не отвечает сама на себя, создавая новую утечку.