<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Раздел полезных советов: Подключение виртуальной базы пользо...</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html</link>
    <description>Для того чтобы не хранить базу виртуальных пользователей с открытыми паролями можно использовать в Dovecot механизм аутентификации CRAM-MD5.&lt;br&gt;&lt;br&gt;Для включения  CRAM-MD5 аутентификации в /etc/dovecot.conf необходимо привести конфигурацию к виду:&lt;br&gt;&lt;br&gt;   default_mail_env = maildir:/var/spool/vhosts/&#037;d/&#037;n&lt;br&gt;   auth_mechanisms = plain DIGEST-MD5 CRAM-MD5&lt;br&gt;   auth_verbose = yes&lt;br&gt;   auth default &#123;&lt;br&gt;      mechanisms = plain cram-md5&lt;br&gt;      passdb passwd-file &#123;&lt;br&gt;      args = /etc/dovecot/passdb&lt;br&gt;   &#125;&lt;br&gt;   userdb static &#123;&lt;br&gt;      args = uid=virtual gid=virtual /etc/dovecot/userdb&lt;br&gt;   &#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;В директории /etc/dovecot создаем два файла: passdb с паролями и userdb со списком пользователей и расположением их виртуальных аккаунтов.&lt;br&gt;&lt;br&gt;Пример содержимого userdb:&lt;br&gt;&lt;br&gt;   tom&#064;example.com::510:510::/var/spool/vhosts/example.com/:/bin/false::&lt;br&gt; &lt;br&gt;Пример passdb:&lt;br&gt;&lt;br&gt;   tom&#064;example.com:&#123;HMAC-MD5&#125;e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6&lt;br&gt;&lt;br&gt;Для формирования HMAC-MD5 хэша на основе открытого пользовательского пароля н</description>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Sw00p aka Jerom)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#15</link>
    <pubDate>Wed, 18 Nov 2009 07:04:14 GMT</pubDate>
    <description>мда не знал что у меня в базе плаинтекстовые пассы храняться&lt;br&gt;&lt;br&gt;капча: 30005&lt;br&gt;</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (fi)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#14</link>
    <pubDate>Tue, 17 Nov 2009 17:11:28 GMT</pubDate>
    <description>Да это уже проходили.&lt;br&gt;&lt;br&gt;любой CRAM принципиально требует наличия не зашифрованного пароля на сервере. Это просто по определению. В случаи с мд5 всего лишь требуется модифицированный клиент.&lt;br&gt;&lt;br&gt;Сами разберитесь как это работает, в инете достаточно много есть об этом.&lt;br&gt;</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Sw00p aka Jerom)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#13</link>
    <pubDate>Mon, 16 Nov 2009 09:16:28 GMT</pubDate>
    <description>а вы попробуйте реализовать этот алгоритм dovecot_hash=H2(password)&lt;br&gt;а потом сделайте так x = H1(challenge, dovecot_hash)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Гайбруш Трипвуд)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#12</link>
    <pubDate>Mon, 16 Nov 2009 08:22:47 GMT</pubDate>
    <description>Посмотрим на такой алгоритм аутентификации имени меня.&lt;br&gt;- сервер посылает случайное число challenge&lt;br&gt;- клиент вычисляет некое x = H1(challenge, H2(password)), H1 и H2 - криптохеш-функции и посылает на сервер.&lt;br&gt;- сервер делает то же самое, только с хранящимся на сервере паролем и сравнивает&lt;br&gt;Видно, что это некий абстрактный cram-md5.&lt;br&gt;&lt;br&gt;Так вот, хитрющий довекот хранит у себя dovecot_hash=H2(password), чтобы не вычислять его каждый раз. Если файл с хешами попадет к нехорошему человеку, он при аутентификации сможет вычислить x = H1(challenge, dovecot_hash) и авторизоваться.&lt;br&gt;&amp;gt; а теперь вопрос - зная хеш пароля куда я его буду пихат ?????????????&lt;br&gt;&lt;br&gt;Я уже говорил, что нужно посмотреть, что именно довекот может вычислить без знания challenge (т.е. H2), и тогда можно будет определить формулу для злоумышленника.&lt;br&gt;</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Sw00p aka Jerom)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#11</link>
    <pubDate>Mon, 16 Nov 2009 08:05:57 GMT</pubDate>
    <description>вот ещё функция реализации hmac_md5($challenge,$password)&lt;br&gt;&lt;br&gt;function hmac_md5($data, $key=&apos;&apos;) &#123;&lt;br&gt;&lt;br&gt;    if (extension_loaded(&apos;mhash&apos;)) &#123;&lt;br&gt;            if ($key== &apos;&apos;) &#123;&lt;br&gt;                        $mhash=mhash(MHASH_MD5,$data);&lt;br&gt;            &#125; else &#123;&lt;br&gt;                        $mhash=mhash(MHASH_MD5,$data,$key);&lt;br&gt;            &#125;&lt;br&gt;            return $mhash;&lt;br&gt;    &#125;&lt;br&gt;&lt;br&gt;    if (!$key) &#123;&lt;br&gt;        return pack(&apos;H*&apos;,md5($data));&lt;br&gt;    &#125;&lt;br&gt;&lt;br&gt;    $key = str_pad($key,64,chr(0x00));&lt;br&gt;    if (strlen($key) &amp;gt; 64) &#123;&lt;br&gt;        $key = pack(&quot;H*&quot;,md5($key));&lt;br&gt;    &#125;&lt;br&gt;    $k_ipad =  $key ^ str_repeat(chr(0x36), 64) ;&lt;br&gt;    $k_opad =  $key ^ str_repeat(chr(0x5c), 64) ;&lt;br&gt;    /* Heh, let&apos;s get recursive. */&lt;br&gt;    $hmac=hmac_md5($k_opad . pack(&quot;H*&quot;,md5($k_ipad . $data)) );&lt;br&gt;    return $hmac;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Sw00p aka Jerom)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#10</link>
    <pubDate>Mon, 16 Nov 2009 07:45:01 GMT</pubDate>
    <description>описанный вами алгоритм он производится на стороне сервера&lt;br&gt;&lt;br&gt;довкот посылает челендж&lt;br&gt;&lt;br&gt;вот функция &lt;br&gt;&lt;br&gt;static const char *get_cram_challenge(void)&lt;br&gt;&#123;&lt;br&gt;        unsigned char buf&#091;17&#093;;&lt;br&gt;        size_t i;&lt;br&gt;&lt;br&gt;        hostpid_init();&lt;br&gt;        random_fill(buf, sizeof(buf)-1);&lt;br&gt;&lt;br&gt;        for (i = 0; i &amp;lt; sizeof(buf)-1; i++)&lt;br&gt;                buf&#091;i&#093; = (buf&#091;i&#093; &#037; 10) + &apos;0&apos;;&lt;br&gt;        buf&#091;sizeof(buf)-1&#093; = &apos;&#092;0&apos;;&lt;br&gt;&lt;br&gt;        return t_strdup_printf(&quot;&amp;lt;&#037;s.&#037;s&#064;&#037;s&amp;gt;&quot;, (const char *)buf,&lt;br&gt;                               dec2str(ioloop_time), my_hostname);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;вот что происходит на стороне клиента (пример из SquirrelMail)&lt;br&gt;&lt;br&gt;&lt;br&gt;function cram_md5_response ($username,$password,$challenge) &#123;&lt;br&gt;    $challenge=base64_decode($challenge);  // декодируем полученный челендж&lt;br&gt;    $hash=bin2hex(hmac_md5($challenge,$password)); // потом шифруем этот челендж функцией hmac_md5&lt;br&gt;    $response=base64_encode($username . &quot; &quot; . $hash) . &quot;&#092;r&#092;n&quot;; // кодируем полученный хеш в виде USERNAME &amp;lt;SPACE&amp;gt; HASH&lt;br&gt;    return $response;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;и отправляем эти данные</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Гайбруш Трипвуд)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#9</link>
    <pubDate>Sat, 14 Nov 2009 13:17:18 GMT</pubDate>
    <description>Тред вы не дочитали, они там разобрались.&lt;br&gt;Попробуем уйти в детали.&lt;br&gt;CRAM-MD5 работает так:&lt;br&gt;- сервер передает в открытом виде параметр m&lt;br&gt;- клиент вычисляет такую вот штуку&lt;br&gt;HMAC(K,m) = H((K &amp;#8853; opad) &amp;#8741; H((K &amp;#8853; ipad) &amp;#8741; m)), где K - это пароль (на самом деле там есть еще детали, но несущественные для нас) и передает серверу. H - это MD5, а opad и ipad - известные константы, &amp;#8741; - просто присоединение, а &amp;#8853; - XOR.&lt;br&gt;- сервер делает то же самое, только с паролем клиента, который хранится на сервере&lt;br&gt;- сервер сравнивает то, что вычислил и то, что получил от клиента&lt;br&gt;&lt;br&gt;Так вот, на сервере должен хранится пароль в открытом виде, иначе эту HMAC не вычислить.&lt;br&gt;Довекот делает хитрее, он заранее выполняет некоторую часть вычислений, которая не зависит от меняющегося в каждой сессии параметра m. Но если злоумышленник украдет этот довекотовский хеш, то, получив от сервера число m, он проделает оставшуюся часть вычислений и успешно авторизуется, без всякого брутфорса. Если же он украдет файл </description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Sw00p aka Jerom)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#8</link>
    <pubDate>Sat, 14 Nov 2009 11:45:27 GMT</pubDate>
    <description>а на счёт брутфорсеров - то всё можно пробрутфорсить&lt;br&gt;но при этом есть варианты брутфорса с использованием имеющегося хеша пароля и без него&lt;br&gt;&lt;br&gt;типичный случай брутфорс мд5 который возвращает один и тот же хеш и в данном случае достаточно шифровать последовательности и сравнивать с хешом&lt;br&gt;&lt;br&gt;в случае мд5 используемом в системе юниксов для авторизации необходимо иметь хеш чтобы пробрутфорсить &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Подключение виртуальной базы пользователей к Dovecot с CRAM-... (Sw00p aka Jerom)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID3/60851.html#7</link>
    <pubDate>Sat, 14 Nov 2009 11:38:09 GMT</pubDate>
    <description>схему в студию как вы будете зная хеш на стороне сервера проходить авторизацию&lt;br&gt;&lt;br&gt;пс: тот кто отвечал в треде даже сам понятия не имеет как этот механизм реализован &lt;br&gt;&lt;br&gt;и говорит мол Then you have to store passwords in plaintext.&lt;br&gt;для дайджеста да но не для крама&lt;br&gt;</description>
</item>

</channel>
</rss>
