Окончательная модель обучена на 2 миллионах наиболее распространенных и случайно сгенерированных паролей, хорошо работает (взвешенная точность 99,4%) для паролей, не превышающих 10 символов, и может свободно использоваться через Huggingface.
В эпоху, когда киберугрозы стали более распространенными, чем когда-либо, обеспечение безопасности онлайн-аккаунтов имеет первостепенное значение. Пароли часто являются первой линией защиты от несанкционированного доступа, что делает их надежность решающим фактором в защите нашей цифровой жизни.
В этой статье я покажу, как повысить безопасность паролей, используя возможности модели преобразователя BERT (представления двунаправленного кодировщика от трансформаторов), одной из наиболее распространенных современных общедоступных моделей в области понимания естественного языка.
Первый шаг — взять общедоступный набор данных, содержащий около 1 миллиона наиболее распространенных паролей, также общедоступных доступных в Kaggle, и смешать их с равная выборка из 1 миллиона случайно сгенерированных сложных паролей длиной от 6 до 10 символов, включая строчные и прописные буквы, цифры и общие специальные символы.
Затем я использую одну из доступных предварительно обученных моделей HuggingFace для дальнейшего обучения данных — модель Google с учетом регистра BERT, которая имеет около 108 миллионов обучаемых параметров.
Окончательный код для отбора и обучения данных доступен в виде блокнота Kaggle.
Процесс обучения занимает около 45 минут с использованием NVIDIA TESLA P100 GPU, доступного для пользователей Kaggle, и повышает общую точность (на основе тестовой выборки) примерно от 50% до 99,4%:
Выбор некоторых образцов данных также показывает разумную производительность модели:

Окончательную модель можно свободно использовать через HuggingFace. Однако обратите внимание, что в размещенном API вывода из-за используемого по умолчанию (без регистра) токенизатора нет разницы между строчными и прописными буквами. Чтобы использовать модель с правильным токенизатором, необходимо вызвать модель следующим образом:
# Use a pipeline as a high-level helper - need to specify cased tokenizer
from transformers import pipeline
pipe = pipeline("text-classification", model="dima806/strong-password-checker-bert", tokenizer="bert-base-cased")
Надеюсь, эти результаты будут для вас полезны. Если у вас есть вопросы/комментарии, не стесняйтесь писать в комментариях ниже.