Re: Генерация приватного ключа с заданной энтропией
Murat D. Kadirov -> Russian Debian List @ Sat, 11 Apr 2009 18:06:39 +0600:
>> MDK> Как вариант, можно использовать /dev/random, которое, в сущности
>> MDK> используется всем остальным ПО для этого. Но как из получаемого "мусора"
>> MDK> из /dev/random получить 98-ми символьную парольную фразу, которая
>> MDK> соответственно будет обладать 128-битной энтропией?
>>
>> На кой хрен 98-то? В предположении, что /dev/random выдает энтропию по
MDK> Понятия не имею. Цифры приведены из работы Б.Шнайера "Секреты и ложь.
MDK> Безопасность данных в цифровом мире" (стр.102). Вот этот абзац:
MDK> "Многие ключи создаются на основе паролей и ключевых фраз. Система,
MDK> принимающая пароль из 10 ASCII-символов, предоставляет для него 80 бит,
MDK> но её энтропия будет значительно меньше 80 бит. Некоторые символы ASCII
MDK> никогда не появляются, а пароли, которые представляют собой реальные
MDK> слова (или что-то похожее на слова), гораздо вероятнее, чем произвольные
MDK> строки символов. Я видел оценки энтропии для английского языка, меньше
MDK> 1.3 бит на символ; у пароля энтропии меньше, чем 4 бит на символ. Это
MDK> значит, что пароль из 8 символов будет приблизительно соответствовать
MDK> 32-битовому ключу, а если вы захотите 128-битовый ключ, вам нужен пароль
MDK> из 98 символов (на базе английского алфавита)."
MDK> Он там особо не распространяется в плане цифири, да и вообще работа
MDK> носит больше публицистический характер. А самому всё это осилить не
MDK> представляется возможным в силу сильно не технического образования.
MDK> Я сейчас подумал, что говоря о таких цифрах (98 символов для 128
MDK> битового ключа) он, возможно, отталкивается от слабой энтропии на
MDK> символ в пароле, т.е. пароль состоящий, к примеру из единиц и
MDK> нулей вперемежку или что-то подобное.
Если читать текст внимательно, то видно, что он отталкивался от пароля,
придуманного человеком. Т.е. имея в виду passWORD (<4bit), а в длинном
случае - passPHRASE (<1.3bit).
>> 8 бит на байт (а он, по идее, под именно под это заточен - нет, там,
>> конечно, не факт, что столько, но способа отличить никто не знает, так
>> что для практических применений можно оценивать так), длина пароля со
>> 128-битной энтропией будет всего лишь 24 символа (ceil(128/8/3)*4).
MDK> Можно чуток подробнее пояснить? Для человека не особо отягчённого
MDK> математическими познаниями. То есть я понимаю, где-что делиться и
MDK> умножается. Не понимаю логики(почему). Ну а ceil, видимо имеет
MDK> отношение к программированию.
/dev/random по определению выдает данные, неотличимые от случайных.
Т.е. можно считать, что все биты в его выдаче - случайны. Выдает он
байтами, в каждом из которых 8 бит. Поэтому 128 бит мы делим на 8,
чтобы получить байты. Далее мы это кодируем в base64, который кодирует
блоками по 3 байта, давая на выходе 4 символа на блок. Т.е. полученные
16 байт надо поделить на блоки по 3. На целое количество блоков, для
чего, собственно, берется ceil, т.е. ближайшее целое сверху (на гугле
забанили, да? и в википедии тоже?). Полученное количество блоков
умножаем на 4, чтобы получить количество символов.
P.S. Если придираться, то там, конечно, для начала не 128/8, а
ceil(128/8) - для 129 бит придется запросить 17 байт. Но в данном
случае оно делится нацело, да и математически однофигственно.
--
Рассмотрим этот вопрос под другим гуглом...
-- http://vitus-wagner.livejournal.com/319313.html
Reply to: