Шифровальная машина 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
Сравнение функций хэширования и их безопасности. Адаптируемый коэффициент (work factor) означает, что нагрузку на CPU можно увеличить. Вычисления с расходом памяти (memory-hardness) означает, что кроме CPU алгоритм хеширования масштабируется и по памяти

Производительность брутфорса


За последние 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)


  1. Algrinn
    29.09.2023 18:21
    +1

    Да, умный Spring Security в Java запрещает нам пользоваться md5 хэшем и требует bcrypt :-)


  1. BugM
    29.09.2023 18:21

    Ода bсrypt вышла. Заслуженно. 25 лет назад придумали и до сих пор ничего принципиально лучше не сделано.


    1. AetherNetIO
      29.09.2023 18:21

      bcrypt плохо ускоряется на GPU, но на ASIC вполне. Scrypt и Argon2 не ускоряются.

      так что лучше уже сделано


      1. BugM
        29.09.2023 18:21
        +2

        bcrypt плохо ускоряется на GPU, но на ASIC вполне

        Расскажете почему и как сделать? Если много текста лучше статьей. Прям хорошая статья выйдет.


        1. 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!

          Ещё в тему.

          bcrypt детали.

          argon2 is weaker than bcrypt for 100ms

          bcrypt на cpu/gpu/fpga/epiphany


          1. BugM
            29.09.2023 18:21

            Спасибо.

            Выглядит слабенько

            Даже с учетом пропорционального ускорения всего за 10 лет с этой таблички. Немассовые FPGA стоят очень дорого. Чтобы оно окупилось нужна разница с GPU на порядки больше.

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