Шифровальная машина M-209, на основе которой создана первая в истории функция хэширования
crypt
в UnixПрошло 25 лет с момента изобретения алгоритма хэширования
bcrypt
(1997), но он до сих пор считается одним из самых стойких к брутфорсу хэшей.Вот уже несколько десятилетий некоторые специалисты прогнозируют, что аутентификация будет производиться ключами/сертификатами. Но этого до сих пор не случилось. Пароли остаются неотъемлемой частью систем информационной безопасности. Вообще, они широко использовались ещё до изобретения компьютеров, так что в таком долгожительстве нет ничего удивительного.
Если посмотреть в историю, то концепция компьютерных паролей возникла на заре многопользовательских вычислительных систем, когда потребовался способ аутентификации и защиты данных. В Массачусетском технологическом институте в 1960-е разработали систему Compatible Time-Sharing System (CTSS) с парольной аутентификацией аккаунтов, одну из первых в мире таких систем. Любопытно, что это произошло несмотря на упорные возражения Ричарда Столлмана, который пытался противостоять введению паролей в MIT в 1970-е. Об этом вспоминал Стивен Леви в документальной книге «Хакеры: герои компьютерной революции».
Однако истинные истоки современной парольной защиты можно отнести к разработке Unix и её нативной функции хэширования
crypt
. Первоначальная версия crypt
в Unix (6th Edition) была реализована Робертом Моррисом и базировалась на шифровальной машине Хагелина (модель M-209).Конвертер M-209B Бориса Хагелина
О легендарном изобретателе шифровальных машин Борисе Хагелине рассказывали на Хабре. Родившийся в Российской империи, этот мальчик отучился в Баку, а отправился на дальнейшую учёбу за границу, где и стал знаменитым благодаря созданию уникальных шифровальных машин и основанию швейцарской компании Crypto AG в 1952-м, в течение десятилетий мирового лидера на рынке криптографических устройств.
Возвращаясь к Unix, специалисты ещё в 70-е годы осознавали проблему слишком быстрого выполнения функции
crypt
. В Unix (7-я редакция) функция была усовершенствована путём введения 12-битной соли и итерации шифра Data Encryption Standard (DES) для хэширования пароля. В результате использования соли получилось семейство из 2¹² различных хэш-функций, и каждый пользователь случайным образом выбирал из этого семейства свой пароль. Цель использования соли заключалась не только в том, чтобы обеспечить уникальность хэшей даже для одинаковых паролей, но и в том, чтобы существенно затруднить атаки с предварительным вычислением хэша. Хэшированный пароль с солью хранился в файле паролей, что позволяло системе аутентифицировать пользователей, не храня пароли в открытом виде.Для своего времени
crypt
считался безопасным, однако развитие вычислительных мощностей и экспортные ограничения на криптографию в США открыли дорогу новым алгоритмам хеширования паролей, таким как MD5crypt (1994).Запрещённый к экспорту из США код RSA распечатан на футболке в знак протеста против ограничения свободы слова. Одетый таким образом гражданин имел право выехать за границу и показать футболку иностранным гражданам
Опасения по поводу безопасности новых алгоритмов привели к разработке
bcrypt
в 1997 году. В нём впервые реализовали концепцию адаптивного хеширования, благодаря которой атаки методом брутфорса и по словарю стали вычислительно более сложными (алгоритм защищён от будущего роста производительности оборудования). С момента своего появления в июне 1997 года в составе OpenBSD 2.1 и публикации в USENIX в 1999 году bcrypt
оказал глубокое влияние на индустрию безопасности.Оригинальная научная статья с описанием bcrypt (1999)
В целом четверть века развития функций хэширования и индустрии брутфорса можно изобразить в такой таблице:
Безопасность | Адаптируемый коэффициент работы | Расход памяти | Год выхода | |
---|---|---|---|---|
CRYPT | Не рекомендуется | Нет | Нет | 1970-е |
MD5crypt | Не рекомендуется | Нет | Нет | 1994 |
BCRYPT | Высокая | Да | Нет | 1999 |
PBKDF2WithHmacSHA1 (RFC 2898, 2000) | От средней до высокой | Да | Нет | 2000 |
Scrypt (Персиваль, 2013) | Высокая | Да | Да | 2009 |
Argon2 (Бирюков и Дину, 2016) | Высокая | Да | Да | 2015 |
Производительность брутфорса
За последние 30 лет технологии взлома паролей и аппаратное обеспечение значительно эволюционировали. Мощность брутфорса сильно увеличилась. Стало очевидно, что нужно адаптировать алгоритмы хеширования паролей по стоимости работы. То есть сам алгоритм должен быть спроектирован таким образом, чтобы сделать нерентабельным брутфорс на современном оборудовании, а ещё лучше — с запасом прочности на годы вперёд.
Чтобы продемонстрировать этот прогресс, вот примерные оценки скорости брутфорса на компьютерах разных лет, а также в разных программах (Hashcat и John the Ripper). Следует иметь в виду, что эти цифры просто демонстрируют общий тренд, их нельзя напрямую сопоставлять из-за различий в оборудовании и ПО. Для наглядности цифры публикуются со всеми разрядами, без сокращения до «млн» и «млрд».
Год | Железо, софт | Формат хэшей | Скорость брутфорса (паролей в секунду) |
---|---|---|---|
1978 | PDP-11/70 | crypt в симуляторе M-209) | 800 |
1988 | VAX 8600 | des-crypt в оптимизации для червя Морриса | 45 |
1994 | Pentium 60 МГц | crypt на основе MD5 | 29,41 |
1999 | John the Ripper | des-crypt со сдвигом битов | 214 000 |
1999 | John the Ripper | bcrypt с коэффициентом 5 | 62,5 |
2018 | Hashcat, установка с GPU | des-crypt | 1 700 000 000 |
2018 | Hashcat, установка с GPU | MD5 | 45 400 000 000 |
2018 | Hashcat, установка с GPU | SHA-1 | 14 600 000 |
2018 | Hashcat, установка с GPU | bcrypt с коэффициентом 5 | 47 200 |
2018 | Hashcat, установка с GPU | scrypt | 1 400 000 |
2022 | Hashcat, RTX 4090 | des-crypt | 6 300 000 000 |
2022 | Hashcat, RTX 4090 | bcrypt с коэффициентом 5 | 184 000 |
Можно заметить, что с годами растёт не только сложность алгоритмов, но и производительность железа, а также эффективность специализированных программ.
Например, за 34 года скорость перебора хэшей
des-crypt
выросла с 45 штук до 6,3 млрд в секунду.В то же время старый
bcrypt
остаётся одним из самых сложных для взлома хэшей, особенно с максимальным коэффициентом сложности (work factor). Хотя формально он считается устаревшим, но на практике теоретически вполне пригоден к использованию, наряду с более современными, стойкими к брутфорсу алгоритмами scrypt
и Argon2
.Пароли навсегда
Что будет дальше?
Современные алгоритмы хеширования очень сильно снижают эффективность брутфорса. Но утечки хэшей по-прежнему представляют собой постоянную угрозу. С другой стороны, появление многофакторной аутентификации (MFA) сместило акцент на защиту учётных записей пользователей с помощью дополнительных уровней проверки, в результате чего пароли стали менее важны для безопасности.
В современном мире всё большее распространение получают облачные сервисы, где большинство важных данных хранится удалённо. Простой брутфорс малоэффективен для проникновения в такие системы, поэтому злоумышленники, как правило, используют уязвимости или социальную инженерию.
Спустя четверть века люди до сих пор полагаются на пароли как основной метод защиты компьютерной информации. С каждым годом растёт их сложность (энтропия), вводятся более сложные методы хэширования, но сами текстовые пароли/фразы остаются.
Комментарии (6)
BugM
29.09.2023 18:21Ода bсrypt вышла. Заслуженно. 25 лет назад придумали и до сих пор ничего принципиально лучше не сделано.
AetherNetIO
29.09.2023 18:21bcrypt плохо ускоряется на GPU, но на ASIC вполне. Scrypt и Argon2 не ускоряются.
так что лучше уже сделано
BugM
29.09.2023 18:21+2bcrypt плохо ускоряется на GPU, но на ASIC вполне
Расскажете почему и как сделать? Если много текста лучше статьей. Прям хорошая статья выйдет.
AetherNetIO
29.09.2023 18:21+1Своего текста нет, но вот неплохие материалы на тему:
Вот здесь рекомендации и разъяснения bcrypt vs scrypt vs argon2 в разделе "Password Hashing/Password-Based Key Derivation"
Bcrypt password cracking extremely slow? Not if you are using hundreds of FPGAs!
BugM
29.09.2023 18:21Спасибо.
Выглядит слабенько
Даже с учетом пропорционального ускорения всего за 10 лет с этой таблички. Немассовые FPGA стоят очень дорого. Чтобы оно окупилось нужна разница с GPU на порядки больше.
Стоимость взлома хеша стоит считать в деньгах. С бесконечными деньгами любой ломается. Судя по вашим ссылкам АСИКи уменьшают эту стоимость не принципиально. Или даже вообще не уменьшают.
Algrinn
Да, умный Spring Security в Java запрещает нам пользоваться md5 хэшем и требует bcrypt :-)