Содержание статьи
info
Я не ставлю перед собой цель точно и детально описать работу таких сложных систем, как центральный и графический процессоры или их ядра. Все описания упрощены, но без отхода от реальности. Короче, мы будем разбирать только те аспекты, которые помогут нам принимать решения при бруте хешей.
Хешкрекинг (от английского hash cracking — буквально «раскалывание хешей») — это область криптоанализа (или информационной безопасности, смотря с какой стороны подойти), где цель — найти значение сообщения, которое было пропущено через хеш‑функцию. Для нас хешкрекинг актуален именно из‑за того, что самый распространенный способ хранения паролей именно в хешах. Поэтому его часто называют восстановлением паролей.
Сразу отметим, что хешкрекинг — это тема строго офлайновая, она никак не связана со спреингом паролей (password spraying) или брутфорсом (brute force) при атаках на системы аутентификации.
Для хешкрекинга нужно иметь некий хеш, для которого мы будем подбирать исходное значение. Вообще, сам термин вводит нас в заблуждение: в реальности никто хеши не раскалывает. Хеш‑функция необратима, и наша задача — перебирать потенциальные пароли и считать хеши от них, а потом сравнивать с тем хешем, что у нас есть.
Наши шансы крайне малы, но есть методы, которые помогут начать систематически выигрывать в этом бою. Но, как ни крути, нам придется вычислять хеши, сотни или даже сотни тысяч хешей.
В девяностые и начале нулевых никому бы и в голову не пришло спорить о том, что является вычислительным сердцем компьютера, ответ был бы очевиден — центральный процессор (он же ЦП или CPU). Но сегодня все не так однозначно: графические процессоры (ГП или GPU) стали такими мощными, что в некоторых задачах ЦП уже сложно конкурировать.
Как работает CPU?
Современный ЦП — это кремниевая пластина, на которой в первую очередь размещаются вычислительные ядра, а остальное пространство отдано под многоуровневую кеш‑память, модули безопасности (они следят, чтобы разные ядра не занимались одним и тем же и не перегревались) и шины соединения с периферийными устройствами.
Здесь важно понять, что ЦП — это просто машина для выполнения написанных людьми инструкций. Сам он не знает, что делает, и в конечном итоге просто переключает состояние ячеек по сложным правилам. При этом немалая часть чипа занята не конкретно вычислениями, а их администрированием.
Внутри ядра процессы подчинены архитектуре фон Неймана: извлечение из памяти → декодирование → выполнение → запись в память. За первые два этапа отвечает фронтенд ядра (он, помимо прочего, содержит еще и модули ветвления и параллелизации команд) и модуль внеочередного выполнения команд.
Дальше в бой вступает ядерный бэкенд, где инструкции попадают в вычислительное сердце ЦП — арифметико‑логическое устройство (ALU). Одно ALU может выполнять одну или несколько операций смещения или перехода, арифметических или логических операций, а иногда и целые выражения (FMA, DIV, MUL). Также ALU может работать с целыми числами (приставка INT), с десятичными (FPU или приставка FP) и с числами разных размеров (FP32, FP64, ...).
Представляешь, какое количество разношерстных ALU должно уместиться в одно маленькое ядро? Но в ядре есть еще и разные уровни памяти, а также дорожки коммуникации между всем этим добром.
Поскольку ЦП должен раз за разом выполнять любые инструкции, то его ядра большие и универсальные: с громоздким фронтендом и ALU всех типов. Площадь на кристалле ограничена, поэтому число таких ядер тоже ограничено.
Почему не делают большие CPU
Резонный вопрос: почему бы не сделать CPU большего размера?
- Во‑первых, ЦП — это монолитный блок. Чипы производятся на пластинах диаметром ~30 см, у которых всегда есть дефекты. Цена ошибки довольно высока: иногда приходится выбрасывать весь чип. Поэтому чем больше чипов мы сможем разместить на пластине, тем больше у нас останется качественных изделий. Ничего личного, просто бизнес.
- Во‑вторых, обычному пользователю более чем достаточно текущих мощностей, поэтому смысла вкладываться в разработку кардинально новой архитектуры нет (для желающих существуют ЦП более чем со 100 ядрами, но они, очевидно, сильно дороже).
- Наконец, больший чип означает большее расстояние и большее сопротивление для сигнала, что влияет на скорость и ограничивает тактовую частоту, не говоря уже о тепле, которое нужно отводить.

Великий и могучий GPU
Компьютеры продолжали бы весело молотить числа на своих процессорах, но в семидесятые начали появляться дисплеи для вывода графики. Просчет геометрии сначала выполняли полностью на ЦП, но постепенно он становился узким горлышком при работе с графикой. Поэтому стали появляться отдельные чипы для ускорения 2D- и 3D-графики.
В 1984 году компания IBM выпустила PGC, который состоял из трех отдельных плат, каждая — со своим чипом и памятью. По сути, это был первый GPU. А разработчики компьютера Amiga 1000 в 1985 году полностью сняли с ЦП вычисление графики. Впервые термин GPU появился только в 1994 году в документации к первой PlayStation, а популяризировала термин Nvidia, выпустив GeForce 256, которая считается первым GPU, каким мы его знаем сегодня. То есть современный GPU — это довольно молодое изобретение.
В общем, ЦП способен считать графику, но ГП делает это быстрее и эффективнее, давая ЦП больше времени заниматься другими задачами.
О GPU
Давай внесем ясность: графический процессор (ГП или GPU) — не то же самое, что и видеокарта. Так же как ЦП — не то же самое, что и материнская плата. Поэтому говорить мы будем именно о ГП, чтобы сравнение с ЦП было корректным.
ГП бывает интегрированным (iGPU) и дискретным (dGPU). iGPU занимает примерно 40% всего чипа ЦП и делит с ядрами общие память, питание и охлаждение.
Все ЦП производства Intel без суффикса F имеют iGPU, у AMD все более запутанно, но это лишний раз указывает нам на то, что большая часть чипа ЦП занята совсем не ядрами. dGPU находится на видеокарте, имеет свою память, которая быстрее, чем у ЦП, свое питание и охлаждение.
Важно понять, что GPU не выполняет работу CPU, а выступает сопроцессором. При получении задачи ЦП делегирует ее на внешний для себя GPU, при этом продолжая контролировать ее исполнение.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
