<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:llivejo</id>
  <title>Смысл не найден</title>
  <subtitle>Нет, не надо звонок другу. Я возьму помощь Зла. © ague</subtitle>
  <author>
    <name>Сварщик Ненастоящий</name>
  </author>
  <link rel="alternate" type="text/html" href="http://llivejo.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://llivejo.livejournal.com/data/atom"/>
  <updated>2009-10-31T10:31:39Z</updated>
  <lj:journal userid="6778201" username="llivejo" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://llivejo.livejournal.com/data/atom" title="Смысл не найден"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:llivejo:88948</id>
    <link rel="alternate" type="text/html" href="http://llivejo.livejournal.com/88948.html"/>
    <link rel="self" type="text/xml" href="http://llivejo.livejournal.com/data/atom/?itemid=88948"/>
    <title>храните пароли в сберегательных файлах</title>
    <published>2038-01-19T03:14:07Z</published>
    <updated>2009-10-31T10:31:39Z</updated>
    <category term="админское"/>
    <content type="html">(уныло):&lt;br /&gt;— Меня зовут Версус, и у меня проблема.&lt;br /&gt;(нестройный хор):&lt;br /&gt;— Здравствуй, Версуc...&lt;br /&gt;&lt;br /&gt;У сисадминов много паролей, положение обязывает. Даже личные пароли должны быть разными для пущей безопасности, а уж корпоративные точно не повторяются, да еще и меняются всё время. Сотни, если не тысячи их. В памяти такое держать невозможно, записывать в открытом виде — небезопасно, хранить в зашифрованном виде и перешифровывать каждый раз при изменениях — неудобно. Остается использовать какой-нибудь &lt;a href="http://en.wikipedia.org/wiki/Password_manager"&gt;менеджер паролей&lt;/a&gt;, который можно держать на постоянно доступном носителе или устройстве. Удобно, безопасно. Запомнил один в меру сложный мастер-пароль, а остальные смотреть и менять легко и приятно.&lt;br /&gt;&lt;br /&gt;Ближе к делу. Когда-то давным-давно я сконфигурил некоторые корпоративные железки, выставил пароль на них, записал в менеджер паролей, которым в то время у меня был &lt;a href="http://gnukeyring.sourceforge.net/"&gt;Keyring for PalmOS&lt;/a&gt;. Палм-то тогда интенсивно использовался, сначала Palm Pilot, купленный на Молотке в 1999-м, потом Palm m100. Это сейчас в любом телефоне календарь есть, а тогда незаменимая вещь была: напоминалки, контакты, тексты, пароли.&lt;br /&gt;&lt;br /&gt;Потом году в 2005-м от Палма я отказался, пароли все экспортировал &lt;a href="http://hoenicke.ath.cx/keyring2-pre/"&gt;утилиткой&lt;/a&gt;, часть записал куда-то, но уже ничего удобного для постоянного использования найти не удалось. N800 тогда еще не было, в телефоне пародия какая-то, а не хранилище паролей, на десять паролей всего. В тот период много паролей в открытом виде хранилось, часть потерялась, ужас-ужас-ужас.&lt;br /&gt;&lt;br /&gt;Ну а на этой неделе срочно понадобилось залезть в девайсы, пароль ни у кого другого не сохранился. Поднял старый бэкап, нашел в базе Keyring нужную шифрованную запись, само название записи-то в незашифрованном виде хранится. И...&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;И всё. Мастер-пароль давно забыт, в файле-базе Keys-Gtkr.pdb хранится только 20-байтный hash в виде [4 байта &lt;a href="http://en.wikipedia.org/wiki/Salt_%28cryptography%29"&gt;salt&lt;/a&gt; и 16 байт md5($salt.$passwd)], для проверки правильности введенного мастер-пароля. Сами записи шифруются по алгоритму 3DES ключом, полученным из мастер-пароля.&lt;br /&gt;&lt;br /&gt;Вроде и MD5, и 3DES уже считаются небезопасными, однако в данном случае это не помогает: для MD5 найдены только способы быстрее искать коллизии, пароль из MD5-хеша восстановить нельзя, можно только найти готовый, в заранее вычисленных таблицах MD5, в чьих-нибудь «&lt;a href="http://en.wikipedia.org/wiki/Rainbow_table"&gt;радужных таблицах&lt;/a&gt;». А если хеш «соленый», как в данном случае (salt перед паролем), то готового хеша точно не существует, найти пароль можно только брутфорсом, полным перебором всех комбинаций всех возможных в пароле символов.&lt;br /&gt;&lt;br /&gt;3DES тоже еще крепок, нет атак, которые позволяют сократить пространство перебора его 112-битного ключа, а это ~10&lt;sup&gt;34&lt;/sup&gt;, даже несмотря на known plaintext. Не получается. Самый быстрый способ — «в лоб», причем 3DES медленнее, перебирать надо MD5, им целостность больших файлов проверяют, значит быстрый. Попутно выяснилось, что не так прост md5crypt, которым пароли нынче шифруют, FreeBSD-совместимые, те самые, что в /etc/shadow лежат, да-да, и в любом линуксе тоже. Так вот, этот md5crypt - это &lt;em&gt;тысяча раз&lt;/em&gt; MD5, c подстановками пароля и соли по ходу дела.&lt;br /&gt;&lt;br /&gt;Значит, брутфорс. Про тот старый мастер-пароль ничего не помню. Помню только что геморройно было его &lt;a href="http://en.wikipedia.org/wiki/Graffiti_%28Palm_OS%29"&gt;росчерками-граффити&lt;/a&gt; вводить. Маловероятно, что он был больше 12 символов, но уж 8 никак не меньше, я ж параноик. Символы пунктуации вряд ли в нем были, но заглавные буквы и цифры - наверняка. Итого по меньшей мере 62&lt;sup&gt;8&lt;/sup&gt;, около 4.5 * 10&lt;sup&gt;14&lt;/sup&gt; вариантов. &lt;br /&gt;&lt;br /&gt;Стал искать переборщики паролей, вспомнил о John The Ripper. Нашел &lt;a href="http://www.openwall.com/lists/john-users/2009/08/31/2"&gt;свежие патчи к нему&lt;/a&gt;, умеющие перебирать именно нужный мне вариант md5($salt.$passwd), там это называется "md5_gen(4)". Скорость перебора близка к обычному raw MD5 — делов-то, перед пробуемым паролем несколько байт неизменяемой соли вставить. Жаль только вот, что даже на двухядерном современном процессоре быстрее чем 2.4 миллиона паролей в секунду перебрать не получится, значит для полного перебора даже восьмибуквенного пароля нужно больше тысячи дней. FAIL.&lt;br /&gt;&lt;br /&gt;Поискал, как можно распараллелить перебор. Посмотрел на MPI-патчи, решил что больше десятка машин не смогу на это дело подрядить, все равно не меньше ста дней получается. Где-то в обсуждении наткнулся на упоминание использования проца видеокарты в брутфорсе. Поискал, нашел &lt;a href="http://3.14.by/ru/read/md5_benchmark"&gt;MD5-переборщик&lt;/a&gt;, на видеокарте Nvidia перебирающий 350 миллионов паролей в секунду. Это совсем другое дело, неделя на полный перебор!&lt;br /&gt;&lt;br /&gt;Однако моего варианта md5($salt.$passwd) он не умеет, исходников нет, &lt;a href="http://3.14.by/forum/viewtopic.php?f=6&amp;amp;t=48#p4473"&gt;автор не отвечает&lt;/a&gt;. Посмотрел на аналоги с открытым кодом, &lt;a href="http://bvernoux.free.fr/md5/"&gt;Vernoux GPU md5_crack&lt;/a&gt;, &lt;a href="http://sghctoma.extra.hu/index.php?p=entry&amp;amp;id=11"&gt;olcrack&lt;/a&gt;, ни у кого такого нет. У платного &lt;a href="http://www.insidepro.com/eng/egb.shtml"&gt;Extreme GPU Bruteforcer&lt;/a&gt; есть, 155 миллионов паролей в секунду.&lt;br /&gt;&lt;br /&gt;Вот, думаю что делать. Купить GeForce GTX 250 за сто евро и Extreme GPU Bruteforcer за €40. Настроить всё и надеяться, что за неделю пароль найдется. Или заплатить кому, у кого железо помощнее?&lt;br /&gt;</content>
  </entry>
</feed>
