У центральных и графических процессоров разная архитектура и разные сценарии использования. ЦП — это «мозг» большинства наших электронных устройств. Они хорошо справляются с множеством различных задач. Это процессоры очень общего назначения, координирующие широкий спектр задач, которые выполняет компьютер. С другой стороны, графические процессоры — гораздо более специализированные вычислительные системы. Они предназначены для эффективной обработки 3D-изображений, но визуализация графики — это очень большая вычислительная нагрузка на матричную арифметику. Типы вычислений, в которых графическим процессорам нет равных, называются параллельными вычислениями, то есть это задачи, которые можно разделить на меньшие, независимые вычисления и выполнять одновременно. И этому потенциалу находится нетипичное применение.
В этом 90-секундном видео, где разрушители мифов Адам Сэвидж и Джейми Хайнеман показывают робота-художника, которого они построили, чтобы проиллюстрировать работу параллельных вычислений.
Вообще говоря, чем больше мелких независимых частей, на которые может быть разбита задача, тем быстрее более крупное вычисление будет выполнено. Количество частей, на которые может быть разбита исходная задача, в значительной степени определяется количеством ядер в графическом процессоре.
Если посмотреть на то, как количество ядер в графическом процессоре меняется со временем, видно, что последние несколько лет оно растёт экспоненциально. И в то время как большинство центральных процессоров имеет несколько десятков ядер, графические процессоры насчитывают тысячи ядер. В новейших высокопроизводительных графических процессорах компании Nvidia более 10 000 ядер.
Этот беспрецедентный рост привёл к тому, что разработчики начали изучать возможности применения графических процессоров не только для графической обработки, но и для того, что теперь известно как «неспециализированные вычисления на графических процессорах» (GPGPU).
Чтобы помочь разработчикам использовать все возможности графических процессоров и позволить центральным и графическим процессорам обрабатывать данные в двух направлениях, компания Nvidia создала программную платформу CUDA, которая облегчает разработчикам создание приложений с использованием API.
Они всегда сотрудничают с разработчиками в целях реструктуризации алгоритмов, используемых в их приложениях, чтобы использовать аппаратное обеспечение Nvidia с максимальной отдачей. В результате достигнута очень хорошая интеграция с широко используемыми приложениями, такими как Adobe Photoshop CC, Adobe Premiere CC и Autodesk Maya.
Платформу CUDA можно скачать бесплатно, но для работы с ней требуется графический процессор Nvidia. Также существует альтернатива с открытым исходным кодом — OpenCL, которая служит основной платформой для обработки графики на графических процессорах AMD. Компания Nvidia поддерживает OpenCL, но, так как платформа CUDA разрабатывается для работы с оборудованием Nvidia, она показывает более высокую производительность при работе на графических процессорах Nvidia.
Эти платформы позволяют разработчикам широко использовать графические процессоры не только для графической обработки, но и в приложениях, в которых очень выгодно применять параллельные вычисления, и взлом паролей — одно из них. Взлом паролей относится к задачам, которые мы называем чрезвычайно параллельными задачами. Чрезвычайно параллельная задача — это задача, которую можно тривиально разбить на более мелкие части, при этом вычисления каждой части не зависят от результатов «соседей».
Рассмотрим сценарий, в котором требуется вручную сложить две матрицы 20x20. Вы зовёте ещё 19 друзей и говорите им, что каждый из них отвечает за вычисление одной строки, а затем вы снова объединяете результаты в одну матрицу.
Поскольку каждый элемент матрицы можно рассчитать независимо, вы можете выполнять собственные вычисления, не вмешиваясь в расчёты своих друзей; все вы можете делать свои вычисления «параллельно».
Взлом паролей — это чрезвычайно параллельная задача, так как он основан на том же принципе. Я уже подробно описывал взлом паролей, но сейчас хочу описать это простыми словами.
Скажем, злоумышленники получают базу данных с миллионом различных хэшированных паролей, которые они хотят взломать.
Для простоты предположим, что:
Им известно, что приложение ограничивает пароли пользователей 10 символами.
Они могут только попытаться перебрать пароли (предположим, что нет словаря, нет масок и нет радужных таблиц).
Чтобы взломать все пароли, злоумышленникам нужно загрузить в память список всех хэшей, которые они пытаются взломать, хэшировать некоторую комбинацию символов, используя ту же функцию хэширования, которая использовалась для хэширования паролей в списке, и посмотреть, совпадает ли она с одним из хэшей в памяти.
Они должны будут повторить это для всех комбинаций символов, включая все 10 допустимых символов.
Если они проинструктируют ЦП обработать список всех возможных комбинаций, ЦП вычисляет хэши примерно с линейной скоростью, даже если на ЦП возможны параллельные вычисления, количество ядер очень ограничено по сравнению с графическими процессорами.
Однако результат вычисления одного хэша не влияет на вычисления других хэшей, поэтому мы можем ускорить этот процесс в тысячи раз, вычисляя их параллельно. Более того, скорость можно увеличить ещё больше, используя кластер с несколькими графическими процессорами.
У параллельных вычислений много других применений, многие из которых чрезвычайно ценны для общества, например прогноз погоды для сельского хозяйства, общественный транспорт и выявление спама.
Вот почему Nvidia и другие производители вкладывали значительные средства в эту область в течение последнего десятилетия, а эффект постепенного стимулирования этих достижений будет продолжать влиять на взлом паролей.
FPGA и ASIC
Увеличение скорости хэширования в 100 раз с помощью графических процессоров — плохая новость для людей, которые пытаются надёжно хранить пароли.
Однако не все алгоритмы хэширования уязвимы для атак с ускорением на основе графических процессоров.
Чтобы сделать алгоритмы хэширования более устойчивыми к таким атакам, разработчики пытаются заставить алгоритмы использовать большой объём памяти, чтобы увеличить вычислительные затраты такой атаки.
bcrypt — один из таких алгоритмов.
Когда компьютер вычисляет bcrypt-хэш, большая часть времени тратится впустую на ожидание следующей команды, которая поступает из более медленной памяти в более быструю (подробнее об этом — чуть позже), а не на вычисление хэшей.
FPGA и ASIC — это вычислительные устройства двух других типов, которые играют решающую роль в параллельных вычислениях.FPGA, или программируемые пользователями вентильные матрицы, — это интегральные схемы, которые после изготовления можно перепрограммировать под конкретные задачи. Такое оборудование может быть оптимизировано для конкретного применения.
Это, в свою очередь, позволяет обеспечить массовый параллелизм при гораздо меньших затратах энергии, хотя тактовые частоты на таких микросхемах намного ниже, чем у современных центральных процессоров.
С другой стороны, ASIC, или интегральные микросхемы специального назначения, — это «фиксированные» интегральные схемы для специализированного применения. Данное аппаратное обеспечение разработано в расчёте на одно применение и не может делать ничего другого, но то, для чего разработано, оно делает очень хорошо.
Графические процессоры фактически служат примером специализированных ASIC-микросхем. Вначале они были созданы строго для вычислений при решении задач визуализации. Только через некоторое время, в конце 2000-х, когда вышла платформа CUDA, они начали становиться более программируемыми.
Обратная сторона заключается в том, что разработка заказных микросхем обходится дорого, так как помимо производственных затрат требуются затраты на исследования и разработку.
Оправдать инвестиции производителя может только достаточно большой спрос на такие микросхемы. В качестве альтернативы такие микросхемы должны быть полезны покупателю в какой-нибудь прибыльной деятельности, чтобы он мог получить прибыль от вложения своих денег.
Вот почему вы, вероятно, слышали о ASIC-микросхемах для майнинга биткойнов. Эти микросхемы могут делать только одно — вычислять двойные хэши SHA256, а в настоящее время майнинг биткоинов достаточно прибылен, чтобы оправдать их производство.
В начале 2010-х годов ASIC-микросхемы стали де-факто стандартным оборудованием установок для майнинга биткойнов, свергнув с трона кластеры из нескольких высококлассных графических процессоров, потому что они в этом деле были гораздо эффективнее.
Можно ли ASIC-микросхемы вместо майнинга биткоинов использовать взлома паролей?
Как я уже сказал, ASIC-микросхемы разрабатываются с нуля с одной целью, и в случае установок для майнинга биткойнов эта задача заключается в вычислении двойных хэшей SHA256.
Такие установки не могут делать ничего, кроме этого. Они полезны, только если пароли, которые пытаются взломать злоумышленники, были дважды хэшированы по алгоритму SHA256, что маловероятно.
Непрактично (но не невозможно и может стать реальностью в будущем, когда технология станет более доступной) иметь такую установку для взлома паролей, потому что конфигурация ASIC-микросхемы может не соответствовать параметрам, которые разработчик приложения использовал для хранения паролей.
Злоумышленникам потребовалось бы настроить по одной ASIC-установке для каждой функции хэширования и настраиваемой функции, такой как bcrypt, — для каждой вероятной комбинации параметров. Мало того, что это трудно сделать с точки зрения разработки, но атака также должна иметь смысл с финансовой точки зрения.
FPGA-установки для взлома Bcrypt-паролей
Несмотря на то что FPGA менее эффективны, чем ASIC, для специализированного применения, такого как вычисление хэшей по определенному алгоритму, они компенсируют это большей дешевизной и универсальностью.
Давайте посмотрим, как FPGA смогут преодолеть ограничения графических процессоров при взломе bcrypt.
С общими функциями хэширования, такими как SHA1 и MD5, вероятно, придётся попрощаться из-за графических процессоров, так как эти алгоритмы не создают узкие места в памяти, поскольку они не были предназначены для хранения паролей.
Для вычисления bcrypt-хэша процессору придётся постоянно обращаться к инструкциям, хранящимся в памяти. У каждого ядра есть быстрый, но небольшой объём памяти (кэш L1). Если в памяти L1 недостаточно места для вычисления хэша, данные должны храниться в более медленной основной оперативной памяти графического процессора, общей для всех ядер.
Передача этих данных обходится дорого, и это создаёт огромное узкое место для количества хэшей в секунду, которое может вычислить компьютер. Большая часть времени вычисления bcrypt-хэшей тратится впустую в ожидании поступления данных из основной памяти в более быструю память, чтобы можно было вычислить хэш.
Это не проблема для FPGA-микросхем, потому что у них более чем достаточно памяти L1 для работы с bcrypt-хэшами.
Персонал службы уведомлений о нарушении паролей Scattered Secrets хотел проверить это, поэтому они построили кластер из FPGA-микросхем, способный взламывать bcrypt примерно в 35–40 раз быстрее, чем современные высокопроизводительные графические процессоры, используя только около 5% мощности.
Используя RTX 2080Ti в качестве бенчмарка, они получили 54 тысячи bcrypt-хэшей в секунду на своей тестовой установке, в то время как установка, которую они построили с 18 четырёхъядерными FPGA-платами Spartan-6 LX150, выдавала 2,1 миллиона bcrypt-хэшей в секунду.
Имейте в виду, что это не самые современные FPGA-микросхемы: они были введены ещё в 2011 году. Эти платы были популярным инструментом, потому что они поддерживали Jack The Ripper, популярное программное обеспечение для взлома паролей. Поскольку приложения для взлома паролей начинают поддерживать новые микросхемы, скорость таких атак будет только увеличиваться.
Заглядывая в будущее
Илон Маск уже говорил, что машинное обучение и ИИ будут на переднем крае нашего технологического развития, по крайней мере в течение следующего десятилетия, и они в значительной степени полагаются на параллельные вычисления.
Всегда будут существовать финансовые стимулы разработки новых технологий для решения сложных проблем, с которыми мы сталкиваемся как общество. Число ядер в одном графическом процессоре выросло с 1 ядра в 1995 году до 24 ядер в 2006 году, затем подскочило до 128 ядер в 2009 году и продолжило расти экспоненциально до 10 000 и выше к 2021 году.
По мере возникновения новых технологий мы должны следить за тем, как они изменят ландшафт безопасности, потому что это игра в кошки-мышки между хорошими и плохими парнями.
Одно из наиболее перспективных в будущем разработок в области параллельных вычислений — квантовые вычисления.
По мере приближения к концу закона Мура (который гласит, что число транзисторов в микросхемах удваивается каждые два года), исследователи пытаются найти способы сохранения экспоненциального роста скорости, с которой мы можем делать сложные вычисления. Квантовые компьютеры могут полностью революционизировать искусственный интеллект (которому уделяется время на курсах Machine Learning и Machine Learning и Deep Learning), конечно же, индустрию безопасности, которой посвящен наш отдельный курс по Этичному хакингу.
Узнайте, как прокачаться в других специальностях или освоить их с нуля:
Другие профессии и курсы
ПРОФЕССИИ
КУРСЫ