<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <id>http://fiskus.name/</id>
  <title>блог Червонного Максима</title>
  <updated>2011-12-18T17:59:20Z</updated>
  <author>
    <name>Maxim Chervonny</name>
  </author>
  <link href="http://fiskus.name" rel="alternate" />
  <generator uri="http://hg.piranha.org.ua/cyrax/">cyrax</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/fiskus" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="fiskus" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <id>http://fiskus.name/password-security/</id>
    <title type="html">Менеджер паролей</title>
    <updated>2011-10-14T00:00:00Z</updated>
    <published>2011-10-14T00:00:00Z</published>
    <category term="security" />
    <link href="http://fiskus.name/password-security/" rel="alternate" />
    <content type="html">
&lt;p&gt;&lt;em&gt;Пост о том, как я пришел к методу генерации пароля &lt;code&gt;password = base64(sha1(sal + salt + masterPassword))&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Тот, кто однажды прочитал &amp;laquo;Криптономикон&amp;raquo;, уже никогда не станет прежним. Роман в отличной литературной форме иллюстрирует основы криптографии и защиты приватности информации и переписки. Конечно, я вряд ли докачусь до того, что буду &lt;a href="http://fiskus.name/static/2011/10/foil-on-laptop.jpg"&gt;экранировать свой ноутбук фольгой&lt;/a&gt; от &lt;a href="http://www.youtube.com/watch?v=ZZ5HS8GWIec"&gt;перехвата Ван Эйка&lt;/a&gt;. Но в свете недавних взломов и уязвимостей на dropbox, kernel.org, hetzner.de (там хостится мой сервер) стоит хотя бы озаботиться секьюрностью паролей.&lt;/p&gt;

&lt;p&gt;Раньше я, как и многие, держал один пароль на все сайты. Это не был Qwerty123, или подобный. Он состоял из букв в верхнем и нижнем регистре и цифр, удобно набирался (соотношение символов с левой и правой части клавиатуры), но был один на все сайты. Если бы один сайт себя скомпрометировал, опасности подвергались аккаунты на остальных сайтах.&lt;/p&gt;

&lt;p&gt;Я долго не переходил на систему 'один сайт &amp;mdash; один пароль', потому что не смог бы их запомнить и не знал, как их хранить, предпочитая держать в голове один сложный пароль. Надо признать, что менеджеров паролей существует бесчисленное множество, но у всех у них есть недостаток в том, что они хранятся в базе, которую можно потерять либо взломать, или не иметь к ней доступа.&lt;/p&gt;

&lt;p&gt;Решение подсказал &lt;a href="http://t.cf8.ru"&gt;cF8&lt;/a&gt;. Он сузил условия задачи: нужно залогиниться в твиттер с украденного айфона, чтобы сообщить о травле полицаев, и привел решение: md5 хэш на основе мастер-пароля и доменного имени.&lt;/p&gt;

&lt;p&gt;Плюсы такого решения в независимости от реализации. MD5 шифрование имеет определенный алгоритм и кучу реализаций на разных платформах. Кроме того, при таком методе нам нужен всего один мастер-пароль. Минус решения в том, что при каждой авторизации надо снова генерировать пароль, а также иметь доступ к одной из реализаций md5 шифрования (для систем, где таковых не установлено придется использовать веб-сервис).&lt;/p&gt;

&lt;p&gt;Это решение я немного углубил и расширил. &lt;a href="http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities"&gt;MD5 &amp;mdash; скомпрометированный алгоритм&lt;/a&gt;, лучше использовать SHA. Кроме того, надо принять во внимание, что на некоторых сайтах стоит ограничение на длину пароля и диапазон используемых символов, поэтому пароль не должен превышать 20 символов и иметь в себе буквы верхнего, нижнего регистра и цифры. Для добавления букв верхнего регистра, пропускаем полученный шифрованием хэш через base64-кодирование, а затем берем от сгенерированной последовательности первые 20 символов. На самом деле я бы посоветовал не пользоваться сайтами, где есть такие ограничения. Во-первых, это очевидное мудачество, во-вторых, это скорее всего означает, что в базе хранятся не хэши паролей, а сами пароли в открытом виде, а значит девелопер с привилегиями может залогиниться под вашей учеткой. К сожалению, среди сайтов с ограниченем на длину пароля - rutracker.org и livejournal.com.&lt;/p&gt;

&lt;p&gt;На некоторых сайтах могут иметься несколько аккаунтов, поэтому надо добвить еще один аргумент &amp;mdash; логин. Таким образом, для аккаунта fiskus на google.com будет браться хэш на основе слов "fiskus", "google.com" и секретного мастер-пароля. Для аккаунта juvvi на google.com &amp;mdash; хэш на основе слов "juvvi", "google.com" и секретного мастер-пароля. В таком случае получится один пароль для одного логина, но разных протоколов (Google+, GMail, GTalk), мне кажется, что это нормально, тем более что в том же гугле нет возможности завести разные пароли для джаббера, почты и соц. сети.&lt;/p&gt;

&lt;p&gt;Напоследок осталась проблема генерации пароля для системы, не имеющей домена, или имеющей несколько доменов, например, VPS или домашный компьютер. Ничего лучше не придумалось, чем брать вместо доменного имени имя хоста, предварительно придумав уникальные имена для всех своих компьютеров.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Существует также менее технологичное, и, соответственно, более независимое решение проблемы генерации паролей, основанное на использовании словарей.&lt;/p&gt;

&lt;p&gt;Например, есть словарь, в котором каждая буква соответствует названию животного. Берем доменное имя, и заменяем первые три буквы названиями животных. Т.е. было twitter.com, стало &lt;code&gt;Tiger_Whale_Iguanas_tter&lt;/code&gt;. Список животных можно взять в статье &lt;a href="http://wiki.answers.com/Q/What_are_some_animals_that_begin_with_the_letters_A-Z"&gt;&amp;laquo;What are some animals that begin with the letters A-Z?&amp;raquo;&lt;/a&gt; на Answers.com. Вместо словаря животных, можно использовать стихотворение. Так как в стихотворении может не быть слов на определенную букву, то замены в доменном имени делаем не на основе самой буквы, а ее месте в алфавите. "T" - 20-я буква, "W"- 22-я, "I" - 9-я. Соответсвенно, подставляем 20-е, 22-е и 9-е слова из стихотворения.&lt;/p&gt;

&lt;p&gt;Помимо того, что генерация пароля таким образом займет продолжительное время (возможно, без бумажки с карандашом не обойтись), за которое гэбня успеет сцапать и революционный твит не будет отослан, при плановой смене паролей придется выучивать новый словарь животных или новое стихотворение. Возникнет путаница, соответсвует ли буква 'T' слову 'tiger', или это было в прошлом месяце, а сейчас - 'tarantula'.&lt;/p&gt;

&lt;p&gt;Поэтому я за первый вариант, реализация которого &lt;a href="https://github.com/fiskus/password-manager"&gt;хостится на гитхабе&lt;/a&gt;. Второй актуален для людей, застрявших в начале 90-х, и из всех веб-сервисов, пользующихся только почтой.&lt;/p&gt;

</content>
  </entry>

  <entry>
    <id>http://fiskus.name/duckduckgo/</id>
    <title type="html">Duck Duck Go</title>
    <updated>2011-10-11T00:00:00Z</updated>
    <published>2011-10-11T00:00:00Z</published>
    <category term="web" />
    <link href="http://fiskus.name/duckduckgo/" rel="alternate" />
    <content type="html">
&lt;p&gt;&lt;img src="http://fiskus.name/static/2011/10/duckduckgo.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;Все новые инструменты делятся на те, у которых большой wow-эффект от использования, и те, у которых малый wow-эффект. Дальнейшее деление происходит от того, удобно ли пользоваться инструментом, когда эйфория от новизны проходит, или нет.&lt;/p&gt;

&lt;p&gt;Например, &lt;a href="http://wolframalpha.com"&gt;WolframAlfa&lt;/a&gt; имел колоссальный wow-эффект, но как им пользоваться в повседневной жизни, я не представляю. Зачем существует nigma.ru я никогда не понимал.&lt;/p&gt;

&lt;p&gt;Метапоисковик &lt;a href="http://duckduckgo.com"&gt;DuckDuckGo&lt;/a&gt; несмотря на отвратительное незапоминающееся название имел успех при первом приближении. Я думал, что быстро им наиграюсь. Но прошло больше года, и теперь первое, что я делаю при установке браузера - ставлю duckduckgo-ssl дефолтным поисковиком.&lt;/p&gt;

&lt;p&gt;Базовая функция этого метапоисковика - ответ на вопрос. DuckDuckGo так же, как и традиционные поисковики выводит список найденных ссылок, но первым пунктом он выводит абзац текста, релевантный запросу.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fiskus.name/static/2011/10/duckduckgo-russia.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;Киллер фичей метапоисковика является &lt;a href="http://duckduckgo.com/bang.html"&gt;!bang-синтаксис запросов&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Я уже давно не ищу информацию просто в гугле. Когда я что-то ищу, то уже примерно знаю, где найду, и рациональней сразу искать на этом сайте. Например, определения терминов следует искать на wikipedia.org, документацию по джаваскрипту на developer.mozilla.org, ответы на тривиальные технические вопросы - на stackoverflow.com, и.т.д. Пользователи оперы посмеются надо мной, но с помощью DuckDuckGo я могу искать на гугле с помощью запроса '!g кто виноват и что делать', или на википедии '!w термин', или на stackoverflow '!so как построить атомную бомбу'. В опере уже есть такой синтаксис запросов, но по дефолту он только для десятков сайтов, остальные нужно настраивать самому. А тут все готовенькое.&lt;/p&gt;

&lt;p&gt;Банг-синтаксис покрывает все нужды как нормального (!google, !yandex, !torrent, !wiki, !wru, !images. !stackoverflow, !translate и т.д.), так и ненормального (!javascript, !xkcd, !minecraft и т.д.) пользователя поисковых систем.&lt;/p&gt;

&lt;p&gt;Устанавливается на все браузеры (инструкция есть на домашней странице) и работает быстро, прозрачно и почти не заметно.&lt;/p&gt;

</content>
  </entry>

  <entry>
    <id>http://fiskus.name/imagemagick-montage/</id>
    <title type="html">Просмотр превьюшек с помощью Imagemagick montage</title>
    <updated>2011-07-30T00:00:00Z</updated>
    <published>2011-07-30T00:00:00Z</published>
    <category term="linux" />
    <link href="http://fiskus.name/imagemagick-montage/" rel="alternate" />
    <content type="html">
&lt;p&gt;Будучи минималистом, я живу без файлового менеджера и продвинутого просмотрщика картинок типа Picasa или Shotwell. Живу вполне комфортно, потому что у меня нет необходимости просматривать горы картинок. Тем не менее, иногда приходит и такая нужда. Например, просмотреть пару сотен фоток с корпоратива, чтобы выяснить, нет ли постыдного компромата.&lt;/p&gt;

&lt;p&gt;Но даже ради такой благой цели, не хочется ставить продвинутый просмотрщик или тем более файловый менеджер. Обходной путь был быстро найден. Команда &lt;code&gt;montage&lt;/code&gt;, входящяя в набор Imagemagick позволяет тайлить кучу картинок в одну.&lt;/p&gt;

&lt;p&gt;Например, &lt;code&gt;montage -label %f -geometry 300x300&amp;gt;+1+1 -shadow  -border 2 * tile.jpg&lt;/code&gt; создает превьюшки размером 300 на 300 с небольшими эффектами и подписью.&lt;/p&gt;

&lt;p&gt;Позже я вспомнил, что даже простой просмотрищик feh, который у меня установлен, умеет превьюшки. Но команда &lt;code&gt;montage&lt;/code&gt; остается весьма полезной для того, к примеру, чтобы отослать кому-нибудь по имейлу набор превьюшек одной картинкой.&lt;/p&gt;

</content>
  </entry>

  <entry>
    <id>http://fiskus.name/bydlo/</id>
    <title type="html">Семантика шутки в эпоху постмодернизма</title>
    <updated>2011-06-24T00:00:00Z</updated>
    <published>2011-06-24T00:00:00Z</published>
    <category term="relations" /><category term="thoughts" />
    <link href="http://fiskus.name/bydlo/" rel="alternate" />
    <content type="html">
&lt;p&gt;Бывает, что общаешься с человеком, и вроде он весь такой положительный и современный, и шутки у него смешные, циничные, и взгляд на мир разумный, и вообще весь он такой здравый, а потом он возьми да и скажи на полном серьезе, мол, педофилов сейчас везде много. И сразу думаешь: "Фу, быдло!" - и начинаешь примерять на него классификацию ошибок, где интересный человек превращается в неинтересного. То ли это тот случай, когда, бывает, видишь, что девушка симпатичная с умным лицом и аскетичным гардеробом, а потом она открывает рот и ты слышишь: "&lt;em&gt;настоящий мужчина&lt;/em&gt;", "&lt;em&gt;мы, женщины&lt;/em&gt;" и "&lt;em&gt;меня трудно найти, но легко потерять&lt;/em&gt;". То ли тот, когда душа-компании на протяжении нескольких часов заставляет всех кататься по полу от смеха, но вдруг меняется в лице, услышав слово "старпер" 9-го мая - "&lt;em&gt;как ты можешь, дедывоевали&lt;/em&gt;". А может это тот случай, когда сисадмин желает неизлечимых язв кишок тому, кто настраивал систему, &lt;a href="http://spectator.ru/entry/5697"&gt;попутно говнокодя в новых конфигах&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Скорее всего, это имеено последнее. Нет критериев, позволяющих определить, какая из сторон спора является быдлом, слишком много зависит от культурного контекста. Один человек может посмотреть блокбастер, и поставить резолюцию "Ширпотреб", а другой будет смотреть фильм иначе и &lt;a href="http://fiskus.name/awesome-punch/"&gt;увидит апофеоз ширпотреба&lt;/a&gt;, а значит вовсе не ширпотреб.&lt;/p&gt;

&lt;p&gt;Именно таким образом я однажды попал в семантическую петлю, размышляя над шуткой в эпоху постмодернизма. Взять, к примеру, фотографию на фоне ковра. Уже любой Одноклассник знает, что так фоткается только быдло. Но что, если кто-то сделал фото и подразумевает стеб над подобными снимками. Опытный интернетчик скажет, что и этот человек - деревенщина, т.к. подобного рода шутки тоже стали уделом быдла. Но ведь может статься и так, что автор фотки стебется над теми, кто стебется над ковромоделями. Или тем, кто стебется над теми, кто стебется над теми, кто хмхмхмхм. При этом все фоторафии выглядят идентично, и смыслом их наделяют автор и зрители.&lt;/p&gt;

&lt;p&gt;А приходим мы к тому, что я считаю быдлом любителей русского рока, пробелов вместо табов и синяков, а меня считают быдлом за то, что я неймфаг, корокорщик и не могу отличить кьянти от джэкдэниэлса. И все [не]правы!&lt;/p&gt;

</content>
  </entry>

  <entry>
    <id>http://fiskus.name/bubble-sort/</id>
    <title type="html">Сортировка пузырьком, Javascript + CSS3</title>
    <updated>2011-05-16T00:00:00Z</updated>
    <published>2011-05-16T00:00:00Z</published>
    <category term="webdev" />
    <link href="http://fiskus.name/bubble-sort/" rel="alternate" />
    <content type="html">
&lt;p&gt;Наконец-то, разобрал, что из себя представляет сабж, а заодно не поленился в образовательных целях реализовать этот вид сортировки визуально при помощи стильных и молодежных технологий.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://h.fiskus.name/bubble-sort/"&gt;&lt;img src="http://fiskus.name/static/2011/05/bubble-sort.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Посмотреть вживую можно по адресу &lt;a href="http://h.fiskus.name/bubble-sort/"&gt;h.fiskus.name/bubble-sort/&lt;/a&gt;, а скачать или склонировать исходники на &lt;a href="http://github.com/fiskus/bubble-sort"&gt;github'е&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>

</feed>

