<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Все о паролях и практической криптографии</title>
	<atom:link href="http://www.password-crackers.ru/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.password-crackers.ru/blog</link>
	<description>Информация o современных прикладных криптосистемах, реализациях криптоалгоритмов,  парольной защите и ее взломе</description>
	<pubDate>Sun, 15 Aug 2010 08:01:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Эффективна ли архитектура Fermi для перебора паролей?</title>
		<link>http://www.password-crackers.ru/blog/?p=145</link>
		<comments>http://www.password-crackers.ru/blog/?p=145#comments</comments>
		<pubDate>Sat, 14 Aug 2010 20:22:08 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[Оптимизация]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[Fermi]]></category>

		<category><![CDATA[MD5]]></category>

		<category><![CDATA[RC4]]></category>

		<category><![CDATA[SHA1]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=145</guid>
		<description><![CDATA[Появление технологий вычислений на графических процессорах оказало революционное влияние на индустрию восстановления паролей: благодаря тому, что перебор паролей - это хорошо распараллеливаемая задача, скорости программ удалось поднять в десятки раз. В 2010 году компания NVIDIA представила свою новую архитектуру Fermi, называя ее &#8220;самой продвинутой архитектура в истории вычислений на GPU&#8221;. Предлагаю рассмотреть детальнее, так ли [...]]]></description>
			<content:encoded><![CDATA[<p>Появление технологий вычислений на графических процессорах оказало революционное влияние на индустрию восстановления паролей: благодаря тому, что перебор паролей - это хорошо распараллеливаемая задача, скорости программ удалось поднять в десятки раз. В 2010 году компания NVIDIA представила свою новую архитектуру Fermi, называя ее &#8220;самой продвинутой архитектура в истории вычислений на GPU&#8221;. Предлагаю рассмотреть детальнее, так ли хороша Fermi для перебора паролей.<span id="more-145"></span>Преимущества Fermi хорошо известны. Вот те изменения по сравнению со старой архитектурой, которые оказывают вляние на скорость программ по перебору паролей:</p>
<ol>
<li>Количество ядер CUDA увеличено (самый слабый на сегодня GPU семейства Fermi GTX 460 имеет 336 ядер, тогда как самая мощная карта прошлого поколения имела 240).</li>
<li>Количество регистров на мультипроцессор увеличено вдвое (с 16384 до 32768), объем разделяемой памяти - втрое (с 16К до 48К). Именно эти два параметра оказывают  ключевое вляние на загрузку мультироцессора.</li>
<li>Введена возможность настоящих вызовов функций (до Fermi все функции интерпретировались как встроенные (inline)) - соответственно, появились указатели на функции, полная поддержка наследования методов в C++ и разрешена рекурсия.</li>
<li>Появился кэш L1/L2 - обращения к локальной и глобальной памяти теперь кэшируется.</li>
<li>Появились новые целочисленные команды в &#8220;ассемблере&#8221; Fermi PTX и улучшена поддержка стандарта IEEE 754 для плавающей арифметики.</li>
</ol>
<p>По всем пунктам, как видно, архитектура Fermi превосходит предыдущую. Давайте попытаемся потвердить это на реальных задачах и программах. Я буду сравнивать GTX 460 c 336 ядрами CUDA и GTX 260 со 216 ядрами - судя по маркировке, эти карты занимают примерно один уровень в своих поколениях. Посморим, будет ли реальный прирост скорости близок в полуторакратному.</p>
<ol>
<li>Сначала протестируем карту на задаче, традиционно считающейся идеальной для GPU - перебор паролей хэшей семейства MD (MD5, SHA). Проверим как программы, считающие эти хэши однократно, так и криптосистемы, использущие многократное циклическое вычисление хэшей (RAR 3.x, MS Office 2007)<br />
<table border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" height="28">Алгоритм</td>
<td style="text-align: center;" height="28">Программа</td>
<td style="text-align: center;" height="28">NVIDIA GeForce GTX 260</td>
<td style="text-align: center;" height="28">NVIDIA GTX 460</td>
<td style="text-align: center;" height="28">Ускорение, раз</td>
</tr>
<tr>
<td>MD5</td>
<td>ighashgpu</td>
<td>690.000.000</td>
<td>768.000.000</td>
<td>1.11</td>
</tr>
<tr>
<td>MD5</td>
<td>BarsWF v. 0.B</td>
<td>690.000.000</td>
<td>680.000.000</td>
<td>0.98</td>
</tr>
<tr>
<td>SHA-1 (77841 раз)</td>
<td>cRARK 3.3</td>
<td>2600</td>
<td>3840</td>
<td>1.47</td>
</tr>
<tr>
<td>SHA-1 (50000 раз)</td>
<td>Accent Office Password Recovery 4.1</td>
<td>4600</td>
<td>6340</td>
<td>1.37</td>
</tr>
</tbody>
</table>
<p style="text-align: center;">Таблица 1. Скорость перебора в криптосистемах, основанных на хэшах семейства MD5, паролей/сек</p>
</li>
<p>Хотя одному приложению не удалось продемострировать рост на GTX 460, остальные результаты вполне можно назвать ожидаемыми - новый видеопроцессор оказывается быстрее, достигая почти 1.5-кратного превосходства. Очень жаль, с другой стороны, что NVIDIA не добавила в список инструкций Fermi побитовый циклический сдвиг (<em>rol/ror</em>), который очень часто используется в криптоалгоритмах. Его аналог, недавно появившийся в архитектуре ATI -<em> bitalign</em> - дает, по результататам Ивана Голубева, 40% ускорение.</p>
<li>Теперь рассмотрим криптоалгоритмы, реализация которых на GPU традиционно считается неудобной. Самая частая причина этого, что они слишком активно и/или слишком много используют память. Из наиболее часто использующихся в современных криптосистемах к ним относятся RC4, Blowfish.<br />
<table border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" height="28">Алгоритм</td>
<td style="text-align: center;" height="28">Программа</td>
<td style="text-align: center;" height="28">NVIDIA GTX 260</td>
<td style="text-align: center;" height="28">NVIDIA GTX 460</td>
<td style="text-align: center;" height="28">Ускорение, раз</td>
</tr>
<tr>
<td>RC4</td>
<td>GuaPDF</td>
<td>13.600.000</td>
<td>7.200.000</td>
<td>0.5</td>
</tr>
<tr>
<td>BlowFish</td>
<td>NMSS</td>
<td>23.700 <sup> (*)</sup></td>
<td>19.000 <sup>(**)</sup></td>
<td>0.8</td>
</tr>
</tbody>
</table>
</li>
<p><sup>(*)</sup> - быстрее, чем на CPU Core 2 1.86 ГГц<br />
<sup>(**)</sup> - медленнее, чем на CPU Core 2 1.86 ГГц</p>
<p style="text-align: center;">Таблица 2. Скорость перебора в криптосистемах, неудобных для реализации на GPU, ключей/сек</p>
<p>Здесь ситуация резко меняется - карта на архитектуре Fermi оказывается гораздо хуже, чем ее предшественница. Особенно странна ситуация с RC4 - все изменения кода ( в т.ч. увеличение используемой разделяемой памями, которая очень помогала при <a href="http://www.password-crackers.ru/blog/?p=66">оптимизации этого алгоритма на GTX 260</a>) - давали только большее ухудшение скорости.</p>
<p>На мой взгляд, данные результаты показывают, что, несмотря на увеличение в 2 раза регистров и в 3 раза разделяемой памяти на один мультипроцессор,  увеличение в 4-6 раз количества ядер CUDA на этот же мультипроцессор приводит к тому, что в некоторых задачах он загружается хуже, чем в предыдущем поколении. Я также не заметил особого влияения нового кэша L2 в криптографических алгоритмах с интенсивным использование памяти.</p>
<p>В любом случае, эффективность архитектуры Fermi для перебора паролей является неоднозначной и она требует, как минимум, дополнительной оптимизации и настройки алгоритмов. Но в некоторых случаях все равно она может оказаться хуже, чем архитектура предыдущего поколения.</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=145</wfw:commentRss>
		</item>
		<item>
		<title>Вышел cRARk 3.3</title>
		<link>http://www.password-crackers.ru/blog/?p=141</link>
		<comments>http://www.password-crackers.ru/blog/?p=141#comments</comments>
		<pubDate>Thu, 01 Jul 2010 13:41:27 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[История]]></category>

		<category><![CDATA[Оптимизация]]></category>

		<category><![CDATA[Приложения]]></category>

		<category><![CDATA[Процессоры]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[Уязвимости]]></category>

		<category><![CDATA[cRARk]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[пароли RAR]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=141</guid>
		<description><![CDATA[На днях вышла новая версия программы по перебору паролей RAR/WinRAR - cRARk 3.3. (Кстати, насколько я помню, cRARk была первой в мире программой для восстановления паролей RAR, и первая ее версия вышла еще в 1995 года, тогда для версии RAR 1.x).
В новой версии программы полностью переделан механизм перебора паролей с помощью CUDA, что привело к [...]]]></description>
			<content:encoded><![CDATA[<p>На днях вышла новая версия программы по перебору паролей RAR/WinRAR -<a href="http://www.crark.net"> cRARk 3.3</a>. (Кстати, насколько я помню, cRARk была первой в мире программой для восстановления паролей RAR, и первая ее версия вышла еще в 1995 года, тогда для версии RAR 1.x).<br />
В новой версии программы полностью переделан механизм перебора паролей с помощью CUDA, что привело к приятной и редкой оптимизации - программа стала меньше, быстрее и плавнее одновременно!<span id="more-141"></span></p>
<p>Меньше она стала потому, что я перевел ее на Driver API (как известно, CUDA поддерживает два вида API - Runtime и Driver, у каждого есть некоторые перимущества, но Driver API является более низкоуровневым и позволяет использовать некоторые низкоуровневые оптимизации). Именно из-за них программа стала быстрее - немного, где-то до 5%, но тем не менее эти 5% должны вернуть cRARk славу самой быстрой программы <img src='http://www.password-crackers.ru/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Наконец, в новой версии появился ключ -d, которые задает соотношение между скоростью и плавностью вывода на экран. Ключ -d0 обеспечивает максимальную скорость, а -d5 - максимальный комфорт работы.</p>
<p>Также  предыдущей версии программы, 3.25, был немного оптимизирован CPU-код, особенно для семейства Intel Core i5/i7. Теперь на нем один пароль проверяется за 13.000.000 тактов, что означает, что функция SHA вычисляется за 168 тактов! На всех остальных процессорах Intel в 32-битном режиме эта цифра не падала меньше, чем до 177 тактов.</p>
<p>Прошу о всех проблемах с новой версией писать сюда в комментарии или по e-mail. Также я планирую в следующей записи в блоге коснуться возможностей языка описания паролей, используемого в cRARk.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=141</wfw:commentRss>
		</item>
		<item>
		<title>Тестирование программ по восстановлению паролей MS Office с использованием GPU</title>
		<link>http://www.password-crackers.ru/blog/?p=101</link>
		<comments>http://www.password-crackers.ru/blog/?p=101#comments</comments>
		<pubDate>Mon, 19 Apr 2010 12:19:56 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[Приложения]]></category>

		<category><![CDATA[Процессоры]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[ATI Stream]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[Microsoft Office]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=101</guid>
		<description><![CDATA[Разработчики программного обеспечения для восстановления паролей все активнее внедряют технологии расчетов на GPU в свои продукты. Сегодня я протестирую три продукта, которые уже имеют возможность подбирать пароли на картах NVIDIA и/или ATI для файлов Microsoft Office разных версий.

Итак, тестироваться будут три продукта:

Accent Office Password Recovery v. 3.50, поддерживающий как карты NVIDIA, так и ATI;
Parallel Password [...]]]></description>
			<content:encoded><![CDATA[<p>Разработчики программного обеспечения для восстановления паролей все активнее внедряют технологии расчетов на GPU в свои продукты. Сегодня я протестирую три продукта, которые уже имеют возможность подбирать пароли на картах NVIDIA и/или ATI для файлов Microsoft Office разных версий.<br />
<span id="more-101"></span><br />
Итак, тестироваться будут три продукта:</p>
<ol>
<li><a href="http://www.passwordrecoverytools.com/fastest-office-password-recovery.asp">Accent Office Password Recovery</a> v. 3.50, поддерживающий как карты NVIDIA, так и ATI;</li>
<li><a href="http://parallelrecovery.com/office-password.html">Parallel Password Recovery (Office module)</a> v. 1.5.1 (поддерживает только NVIDIA GPU);</li>
<li><a href="http://www.elcomsoft.com/edpr.html">Elcomsoft Distributed Password Recovery</a> v. 2.90 с поддержкой карт NVIDIA (компания Elcomsoft имеет специальный продукт для восстановления паролей MS Office - AOPR, но он пока не имеет поддержки GPU)</li>
</ol>
<p>и три версии Office, наиболее распространенные сегодня: MS Office XP, 2007 и 2010.</p>
<p>Для тестирования каждой версии были взяты по два файла - один со стандартной длиной ключа (128 бит для всех версий Office) и один с нестандартной (алгоритм RC4 с ключом 120 бит для Office XP и AES с ключом 256 бит для Office 2007 и 2010).</p>
<p>Тестирование проводилось на типичных современных компьютерах, два из которых были десктопами и один ноутбук:</p>
<ol>
<li><span style="background-color: #9ECCFF">Intel Core i5-750 (2.66 GHz, 4 ядра), NVIDIA GeForce GTX 260 (216 потоковых процессоров), 4 GB RAM, 64-битная Windows 7</span></li>
<li><span style="background-color: #AE9AFF">Intel Core 2 E6300 (1.8 GHz, 2 ядра), NVIDIA GeForce 9800GT (112 потоковых процессоров),2 GB RAM, 32-битная Windows XP</span></li>
<li><span style="background-color: #de9aff;">AMD Athlon II M300 (2.00 GHz, 2 ядра), ATI Mobility Radeon HD 4300 (80 потоковых процессоров), 2 GB RAM, 64-битная Windows 7</span></li>
</ol>
<p>Результаты тестирования приведены в следующей таблице (разным цветом выделены разные компьютеры; в том случае, если тестирование проводилось до конца, указано время и скорость, иначе - только скорость). Тестировался только режим полного перебора паролей начиная с длины 1, только маленькие латинские буквы.</p>
<table style="width: 100%; border-style: solid; border-width: 1px;" border="1">
<tbody>
<tr>
<td></td>
<td>Accent Office PR</td>
<td>Parallel PR</td>
<td>Elcomsoft Distributed PR</td>
</tr>
<tr>
<td rowspan="3">Office XP, 128 бит</td>
<td style="background-color: #9ECCFF">2.200.000 пар/сек, время - 2:25 (4 CPU,  GPU не использ.)</td>
<td style="background-color: #9ECCFF">9.000.000 пар/сек, время - 0:45 (3 CPU+1 GPU)</td>
<td style="background-color: #9ECCFF">1.800.000 пар/сек, время - 3:00 (4 CPU,  GPU не использовался)</td>
</tr>
<tr>
<td style="background-color: #AE9AFF">не тестировалось</td>
<td style="background-color: #AE9AFF">5.600.000 пар/сек, время - 0:55 (1 CPU+1 GPU)</td>
<td style="background-color: #AE9AFF">600.000 пар/сек, время - 8:20 (2 CPU,  GPU не использ.)</td>
</tr>
<tr>
<td style="background-color: #DE9AFF">600.000 пар/сек, время - 8:40 (2 CPU,  GPU не использ.)</td>
<td style="background-color: #DE9AFF">1.400.000 пар/сек, время - 4:06 (2 CPU, GPU не поддерж.)</td>
<td style="background-color: #DE9AFF">600.000 пар/сек, время - 8:32 (2 CPU,  GPU не поддерж.)</td>
</tr>
<tr>
<td rowspan="3">Office XP, 120 бит</td>
<td rowspan="3">Аварийное завершение</td>
<td style="background-color: #9ECCFF">5.000.000 пар/сек (4 CPU, GPU не используется)</td>
<td rowspan="3">пароль не найден</td>
</tr>
<tr>
<td style="background-color: #AE9AFF">3.600.000 пар/сек (2 CPU, GPU не использ.)</td>
</tr>
<tr>
<td style="background-color: #DE9AFF">1.200.000 пар/сек (2 CPU, GPU не<br />
поддерж.)</td>
</tr>
<tr>
<td rowspan="3">Office 2007, 128 бит</td>
<td style="background-color: #9ECCFF">4600  пар/сек, время - 1:43 (3 CPU + 1 GPU)</td>
<td style="background-color: #9ECCFF">4600  пар/сек, время - 1:42 (3 CPU + 1 GPU)</td>
<td style="background-color: #9ECCFF">3600  пар/сек, время - 2:12 (1 GPU, CPU не использ.)</td>
</tr>
<tr>
<td style="background-color: #AE9AFF">2900  пар/сек, время - 2:41 (1 CPU + 1 GPU)</td>
<td style="background-color: #AE9AFF">2800  пар/сек, время - 2:48 (1 CPU + 1 GPU)</td>
<td style="background-color: #AE9AFF">2600 пар/сек, время - 2:57 (1 GPU,  CPU<br />
не использовался)</td>
</tr>
<tr>
<td style="background-color: #DE9AFF">600  пар/сек, время - 13:43 (1 CPU + 1 GPU)</td>
<td style="background-color: #DE9AFF">200  пар/сек, время - 40:00 (2 CPU, GPU не использ.)</td>
<td style="background-color: #DE9AFF">140  пар/сек, время - 1 час (2 CPU, GPU не использ.)</td>
</tr>
<tr>
<td>Office 2007, 256 бит</td>
<td>файл не распознан</td>
<td style="background-color: #9ECCFF">4600  пар/сек (3 CPU + 1 GPU)</td>
<td>пароль не найден</td>
</tr>
<tr>
<td rowspan="3">Office 2010, 128 бит</td>
<td style="background-color: #9ECCFF">2300  пар/сек (3 CPU + 1 GPU)</td>
<td style="background-color: #9ECCFF">2300  пар/сек (3 CPU + 1 GPU)</td>
<td style="background-color: #9ECCFF">1800  пар/сек, время - 4:24 (1 GPU, CPU не использовался)</td>
</tr>
<tr>
<td style="background-color: #AE9AFF">1500  пар/сек (1 CPU + 1 GPU)</td>
<td style="background-color: #AE9AFF">1400  пар/сек (1 CPU + 1 GPU)</td>
<td style="background-color: #AE9AFF">1300 пар/сек (1 GPU,  CPU не использ.)</td>
</tr>
<tr>
<td style="background-color: #DE9AFF">300  пар/сек, время - 27:23 (1 CPU + 1 GPU)</td>
<td style="background-color: #DE9AFF">100  пар/сек (2 CPU, GPU не использ.)</td>
<td style="background-color: #DE9AFF">70  пар/сек (2 CPU, GPU не используется)</td>
</tr>
<tr>
<td>Office 2010, 256 бит</td>
<td>файл не распознан</td>
<td style="background-color: #9ECCFF">2300  пар/сек (3 CPU + 1 GPU)</td>
<td>пароль не найден</td>
</tr>
</tbody>
</table>
<p>Таблица. Скорость перебора паролей MS Office на разных CPU и GPU.</p>
<p>По данным результатам можно сделать несколько выводов:</p>
<ol>
<li>Утилиты по восстановлению паролей MS Office плохо справляются с нестандартным шифрованием (нестандартной длиной ключа) - были отмечены как случаи нераспознавания такого файла, так даже и зависания программы. Даже Parallel Password Recovery - явный лидер, справившийся со всеми примерами, в одном случае не использовал GPU при нестандартной длине ключа в 120 бит.</li>
<li>При переборе паролей файлов MS Office XP/2003 лидером по скорости является программа Parallel Password Recovery, т.к. она единственная использует GPU<br />
в данном случае, а скорости на CPU у нее также впечатляющие.</li>
<li>В случае стандартных файлов MS Office 2007 и 2010 скорости всех программ стали практически одинаковыми (отставание EDPR связано с тем, что она не использовала CPU, а скорость перебора на GPU у нее такая же, как и у остальных). Такое равенство связано с тем, что эти версии Office используют специально замедленную процедуру получения ключа из пароля (а именно, 50.000 и 100.000 вызовов функции хэширования SHA-1), и все разработчики давно оптимизировали эту функцию до максимума.</li>
<li>Скорость перебора файлов Office 2010 во всех программах и любых процессорах (CPU и GPU) ровно в два раза меньше, чем файлов Office 2007. Это напрямую связано с двухкратным увеличением количества вызовов SHA-1. Можно сказать, что файлы Office 2010 ставят новый рекорд в скорости перебора паролей и обеспечивают самое стойкое шифрование, свергая с пьедестала прошлого лидера - зашифрованные архивы RAR 3.x.</li>
<li>Программа Accent Office Password Recovery, хотя и плохо справляется с нестандартными файлами, тем не менее выделяется тем, что очень грамотно использует графический процессор: это единственная программа, позволяющая более-менее комфортно работать на компьютере при переборе паролей на GPU (остальные программы зависают на несколько секунд перед каждой отрисовкой экрана), а также единственная поддерживает карты ATI, даже такую маломощную как ATI Mobility Radeon HD 4300. Благодаря этому эта программа показывает в 3 раза большую суммарную скорость при переборе паролей MS Office 2007 и 2010 на третьем тестовом компьютере.</li>
</ol>
<p>Спасибо всем компаниям, предоставившим мне регистрационные ключи для тестирования их продуктов - без них полноценное тестирование скорости было бы невозможным. В дальнейшем я планирую продолжить тестирование взломщиков паролей - заинтересованных производителей прошу связываться со мной по е-mail.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=101</wfw:commentRss>
		</item>
		<item>
		<title>Старые недоработки в MS Office на новый лад</title>
		<link>http://www.password-crackers.ru/blog/?p=87</link>
		<comments>http://www.password-crackers.ru/blog/?p=87#comments</comments>
		<pubDate>Thu, 03 Dec 2009 16:37:44 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[Приложения]]></category>

		<category><![CDATA[Уязвимости]]></category>

		<category><![CDATA[AES]]></category>

		<category><![CDATA[MD5]]></category>

		<category><![CDATA[Microsoft Office]]></category>

		<category><![CDATA[RC4]]></category>

		<category><![CDATA[SHA1]]></category>

		<category><![CDATA[ненадежность криптосистем]]></category>

		<category><![CDATA[пароли]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=87</guid>
		<description><![CDATA[В одной из прошлых статей я детально касался процесса эволюции шифрования в разных версиях MS Office и делал вывод, что с каждой версией оно становилось все лучше и лучше. Однако, как часто бывает при обновлении версии программного продукта, неожиданно могут &#8220;вылезти&#8221; новые проблемы, подтверждая, что &#8220;лучшее - враг хорошего&#8221;.
Рассмотрим обобщенный процесс верификации пароля в MS [...]]]></description>
			<content:encoded><![CDATA[<p>В одной из прошлых статей я детально касался процесса<a href="http://www.password-crackers.ru/blog/?p=15"> эволюции шифрования</a> в разных версиях MS Office и делал вывод, что с каждой версией оно становилось все лучше и лучше. Однако, как часто бывает при обновлении версии программного продукта, неожиданно могут &#8220;вылезти&#8221; новые проблемы, подтверждая, что &#8220;лучшее - враг хорошего&#8221;.<span id="more-87"></span></p>
<p>Рассмотрим обобщенный процесс верификации пароля в MS Office,  который был придуман еще в ранних версиях Office и принципиально не поменялся до сих пор.</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="Схема проверки пароля в MS Office" src="http://www.password-crackers.ru/blog/img/msoffice_encryption.gif " alt="Схема проверки пароля в MS Office" width="500" height="280" /><p class="wp-caption-text">Схема проверки пароля в MS Office</p></div>
<ul>
<li>Шаг 1. Из пароля и случайной привязки (<em>salt</em>) через одно- или многократное хэширование получается строка бит.</li>
<li>Шаг 2. Из этой строки берется ровно столько бит, сколько нужно для генерации ключа (в разных версиях от 40 до 256).</li>
<li>Шаг 3. Еще одна случайная строка (<strong>Verifier</strong>) длиной 128 бит зашифровывается на полученном ключе и результат <strong>EncryptedVerifier</strong> сохраняется в файле Office.</li>
<li>Шаг 4. Тот же самый <strong>Verifier</strong> однократно хэшируется.</li>
<li>Шаг 5. Результат хеширования зашифровается на полученном на шаге 2 ключе и сохраняется в файле как <strong>EncryptedVerifierHash</strong>.</li>
</ul>
<p>Тогда, по замыслу разработчиков, для проверки пароля надо было сгенерировать ключ, расшифровать<strong> EncryptedVerifier</strong>, найдя исходный <strong>Verifier</strong>, получить его хэш, зашифровать по шагу 5 и сравнить полученный результат с <strong>EncryptedVerifierHash</strong>. Когда алгоритмом хэширования в Office XP был MD5, а шифрования - RC4, все работало именно так. Но в Office 2007 разработчики заменили MD5 на SHA1, а RC4 на AES.</p>
<p>Казалось бы, все стало только лучше - SHA1 явно более стойкий, чем MD5, а AES - современный стандарт шифрования. Но,</p>
<ol>
<li>MD5 генерировал хэш длиной 128 бит, а SHA1 - 160. AES же работает блоками по 128 бит.</li>
<li>RC4 был потоковый шифр, а AES - блочный.</li>
</ol>
<p>Первое привело к тому, что <strong>VerifierHash</strong> на шаге 5 перестал быть кратен длине блока AES, поэтому для его зашифрования пришлось использовать два 128-битных блока. Лишние 96 бит, недолго думая, заполнили нулями. А это уже разрушило всю преполагаемую схему аутентификации. Действительно, теперь шаг 5 можно пройти в обратном порядке, расшифровав <strong>EncryptedVerifierHash</strong>, и если мы получим в результате последние 96 бит нулей, то пароль верный! Больше нет необходимости делать шаги 3 и 4!</p>
<p>Если бы алгоритм шифрования остался RC4, то этот трюк не удался бы, потому как в нем состояние ключа меняется при каждой операции шифрования, и поэтому нам необходимо было бы все равно сделать шифрование на третьем шаге. Но замена RC4 на AES решила эту проблему.</p>
<p>Да, это нельзя назвать серьезной уязвимостью, и на скорость подбора пароля Office это тоже не влияет, так как основной по трудоемкости является шаг 2, где выполняется 50.000 (Office 2007) или 100.000 (Office 2010) преобразований SHA1. Интересно то, что в модификации Office 2010 разработчики предложили несколько новых улучшений, но описанную проблему проигнорировали. Забавно также, что похожая проблема была в старой версии MS Office 97, когда процесс верификации пароля в MS Word удалось убыстрить примерно с помощью такого же трюка (не нужно было выполнять несколько шагов, предложенных Microsoft). Именно поэтому восстановление паролей Word 97 происходит быстрее, чем Excel 97.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=87</wfw:commentRss>
		</item>
		<item>
		<title>Мифы о шифровании RAR</title>
		<link>http://www.password-crackers.ru/blog/?p=76</link>
		<comments>http://www.password-crackers.ru/blog/?p=76#comments</comments>
		<pubDate>Fri, 11 Sep 2009 09:41:36 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[Приложения]]></category>

		<category><![CDATA[пароли RAR]]></category>

		<category><![CDATA[шифрование RAR]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=76</guid>
		<description><![CDATA[Я часто получаю письма с теми или иными вопросами по поводу шифрования и паролей в RAR и хотел бы развеять некоторые мифы, которые часто слышу.
Миф 1.  Пароль хранится где-то внутри архива и можно так взломать RAR, чтобы он пароль не проверял.
К счастью, на сегодняшний день практически всем уже стало понятно, что это не так. Действительно, [...]]]></description>
			<content:encoded><![CDATA[<p>Я часто получаю письма с теми или иными вопросами по поводу шифрования и паролей в RAR и хотел бы развеять некоторые мифы, которые часто слышу.<span id="more-76"></span></p>
<blockquote><p>Миф 1.  Пароль хранится где-то внутри архива и можно так взломать RAR, чтобы он пароль не проверял.</p></blockquote>
<p>К счастью, на сегодняшний день практически всем уже стало понятно, что это не так. Действительно, RAR зашифровывает поток данных после компрессии при помощи алгоритма AES, получая зашифрованный текст. При разархивации RAR пытается расшифровать его с введенным паролем, независимо от того, является этот пароль правильным или нет. Иными словами, понять, что пароль является верным, можно только после расшифрования.</p>
<blockquote><p>Миф 2.  Существует некий универсальный пароль, которым можно расшифровать любой архив.</p></blockquote>
<p>Нет, поскольку RAR использует симметричный алгоритм шифрования, то ключ шифрования (он же и ключ расшифрования) только один. Никакого другого ключа (и пароля, соответственно) не существуют.</p>
<blockquote><p>Миф 3.  RAR при создании архива с паролем может вставить куда-то внутрь потока данных отдельные биты ключа, что позволит практически мгновенно расшифровать любой архив.</p></blockquote>
<p>Действительно, исходные тексты самого архиватора не являются открытыми, и теоретически можно было предположить, что такой скрытый канал утечки ключа мог бы существовать. При исследовании этого вопроса выяснилось, что<br />
а) в заголовках RAR-архива нет места для хранения сколь-нибудь значимой части ключа. Там можно сохранить несколько бит, но не более<br />
б) в потоке компрессированных данных места гораздо больше, но изучение алгоритма разархивирования (который является открытым) показало, что каждый бит там используется для декомпрессии. Сравнение размеров и содержимого компрессированных данных для одного и того же файла с паролем и без показало их полную идентичность.</p>
<p>Тем не менее, это не доказывает на 100%, что скрытого канала в RAR нет. Скрытые каналы по своей природе могут быть очень хитрыми, и только открытый исходный код позволит полностью опровергнуть этот миф.</p>
<blockquote><p>Миф 4.   Если у меня есть один файл из архива в незашифрованном виде, пароль  можно сломать быстрее.</p></blockquote>
<p>Во-первых, атака на основе известного открытого текста (а это именно так называется) неприменима к AES. Во-вторых, ускорить процесс перебора паролей это тоже не поможет, т.к. основные вычислительные мощности расходуются не на расшифрование и проверку данных, а на хеширование пароля.</p>
<blockquote><p>Миф 5.    Для того, чтобы понять, что пароль верный, надо расшифровать, затем полностью разархивировать файл, а потом проверить CRC.</p></blockquote>
<p>Нет, это не так. В случае архивов с зашифрованными заголовками лишь один из примерно 8 миллионов (!) паролей требует начать разархивирование файла, все остальные пароли могут быть проверены по совпадению контрольной суммы заголовка. В случае обычных архивов  семь из восьми паролей отсекаются по эвристикам, а для каждого восьмого пароля нужно начать процесс разархивации, который тоже обычно не доходит до конца - пароль отбраковывается раньше.</p>
<blockquote><p>Миф 6.    Если  ввести любой пароль и прервать RAR, когда он дошел до 99% разархивации файла, то можно получить разархивированный файл без всякого пароля.</p></blockquote>
<p>RAR прерывать не нужно - есть опция &#8220;-kb&#8221;, которая и так сохранит файл, даже если контрольная сумма не совпала. Очевидно, что с настоящим файлом он не будет иметь ничего общего, более того, как было сказано выше, скорее всего процесс разархивации даже не дойдет до конца, и файл не будет иметь ни правильного содержимого, ни правильного размера.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=76</wfw:commentRss>
		</item>
		<item>
		<title>Перебор 40-битных ключей MS Office на GPU</title>
		<link>http://www.password-crackers.ru/blog/?p=66</link>
		<comments>http://www.password-crackers.ru/blog/?p=66#comments</comments>
		<pubDate>Mon, 15 Jun 2009 11:21:38 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[Оптимизация]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[guaexcel]]></category>

		<category><![CDATA[guaword]]></category>

		<category><![CDATA[Microsoft Office]]></category>

		<category><![CDATA[RC4]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=66</guid>
		<description><![CDATA[В одной из первых записей в блоге я уже детально касался деталей шифрования, используемого в разных версиях Microsoft Office. Естественно, что меня интересовал вопрос, а удастся ли применить технологию вычислений на видеокартах (CUDA) для ускорения процесса перебора паролей для MS Office. Самое главное препятствие, которое существовало, - это алгоритм RC4, который является основным при шифровании [...]]]></description>
			<content:encoded><![CDATA[<p>В одной из <a href="http://www.password-crackers.ru/blog/?p=15">первых записей</a> в блоге я уже детально касался деталей шифрования, используемого в разных версиях Microsoft Office. Естественно, что меня интересовал вопрос, а удастся ли применить технологию вычислений на видеокартах (CUDA) для ускорения процесса перебора паролей для MS Office. Самое главное препятствие, которое существовало, - это алгоритм RC4, который является основным при шифровании почти во всех версиях Office. В интернете я видел отзывы, что реализация RC4 на CUDA оказывалась чуть ли не медленнее, чем на CPU, что означало, что алгоритм RC4 не подходит для ускорения на GPU.<span id="more-66"></span></p>
<p>Действительно, ключевой особенностью RC4 является использование таблицы перестановки (<em>permutation</em>) из 256 элементов, которая активно перемешивается при развертке (<em>scheduling</em>) ключа и при самом шифровании. Поскольку операции с глобальной и локальной памятью на CUDA занимают в сотни раз больше времени, чем с регистрами, то реализация RC4 &#8220;в лоб&#8221; действительно оказалась медленнее, чем на CPU (ниже приведен псевдокод развертки ключа RC4):</p>
<pre><strong>byte </strong>S[256]<strong>
for</strong> i <strong>from</strong> 0 <strong>to</strong> 255
    S[i] := i
<strong>endfor</strong>
j := 0
<strong>for</strong> i <strong>from</strong> 0 <strong>to</strong> 255
    j := (j + S[i] + key[i <a title="Modulo operation" href="http://en.wikipedia.org/wiki/Modulo_operation">mod</a> keylength]) mod 256
    swap(&amp;S[i],&amp;S[j])
<strong>endfor</strong></pre>
<p>Но идея по оптимизации алгоритма RC4 очевидна и приходила в голову многим исследователям. Как пишет в<a href="http://scissec.scis.ecu.edu.au/confs/proceedings/2008/forensics/Boeing%20Survey%20and%20Future%20Trends%20GPGPUs.pdf"> своей статье</a> Адриан Боинг, &#8220;использование быстрой разделяемой <em>(shared</em>) памяти  для хранения массива S дало существенный прирост в скорости&#8221;. Действительно, shared-память является очень быстрой и ее использование рекомендуется при оптимизации программ на CUDA. Боинг получил ускорение около 8 раз, у меня получились похожие результаты:</p>
<table border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" height="28">CPU (Core 2 Duo, 1.86 GHz, одно ядро)</td>
<td style="text-align: center;" height="28">GPU (NVIDIA GTX 260, 1.35 GHz, 216 SP)</td>
</tr>
<tr>
<td style="text-align: center;">2.000.000</td>
<td style="text-align: center;">15.000.000</td>
</tr>
</tbody>
</table>
<p style="text-align: center;">Таблица. Скорость развертки ключа алгоритма RC4 на CPU и GPU, ключей/сек</p>
<p>Естественно, что CPU-код для RC4 также был сильно оптимизирован (порядка 900 тактов/ключ), потому как если взять &#8220;наивную&#8221; реализацию RC4 (около 2.500 тактов/ключ), то можно получить ускорение не 8, а в 25 раз, что не является достоверным результатом.</p>
<p>Таким образом, с использованием современных GPU можно вскрыть 40-битный ключ MS Office (т.е. взломать любой пароль, независимо от его длины и сложности) менее, чем за 1 день (и это продемонстрировано в новых версиях программ <a href="http://www.password-crackers.com/crack/guaword.html">GuaWord </a>и <a href="http://www.password-crackers.com/crack/guaexcel.html">GuaExcel</a>, подбирающих ключ для файлов MS Word и MS Excel соответственно). Для сравнения, первые версии этих программ, работающие на Pentuim II/333, тратили на 40-битный ключ около 70 дней, а последняя версия на Core 2 Duo затратит около 8 дней на одном ядре и, соответственно,  4 и 2 дня на 2-х- и 4-х-ядерной машине. На GPU мы получаем скорость, равную 8-ядерному процессору!</p>
<p>Итак, алгоритм RC4 вполне поддается ускорению почти в 8 раз в помощью графических карт с технологией CUDA, хотя и не дотягивает по коэффициенту ускорения до лидеров - хешей семейства MD.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=66</wfw:commentRss>
		</item>
		<item>
		<title>Программы для перебора паролей RAR на GPU</title>
		<link>http://www.password-crackers.ru/blog/?p=52</link>
		<comments>http://www.password-crackers.ru/blog/?p=52#comments</comments>
		<pubDate>Thu, 14 May 2009 19:25:56 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[ATI Stream]]></category>

		<category><![CDATA[cRARk]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[igrargpu]]></category>

		<category><![CDATA[пароли RAR]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=52</guid>
		<description><![CDATA[Не прошло и недели с момента выхода новой версии программы crark, поддерживающей технологию CUDA, как вышла новая программа для перебора паролей RAR, использующая мощь графических процесcоров. Это программа igrargpu от Ивана Голубева. Сначала она поддерживала только видеокарты AMD/ATI HD 47xx-48xx, но буквально вчера вышла ее версия и под карты NVIDIA с CUDA.

Как пишет сам автор, [...]]]></description>
			<content:encoded><![CDATA[<p>Не прошло и недели с момента выхода новой версии программы <a href="http://crark.net">crark</a>, поддерживающей технологию CUDA, как вышла новая программа для перебора паролей RAR, использующая мощь графических процесcоров. Это программа <a href="http://golubev.com/rargpu.htm">igrargpu</a> от Ивана Голубева. Сначала она поддерживала только видеокарты AMD/ATI HD 47xx-48xx, но буквально вчера вышла ее версия и под карты NVIDIA с CUDA.</p>
<p><span id="more-52"></span></p>
<p>Как пишет сам автор, это больше демонстрация возможностей современных видеокарт, чем реальная программа для перебора паролей. Действительно, поддерживаются только RAR-архивы 3.x с зашифрованными заголовками и только атака по словарю, но, самое главное то, что эта программа показывает невиданные на сегодняшний день скорости взлома паролей RAR - <strong>тысячи</strong> паролей в секунду. До сих пор у самых совершенных программ, использующих многоядерный перебор, эта скорость только приближалась к 1.000 паролей в секунду (а можно еще вспомнить, что несколько лет назад, при появлении новой, 3-ей версии RAR, предположения о скорости перебора были &#8220;несколько паролей в секунду&#8221;).</p>
<table border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" height="28"></td>
<td style="text-align: center;" height="28">CPU (на одном ядре)</td>
<td style="text-align: center;" height="28">NVIDIA 8600GTS<br />
(32 SP, $50)</td>
<td style="text-align: center;" height="28">NVIDIA GTX 260<br />
(192 SP, $200)</td>
<td style="text-align: center;" height="28">ATI HD 4850<br />
(800 SP, $130)</td>
</tr>
<tr>
<td>cRARk</td>
<td style="text-align: center;">140</td>
<td style="text-align: center;">240</td>
<td style="text-align: center;">1000</td>
<td style="text-align: center;">-</td>
</tr>
<tr>
<td>igrargpu</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">400</td>
<td style="text-align: center;">2000</td>
<td style="text-align: center;">3100</td>
</tr>
</tbody>
</table>
<p style="text-align: center;">Таблица. Скорость перебора 4-х символьных паролей RAR на CPU и GPU, паролей/сек</p>
<p style="text-align: left;">Итак, по этой таблице можно сделать несколько важных выводов:</p>
<p style="text-align: left;">1) Перебор паролей RAR тоже убыстряется на GPU, но речь уже не идет о сотнях раз, как в случае <a href="http://www.password-crackers.ru/blog/?p=27">хешей</a>, а о 5-20-кратном ускорении</p>
<p style="text-align: left;">2) Потенциально пароли RAR 3.x могут вскрываться на современном аппаратном обеспечении с скоростью несколько тысяч паролей в секунду</p>
<p style="text-align: left;">3) Карты ATI гораздо лучше приспособлены для задач по перебору паролей. Так, карта HD4850 стоимостью $130 показывает в 1.5 раза лучшие результаты, чем карта GTX 260 стоимостью $200. Таким образом, карты ATI оказываются эффективнее почти в 3 раза по соотношению скорость перебора/стоимость. (Аналогичный вывод можно сделать, сравнив скорости взлома MD5 с помощью программы BarsWF, которая есть в версиях CUDA и Brook). С другой стороны, количество потоковых процессоров (SP) у карт ATI примерно во столько же раз больше. Также можно отметить, что написание программ под технологию ATI, конкурирующую с CUDA - ATI Stream - несколько более трудоемко, чем под CUDA.</p>
<p><strong>UPD от 27.05.2009.</strong><br />
В связи с выходом новой версии cRARk, которая стала быстрее до 2 раз и возможностью протестировать на видеокарте NVIDIA GTX 260 216 SP я публикую новую таблицу сравнения скоростей:</p>
<table border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" height="28"></td>
<td style="text-align: center;" height="28">CPU (на одном ядре)</td>
<td style="text-align: center;" height="28">NVIDIA 8600GTS<br />
(32 SP, $50)</td>
<td style="text-align: center;" height="28">NVIDIA GTX 260<br />
(192 SP, $200)</td>
<td style="text-align: center;" height="28">NVIDIA GTX 260-216<br />
(216 SP, $200)</td>
<td style="text-align: center;" height="28">ATI HD 4850<br />
(800 SP, $130)</td>
</tr>
<tr>
<td>cRARk 3.2</td>
<td style="text-align: center;">140</td>
<td style="text-align: center;">360</td>
<td style="text-align: center;">n/a</td>
<td style="text-align: center;">2400</td>
<td style="text-align: center;">-</td>
</tr>
<tr>
<td>igrargpu 0.2</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">400</td>
<td style="text-align: center;">2000</td>
<td style="text-align: center;">2500</td>
<td style="text-align: center;">3100</td>
</tr>
</tbody>
</table>
<p style="text-align: center;">Таблица. Скорость перебора 4-х символьных паролей RAR на CPU и GPU, паролей/сек</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=52</wfw:commentRss>
		</item>
		<item>
		<title>Перебор паролей и CUDA</title>
		<link>http://www.password-crackers.ru/blog/?p=44</link>
		<comments>http://www.password-crackers.ru/blog/?p=44#comments</comments>
		<pubDate>Mon, 27 Apr 2009 16:16:50 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[Оптимизация]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[cRARk]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[RAR]]></category>

		<category><![CDATA[пароли]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=44</guid>
		<description><![CDATA[Недавно вышла новая версия программы по перебору паролей для архивов RAR cRARk v. 3.2 (пока BETA), где я впервые попробовал применить технологию вычислений на видеокартах NVIDIA CUDA. О своих первых впечатлениях об использовании CUDA я бы хотел рассказать.

Первое, и самое главное: в таких задачах, как перебор паролей, которые по своей сути допускают легкое распараллеливание, использование [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно вышла новая версия программы по перебору паролей для архивов RAR<a href="http://www.crark.net"> cRARk</a> v. 3.2 (пока BETA), где я впервые попробовал применить технологию вычислений на видеокартах NVIDIA CUDA. О своих первых впечатлениях об использовании CUDA я бы хотел рассказать.</p>
<p><span id="more-44"></span></p>
<p>Первое, и самое главное: в таких задачах, как перебор паролей, которые по своей сути допускают легкое распараллеливание, использование CUDA оказывается <strong>чрезвычайно простым. </strong>Написание исходного текста программы на CUDA оказалось очень легким: я взял код функции SetCryptKeys() из исходных текстов <a href="http://www.rarlab.com/rar_add.htm">UnRAR</a>, добавил к ней свободно распространяемые реализации криптографических функций SHA-1 и AES, после чего вставил у всех используемых функций спецификатор __device__, который означает, что эти функции будут выполнятся на <em>устройстве</em> (GPU). По сути, никаких переделок кода с языка C/C++ на CUDA не потребовалось и первая же версия программы, которая смогла скомпилироваться, выдавала осмысленные результаты!</p>
<p>Далее, сложность отладки под GPU оказалась преувеличенной. В опциях компилятору можно указать <em>&#8220;-deviceemu&#8221;</em>, после чего отлаживать становится возможным в режиме эмуляции, под любимым отладчиком, например, прямо в Visual Studio. Да, в этом режиме эмуляция GPU невозможна на 100%, и некоторые тонкие моменты (например, синхронизацию потоков) там не отладить, но тем не менее режим эмуляции позволяет отладить большинство возникающих проблем.  Также я столкнулся с тем, что запись по невыровненному адресу в режиме эмуляции работает, а на реальном устройстве - нет:</p>
<pre>long A[N], i;</pre>
<pre>* (long *) ((char *)A + 3) = i;  // запись по адресу,
                                 // не кратному 4</pre>
<p>Компилятор nvcc, несмотря на версию 2.1, все еще является сыроватым. Так, я несколько раз в разных ситуациях получал сообщение о внутренней ошибке компилятора, и совершенно было непонятно, где искать проблему, так номер строки в этом случае не выводится. Опытным путем было выяснено, что он не любит использования функции <em>memcpy()</em>, которая часто встречается в реализации криптопримитивов.  По логике, должно быть сообщение об ошибке вызова функции хоста (<em>__host__</em>) на <em>устройстве</em>, вместо этого выдавалось сообщение: &#8220;Signal: caught in PU_adjust_addr_flags phase&#8221;.</p>
<p>Следующая проблема, которая не описана как следует в документации, заключалась в том, что каждый вызов ядра <em>(kernel)</em> должен выполняться на GPU не более 5 секунд. Поскольку для проверки одного пароля RAR необходимо сделать около 70.000 преобразований SHA-1, то, задавая довольно большие размеры сетки <em>(grid)</em>, можно очень скоро упереться в этот барьер, получая сообщение типа &#8220;the launch timed out and was terminated&#8221;.</p>
<p>Наконец, оптимизация программ на CUDA оказалась довольно трудоемкой и малоэффективной. Так, первая рабочая версия cRARk под CUDA выдавала около 200 паролей в секунду, нынешняя версия показывает 240 (на GeForce 8600GTS). При этом мне кажется, что скорость можно поднять еще как минимум в 2 раза (мое предположение основывается на скорости вычислений MD5 на CUDA, рассмотренной в прошлый раз). На сайте <a href="http://crark.net">crark.net</a> я выложил исходники реализации перебора паролей RAR на CUDA. Если есть желающие помочь в оптимизации этой бесплатной утилиты, буду рад.</p>
<p>Таким образом, технология CUDA, бесспорно, является очень эффективной и легкой в применении в задачах перебора паролей, но при практической реализации возникает ряд подводных камней, затрудняющих получение наилучших результатов. В частности, для рассмотренной задачи перебора паролей RAR пока скорость на топовых моделях видеокарт и процессоров оказывается примерно одинаковой - около 1000 паролей в секунду.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=44</wfw:commentRss>
		</item>
		<item>
		<title>Тестирование скорости взломщиков MD5</title>
		<link>http://www.password-crackers.ru/blog/?p=27</link>
		<comments>http://www.password-crackers.ru/blog/?p=27#comments</comments>
		<pubDate>Sun, 01 Mar 2009 17:27:46 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[GPU]]></category>

		<category><![CDATA[Оптимизация]]></category>

		<category><![CDATA[Приложения]]></category>

		<category><![CDATA[Процессоры]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[CUDA]]></category>

		<category><![CDATA[MD5]]></category>

		<category><![CDATA[оптимизация MD5]]></category>

		<category><![CDATA[хэш]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=27</guid>
		<description><![CDATA[В связи с появлением на сайте www.password-crackers.ru тестов скорости под графическую карту (GPU) NVIDIA с использованием технологии параллельных вычислений CUDA я провел ряд тестов взломщиков MD5-хэшей, потому что взлом MD-подобных алгоритмов хэширования идеально подходит для распараллеливания как на центральных, так и на графических процессорах.
Действительно, семейство хэшей MD (куда относятся алгоритмы MD4, MD5, SHA) отличает простота [...]]]></description>
			<content:encoded><![CDATA[<p>В связи с появлением на сайте <a href="http://www.password-crackers.ru">www.password-crackers.ru</a> тестов скорости под графическую карту (GPU) NVIDIA с использованием технологии параллельных вычислений CUDA я провел ряд тестов взломщиков MD5-хэшей, потому что взлом MD-подобных алгоритмов хэширования идеально подходит для распараллеливания как на центральных, так и на графических процессорах.</p>
<p>Действительно, семейство хэшей MD (куда относятся алгоритмы MD4, MD5, SHA) отличает простота и компактность. Они не используют никакую дополнительную память, кроме непосредственно сообщения и выходного значения, а все операции представляют собой простые арифметические и логические действия над 32-битными данными, а именно: AND, OR, XOR, NOT, сложение и циклический сдвиг, для которых в ассемблере обычно есть соответствующие команды.</p>
<p><span id="more-27"></span>Оптимизация перебора хэшей MD5 и аналогичных состоит в следующем:</p>
<ol>
<li>Использование параллельных вычислений, т.к алгоритм перебора паролей прекрасно распараллеливается - для процессоров на 2, 4 и более потоков (по количеству ядер), для GPU - на 64/128/256 и более.</li>
<li>Вычисление нескольких хэшей одновременно в одном потоке. Для этого подходят MMX- и SSE-инструкции, позволяющие одновременно вычислять 2 и 4 хэша соответственно. Перевести ассемблерный код на использование MMX или SSE довольно просто - надо заменить обычные ассемблерные инструкции и регистры на соотвествующие MMX/SSE. Код ниже показывает соответствие обычного и SSE-кода одного из шагов на первом раунде MD5:<br />
<table border="0" width="100%" cellspacing=10>
<tbody>
<tr>
<td>xor edi, edx</td>
<td>pxor xmm4, xmm3</td>
</tr>
<tr>
<td>and edi, ebx</td>
<td>pand xmm4, xmm1</td>
</tr>
<tr>
<td>xor edi, edx</td>
<td>pxor xmm4, xmm3</td>
</tr>
<tr>
<td>lea eax, DWORD PTR 3614090360[edi+eax]</td>
<td>paddd xmm0, XMMWORD PTR _DATA_R0[0]<br />
paddd xmm0, xmm4</td>
</tr>
<tr>
<td>mov edi, ebx</td>
<td>movdqa xmm4, xmm1</td>
</tr>
<tr>
<td>add eax, DWORD PTR [esi]</td>
<td>paddd xmm0, XMMWORD PTR [esi]</td>
</tr>
<tr>
<td>rol eax, 7</td>
<td>movdqa xmm5, xmm0<br />
pslld xmm0, 7<br />
psrld xmm5, 25<br />
por xmm0, xmm5</td>
</tr>
<tr>
<td>add eax, ebx</td>
<td>paddd xmm0, xmm1</td>
</tr>
</tbody>
</table>
<p>Как видно, коды очень похожи, за исключением реализации циклического сдвига - вместо одной операции на SSE приходится делать 4: два обычных сдвига в разные стороны и потом объединение результатов. (Странно, что даже в самой последней версии SSE 4.2 команд для циклических сдвигов так и не появилось).</li>
<li>Исключение сложений с нулевыми данными. При коротких паролях данные в конце 64-байтового блока являются нулевыми, поэтому операции сложения с ними можно исключить.</li>
<li>Инверсия последнего раунда. Из-за нулевых данных удается также  исключить вычисления на последнем раунде, инверсировав его и проверяя пароль на правильность раньше.</li>
</ol>
<p>Для тестирования скорости подбора MD5-хэшей использовались следующие программы:</p>
<ol>
<li>Тестовый, неоптимизированный код под CUDA <a href="http://www.troopers08.org/content/e6/e496/BELENKO_Andrej.zip">MD5-PoC</a> от Андрея Беленко (в исходниках под Visual C)</li>
<li>Бесплатная утилита от Elcomsoft <a href="http://www.elcomsoft.com/lhc.html">Lighting Hash Cracker</a> (LHC) v. 0.52</li>
<li>Бесплатная утилита <a href="http://3.14.by/ru/md5">BarsWF</a> v. 0.8 от Сваричевского Михаила</li>
<li>Коммерческая программа <a href="http://www.insidepro.com/rus/egb.shtml">Extreme GPU Bruteforcer</a> (EGP) v. 1.4.2 от InsidePro.</li>
<li>Коммерческий профессиональный продукт <a href="http://www.elcomsoft.com/edpr.html?from=passcr">Elcomsoft Distributed Password Recovery </a>(EDPR) v. 2.71</li>
<li>Бесплатная утилита<a href="http://www.the-udc.com/rus/"> UDC</a> v. 3.2.1.0, бывшая чемпионом по скорости до внедрения технологии CUDA</li>
</ol>
<p>Тесты проводились на Intel Core 2 Duo 6300, 1.86 GHz + NVIDIA GeForce 8600 GTS, 675 MHz. Результаты представлены в таблице:</p>
<table border="1" width="100%">
<tbody>
<tr>
<td style="text-align: center;" height="28">Название</td>
<td style="text-align: center;" height="28">CPU (на двух ядрах)</td>
<td style="text-align: center;" height="28">GPU</td>
<td style="text-align: center;" height="28">Всего</td>
</tr>
<tr>
<td>MD5_PoC</td>
<td>-</td>
<td>36</td>
<td>36</td>
</tr>
<tr>
<td>LHC <span style="color: #ff0000;">*</span></td>
<td>-</td>
<td>75</td>
<td>75</td>
</tr>
<tr>
<td>BarsWF</td>
<td>30+30</td>
<td>100</td>
<td><span lang="en-us">1</span>60</td>
</tr>
<tr>
<td>EGP</td>
<td>-</td>
<td>75</td>
<td>75</td>
</tr>
<tr>
<td>EDPR</td>
<td>-</td>
<td>75</td>
<td>75</td>
</tr>
<tr>
<td>UDC</td>
<td>4+4</td>
<td>-</td>
<td>8</td>
</tr>
</tbody>
</table>
<p style="text-align: center;">Таблица. Скорость перебора MD5-хэшей на CPU и GPU, миллионов хэшей/сек</p>
<p>Примечание <span style="color: #ff0000;">*</span>. В одном случае утилита LHC искомый пароль не нашла.</p>
<p>Выводы:</p>
<ol>
<li>Технология CUDA кардинально меняет представления о скорости перебора хэшей и стойкости паролей. Даже самая первая, неоптимизированная версия переборщика показывает скорость выше, чем самая быстрая, оптимизированная под SSE версия для CPU. При этом тактовая частота GPU была в 3 раза меньше. Современные графические карты способны вычислять более полумиллиарда хэшей в секунду, что означает, что они способны перебрать все буквенно-цифровые пароли до 8 символов включительно за пару дней!</li>
<li>Программа BarsWF оправдывает звание самого быстрого взломщика MD5, показывая фантастические результаты как на CPU, так и на GPU. По утверждению автора, она тратит 58 тактов CPU на один хэш, что, бесспорно, является впечатляющим. (У меня есть код MD5, который требует 130 тактов для полного MD5, т.е. с исключенным последним раундом он бы исполнялся около 100 тактов. Куда деваются еще 40, непонятно). В любом случае, поздравляем автора с наградой <img class="alignnone" title="Самая быстрая" src="http://www.password-crackers.ru/ru/img/ps_fastest.gif" alt="" width="97" height="19" /> в категории <a href="http://www.password-crackers.ru/category_178/">MD5-хэши</a>.</li>
<li>Использование технологий обычных вычислений на графических видеокартах (GPGPU) пока еще может вызвать затруднения как у разработчиков, так и у пользователей. Для разработчиков отмечу непривычную архитектуру высокопараллельных вычислений и трудность отладки (что приводит к ошибкам, как в утилите LHC). Для пользователей - это сложность в запуске таких программ, требующих совместимых видеокарт, последних версий драйверов и некоторых дополнительных dll-библиотек, плюс, для достижения масчимальной скорости,  желательны дополнительные настройки под конкретную видеокарту.</li>
</ol>
<p style="text-align: left;">Дополнительные ссылки:</p>
<ol>
<li> <a href="http://www.ixbt.com/video3/cuda-1.shtml">NVIDIA CUDA — неграфические вычисления на графических процессорах </a></li>
<li><a href="http://3.14.by/ru/read/md5_benchmark">Тестирование скорости работы MD5-взломщиков</a> от автора BarsWF</li>
</ol>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=27</wfw:commentRss>
		</item>
		<item>
		<title>Эволюция шифрования в Microsoft Office</title>
		<link>http://www.password-crackers.ru/blog/?p=15</link>
		<comments>http://www.password-crackers.ru/blog/?p=15#comments</comments>
		<pubDate>Tue, 17 Feb 2009 21:12:53 +0000</pubDate>
		<dc:creator>Pavel Semjanov</dc:creator>
		
		<category><![CDATA[Приложения]]></category>

		<category><![CDATA[Скорость]]></category>

		<category><![CDATA[Microsoft Office]]></category>

		<category><![CDATA[ненадежность криптосистем]]></category>

		<category><![CDATA[пароли]]></category>

		<category><![CDATA[скорость процессоров]]></category>

		<guid isPermaLink="false">http://www.password-crackers.ru/blog/?p=15</guid>
		<description><![CDATA[В заключении своей статьи &#8220;Почему криптосистемы ненадежны&#8221;, написанной в 1998 году, я указывал, что положение с применением сильной криптографии в приложениях начинает меняться в лучшую сторону. Рассмотрим эволюцию использования криптографических средств на примере одного из самых популярных приложений для персональных компьютеров  - офисного пакета MS Office, тем более, что недавно Microsoft официально открыла спецификации этого [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">В заключении своей статьи <a href="http://www.password-crackers.ru/articles/15/">&#8220;Почему криптосистемы ненадежны&#8221;</a>, написанной в 1998 году, я указывал, что положение с применением сильной криптографии в приложениях начинает меняться в лучшую сторону. Рассмотрим эволюцию использования криптографических средств на примере одного из самых популярных приложений для персональных компьютеров  - офисного пакета MS Office, тем более, что недавно Microsoft официально открыла <a href="http://msdn.microsoft.com/en-us/library/cc313118.aspx">спецификации</a> этого пакета, включая используемые алгоритмы шифрования. Ниже я буду говорить только о паролях на открытие файла, т.к. при установке остальных паролей (на доступ по чтению и т.д.) сам текст документа не зашифровывается и они поэтому могут быть легко обойдены.</p>
<p style="text-align: justify;">Первым шифрованием, применяемым в MS Office до версии 6.0 включительно, было ни что иное, как обычный XOR. Понятно, что такой простейший алгоритм шифрования не обеспечивает никакой защиты (и теперь стыдливо называется в спецификации словом &#8220;запутывание&#8221; (<em>&#8220;obfuscation&#8221;</em>)), и любые пароли восстанавливались мгновенно. Такое запутывание не запутало специалистов по криптографии, и соответствующие программы по взлому MS Word и Excel появились очень быстро. Как отмечал один из их авторов Marc Thibault, &#8220;ложное чувство безопасности гораздо хуже, чем ее отсутствие&#8221; и просил фирму Microsoft улучшить защиту в Office.<span id="more-15"></span></p>
<p style="text-align: justify;">Что и было сделано в следующих версиях MS Office - 97 и 2000. Там уже использовались проверенные и сильные криптографические алгоритмы MD5 и RC4, поэтому о мгновенном взломе любых паролей пришлось забыть (временно, как оказалось позже). Но тут в дело вступил иной фактор - так называемые &#8220;ограничения по экспорту сильной криптографии&#8221;, действовавшие в то время в США. Вообще говоря,  разумное зерно в ограничении доступа к современным криптографическим алгоритмам нежелательным лицам, бесспорно, есть. Иное дело, что таким способом этот доступ террористам и иже с ними не ограничить - например, исходные тексты программы PGP, которые нельзя было вывозить из США в электронном виде, были вывезены в виде бумажной распечатки в соответствии с первой поправкой к конституции, затем отсканированы и переведены обратно в электронную форму.</p>
<p style="text-align: justify;">Так вот, экспортные ограничение предписывали не иметь в программах, использующихся за пределами США, криптоалгоритмы с ключом более 40 бит. Это привело к тому, что ключи в алгоритме RC4, которые в MS Office 97/2000 потенциально могли быть до 128 бит, искусственно сокращались до 40. Т.е. из 16 байт, полученных на выходе Md5, 11 байт просто затирались нулями, и из 5 значащих байт и 11 нулей формировался уже сам ключ RC4.</p>
<p style="text-align: justify;">Это привело к возможности атаки полным перебором на все возможные ключи. Для того, чтобы расшифровать файл Word/Excel 97/2000, необходимо перебрать максимум 2<sup>40</sup> ключей, после чего мы с гарантией найдем нужный ключ, независимо от длины и сложности используемого пароля. (Если вам непонятно отличие ключа от пароля - почитайте <a href="http://www.password-crackers.ru/articles/12/#II">FAQ</a>). Я  тоже занимался написанием такой программы в 2000 году, и после всех оптимизаций (причем одной из самых существенных была замена инструкции <span style="color: #ff0000;">mov eax, 0</span> на <span style="color: #ff0000;">xor eax, eax</span> - я этого еще коснусь в этом блоге) на тогдашнем Pentium II/333 Мгц она должна была считаться около 70 дней. Сегодня перебор 2<sup>40</sup> ключей из Microsoft Office занимает 3 дня на двуядерном Core 2 Duo/2 ГГц.</p>
<p style="text-align: justify;">Создатели программ для восстановления паролей Office 97/2000 на этом не остановились. Дело в том, что если создать огромную базу данных предвычисленных значений и применить т.н. Rainbow-атаку, то нужный ключ можно найти за секунды. По сути, мы заменяем сложные и долгие вычисления поиском в заранее вычисленной таблице (в оптимизации это называется &#8220;замена время-память&#8221;). Чем больше таблица, тем с большей вероятностью мы найдем там ключ. Обычно эта вероятность составляет более 99%. Первым, насколько я помню, появился онлайн-сервис <a href="http://www.decryptum.com">Decryptum</a>, предлагавший мгновенную расшифровку файлов Office 97/2000. Затем появились другие сервисы и программы, которые можно найти <a href="http://www.password-crackers.ru/category_108/">здесь</a>.</p>
<p style="text-align: justify;">В Office XP/2003 эволюция шифрования продолжилась. К тому времени экспортные ограничения была отменены, а Microsoft разработала свой CryptoAPI, который и не преминула использовать в новой версии Office. Но, по не очень понятной причине, в качестве шифрования по умолчанию был оставлен все тот же алгоритм с 40-битными ключами, рассмотренный выше. Это означает, что для многих файлов, созданных в Office XP/2003, также возможна гарантированная расшифровка. Что касается нового шифрования через CryptoAPI, то были сделаны следующие изменения:</p>
<ul style="text-align: justify;">
<li>вместо алгоритма хэширования MD5 используется SHA1;</li>
<li>ключи в алгоритме RC4 теперь могут быть до 128 бит;</li>
<li>длина пароля увеличена с 16 до 255 символов.</li>
</ul>
<p style="text-align: justify;">В остальном же схема шифрования достаточно стандартна - из пароля с помощью хеширования получается ключ, на этом ключе шифруется документ. Таким образом, говорить о гарантированной расшифровке файлов Office XP/2003 уже не приходится - это невозможно для ключей более 64 бит для пользователя или небольшой организации, имеющей несколько сотен компьютеров. К десятой версии MS Office шифрование наконец стало достаточно адекватным.</p>
<p style="text-align: justify;">Иное дело, что используемая схема шифрования и проверки пароля допускает достаточно высокую скорость перебора - до 1.000.000 паролей в секунду на одном ядре (столько показывает самая быстрая известная мне программа по восстановлению паролей MS Office XP/2003 - <a href="http://www.parallelrecovery.com/office-password.html">Parallel Password Recovery (Office module)</a>), что означает, что на современном четырехъядерном компьютере можно перебрать все пароли из латинских букв и цифр вплоть до 8 символов за неделю!</p>
<p style="text-align: justify;">Именно с большой скоростью перебора была призвана бороться новая схема шифрования, используемая в последней версии Office - 2007.  В ней было сделано три принципиальных отличия от предыдущей версии:</p>
<ul style="text-align: justify;">
<li>вместо хорошего, но неоднократно неправильно примененного (в том числе в <a href="http://www.computerra.ru/offline/2005/576/37491/">самом Office</a>) потокового алгоритма RC4 используется стандарт шифрования AES</li>
<li>вместо однократного хэширования пароля, результат хешируется циклически еще 50.000 раз</li>
<li>возможно применение сторонних алгоритмов шифрования.</li>
</ul>
<p style="text-align: justify;">В результате скорость перебора паролей в Office 2007 упала с одного миллиона до 200 паролей в секунду (в 50.000 раз, что логично, потому что именно этот цикл хэширования и является самым <em>&#8220;тактопожирающим&#8221;</em>), и за разумное время теперь можно подобрать пароли не длинее 5-6 симоволов.</p>
<p style="text-align: justify;">Таким образом, применяемая схема шифрования в последней версии Microsoft Office 2007 не имеет известных уязвимостей, не допускает никаких атак, кроме перебора паролей, а скорость этого перебора значительно ограничена&#8230;</p>
<p style="text-align: justify;">&#8230; была до недавнего времени, пока не появились возможности перебора паролей на современных графических картах (GPU), в особенности технология <a href="http://www.nvidia.com/object/cuda_home.html">CUDA</a> от NVidia. Но об этом в следующий раз.</p>
<p style="text-align: justify;">Дополнительные ссылки:</p>
<ul style="text-align: justify;">
<li> <a href="http://passwords.ru/pfaq/mso.htm">FAQ по парольной защите MS Office</a></li>
<li><a href="http://blogs.msdn.com/david_leblanc/default.aspx">Информация из первых рук о шифровании в Microsoft Office </a>(англ.)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.password-crackers.ru/blog/?feed=rss2&amp;p=15</wfw:commentRss>
		</item>
	</channel>
</rss>
