Се­год­ня раз­берем­ся с прак­тичес­кой сто­роной хеш­кре­кин­га: уста­новим драй­веры CUDA и OpenCL, срав­ним прог­раммы для взло­ма хешей и про­верим, есть ли раз­ница в ско­рос­ти на раз­ном железе, — ура, бен­чмар­кинг! Заод­но узна­ем, с какими метода­ми защиты паролей при­ходит­ся иметь дело хеш­кре­керам, что делать с «дороги­ми» алго­рит­мами, как пос­читать вре­мя под­бора пароля и что такое хеш­рейт.

warning

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

Хеш‑фун­кция — это матема­тичес­кая фун­кция, которая прев­раща­ет про­изволь­ный мас­сив дан­ных (со­обще­ние) в битовый мас­сив фик­сирован­ного раз­мера (хеш‑сум­му, или дай­джест). Нап­ример, хеш SHA-256 для сло­ва «пароль»:

2dbc574daca52689a24fb60e835f8c19a36400830df7350859dd32d1abaaec5d

Это 64 сим­вола в шес­тнад­цатерич­ной сис­теме, которые при перево­де в дво­ичную как раз дают 256 бит — как и ука­зано в наз­вании алго­рит­ма.

Ос­новной прин­цип хеш‑фун­кции в том, что дай­джест пос­читать лег­ко, а вот вос­ста­новить по нему исходное сооб­щение — невоз­можно.

Клас­сичес­кий при­мер: у нас есть два чис­ла — 25 и 81, их про­изве­дение рав­но 2025. Зная чис­ла, пос­читать про­изве­дение прос­то, но, зная толь­ко про­изве­дение, понять, какие имен­но это были чис­ла и было ли их вооб­ще два, уже нель­зя.

О хеш-функциях

Стро­го говоря, мы точ­но не зна­ем, обра­тима хеш‑фун­кция или нет, мы не зна­ем прос­того спо­соба ее обра­тить. Некото­рые хеш‑фун­кции в прош­лом получи­лось обра­тить, поэто­му они счи­тают­ся небезо­пас­ными, нап­ример MD5 или SHA-1, но соз­дать матема­тичес­ки доказан­но необ­ратимую хеш‑фун­кцию невоз­можно.

Так­же сто­ит понимать, что, пос­коль­ку хеш‑фун­кция при­нима­ет мас­сив любой дли­ны, а на выходе отда­ет задан­ное чис­ло битов, оче­вид­но, что из все­го мно­гооб­разия вход­ных дан­ных некото­рые будут соот­ветс­тво­вать одно­му хешу (это называ­ется кол­лизия). Для SHA-256 количес­тво дай­джес­тов рав­но 2256, чис­ло объ­ективно астро­номи­чес­кое, поэто­му теоре­тичес­кая веро­ятность получить при перебо­ре хеш, пароль которо­го ока­жет­ся невер­ным, очень мала, осо­бен­но потому, что пароли доволь­но пред­ска­зуемы и соз­дают­ся из огра­ничен­ного набора сим­волов.

 

Искусство абракадабры

Ес­ли не брать во вни­мание воз­можность кол­лизий, наша задача прос­та: счи­таем хеши и срав­нива­ем их с уже име­ющи­мися. Но если заг­лянуть, нап­ример, в до­кумен­тацию Hashcat, то под заголов­ком Hash Modes скры­вает­ся целый зоопарк алго­рит­мов.

Сре­ди про­чего к паролю добав­ляют про­изволь­ное зна­чение — соль. Оно пуб­лично извес­тно, уни­каль­но для каж­дого пароля и лежит в базе дан­ных рядом с хешем. Если соль хра­нит­ся тай­но где‑то в коде, ее называ­ют пер­цем или крип­тогра­фичес­ким клю­чом. Такая защита пре­дот­вра­щает толь­ко ата­ки через радуж­ные таб­лицы, но все же тре­ниру­ет вни­матель­ность хеш­кре­кера при выборе парамет­ров: стро­ки «соль + пароль» и «пароль + соль» дают раз­ные хеши.

К алго­рит­му, кро­ме спе­ций, могут добав­лять­ся раун­ды (ите­рации), то есть при­мене­ние хеш‑фун­кции сот­ни или тысячи раз под­ряд. Если в таком алго­рит­ме есть перец, то он называ­ется ими­тов­став­кой (MAC), а если соль — фун­кци­ей фор­мирова­ния клю­ча (KDF). Такая защита уве­личи­вает вре­мя под­сче­та одно­го хеша за счет объ­ема, но не слож­ности вычис­лений, тем самым замед­ляя хеш­кре­кинг. Дру­гой вари­ант — соз­дание «дорогих» алго­рит­мов. Нап­ример, scrypt и Argon2 тре­буют слиш­ком мно­го ресур­сов для под­сче­та одно­го хеша и упи­рают­ся в огра­ниче­ния железа.

Есть еще раз­ные кон­троль­ные сум­мы, алго­рит­мы баз дан­ных и про­токо­лов. Но вывод один: тер­мин «хеш­кре­кинг» сно­ва сби­вает нас с тол­ку, потому что он свя­зан не толь­ко с хешами, но и с раз­ными алго­рит­мами, которые могут вооб­ще не исполь­зовать хеш‑фун­кции. За­дача хеш­кре­кера — получить сек­рет, который каким‑то обра­зом прев­ратили в абра­кадаб­ру, а искусс­тво хеш­кре­кин­га — понять, что это за абра­кадаб­ра, и как мож­но точ­нее и эффектив­нее вос­про­извести алго­ритм.

CPU или GPU?

Не сущес­тву­ет алго­рит­ма, который было бы разум­нее под­бирать на CPU, чем на GPU. Во‑пер­вых, не сто­ит пред­став­лять вычис­ление хеша как бинар­ный выбор — либо ЦП, либо ГП, потому что хорошая реали­зация любого алго­рит­ма всег­да исполь­зует силь­ные сто­роны всех ком­понен­тов.

Во‑вто­рых, если хотя бы 10% задачи мож­но рас­парал­лелить, то исполь­зование ГП будет оправдан­но, а при вычис­лении боль­шого количес­тва хешей мы так или ина­че соз­даем парал­лелизм. В кон­це кон­цов, цена вычис­лений на GPU ниже, чем на ЦП, поэто­му уве­личе­ние мощ­ности пос­ледне­го может быть неоп­равдан­но.

Но не вызыва­ет сом­нений, что при неболь­шом объ­еме вычис­лений CPU будет эффектив­нее, то есть рас­пре­делить 20 хешей на ГП — это несерь­езно.

 

Жажда скорости

Всех инте­ресу­ет, как быс­тро сбру­тит­ся пароль. Для это­го есть тер­мин хеш­рейт — он показы­вает, сколь­ко хешей кон­крет­ного алго­рит­ма в секун­ду (H/s) может пос­читать наш компь­ютер. Хеши в секун­ду могут прев­ратить­ся в мил­лионы (MH/s) или мил­лиар­ды (GH/s), но хеш­рейт — величи­на условная и зависит от железа, наг­рева, драй­веров, заг­рузки ком­па и того, нас­коль­ко эффектив­но мы реали­зова­ли алго­ритм.

info

Еще говорят о так­товой час­тоте, но она не учи­тыва­ет количес­тво ядер и сам алго­ритм, поэто­му мет­рика непол­ная, и о флоп­сах (FLoating point OPerations), но поч­ти вся крип­тогра­фия пос­тро­ена на опе­раци­ях с целыми чис­лами, поэто­му ско­рость опе­раций с десятич­ными для нас неин­форма­тив­на.

Об­щая фор­мула такая: вре­мя нахож­дения пароля = ((количес­тво воз­можных сим­волов)^(дли­на пароля)) / хеш­рейт. Нап­ример, для SHA-256 на Nvidia RTX 4090 в Hashcat мак­сималь­ное вре­мя под­бора вось­мисим­воль­ного пароля из латин­ских букв и цифр будет рав­но ((26 + 26 + 10)^8) / (21 975,5 MH/s) = 9936 с, или 2,76 ч. Но это при усло­вии тупого брут­форса, то есть пол­ного перебо­ра всей области зна­чений. Поэто­му все кра­сивые таб­лички из интерне­та «За сколь­ко взло­мают твой пароль в 2025 году» мож­но сме­ло отправ­лять лесом — они не учи­тыва­ют ни алго­ритм, ни железо, ни при­емы сок­ращения области поис­ка опыт­ным хеш­кре­кером.

 

Общий знаменатель — программы для хешкрекинга

К все­обще­му облегче­нию сра­зу ска­жу: нам не понадо­бит­ся уйма раз­ных прог­рамм и ути­лит. В таб­лице ниже при­веде­ны срав­нитель­ные харак­терис­тики самых замет­ных игро­ков в этой сфе­ре. Конеч­но, это не все инс­тру­мен­ты: нап­ример, есть еще Cain & Abel, но ее не обновля­ют с 2014 года; ophcrack работа­ет толь­ко с радуж­ными таб­лицами; решения вро­де Elcomsoft Password Recovery Suite проп­риетар­ны и, оче­вид­но, под­ходят не всем; а «Мобиль­ный кри­мина­лист. Брут­форс» пос­тро­ен на том же Hashcat, толь­ко с GUI свер­ху. В срав­нение попали и l0phtcrack, и Aircrack-ng, но вто­рой нужен толь­ко для работы с Wi‑Fi, а пер­вый поч­ти не под­держи­вает­ся и силь­но огра­ничен по воз­можнос­тям. Кста­ти, пер­вый в мире хеш­кре­кинг на GPU реали­зова­ла рос­сий­ская ком­пания Elcomsoft в 2007 году.

Hashcat John the Ripper L0phtCrack Aircrack-ng
Пер­вый релиз 2009 1996 1997 2006
Ре­лиз open source 2015 1996 2021 2006
ОС для уста­нов­ки Все круп­ные Все круп­ные Windows Все круп­ные
Ко­личес­тво фор­матов >600 535 22 6
Ко­личес­тво типов атак 11 4 3 1
Под­дер­жка CPU Да Да Да Да
Под­дер­жка GPU Да Не все Да Нет

В реаль­ной работе сегод­ня чаще все­го исполь­зуют Hashcat, реже — John the Ripper. Если срав­нить этих гиган­тов, то Hashcat дает более понят­ный вывод, луч­ше задоку­мен­тирован в вики и на форумах и в пер­вую оче­редь ори­енти­рован на работу с GPU. А JtR под­держи­вает нес­коль­ко фор­матов хешей, которых нет у Hashcat, сам под­бира­ет алго­ритм ата­ки и луч­ше опти­мизи­рован для работы с CPU, но не все алго­рит­мы уме­ет отправ­лять на GPU.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии