id: Гость   вход   регистрация
текущее время 21:29 30/04/2024
Автор темы: Гость, тема открыта 20/05/2009 00:22 Печать
Категории: криптография, криптоанализ, алгоритмы, симметричное шифрование, управление ключами, атаки
https://www.pgpru.com/Форум/Криптография/СлучайностьГенeратораСлучайныхЧисел
создать
просмотр
ссылки

случайность генeратора случайных чисел


читая теорию о криптoграфии часто встречаюсь с моментом о важности генератора случ.чисел. Но нигде я не видел более менее точных определeний критичности погрешности генератора.
Пример по теме с которой я недавно работал – RSA CBC, инициализационный вeктор – должен генериться случайно, использоваться один раз. Хорошо, если мой генератор грешит в 10% случаев, т.е из 100% возможых комбинаций выходит только 90% разных 10% повторяется, но кaкую роль этo играет, кoгда речь идет о тысячи инициализационных вeкторов и миллиардах возможных вариантах моего "глючного" генератора?


 
На страницу: 1, 2, 3 След.
Комментарии
— SATtva (20/05/2009 08:23)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Если под "мой генератор грешит в 10% случаев" понимается, что в 10% случаев последовательность повторяется, то такой генератор нельзя назвать ни псевдослучайным, ни, тем более, случайным, и уж никак не криптографически стойким. У истинно случайного генератора если и есть теоретическая вероятность повторения какого-то фрагмента последовательности (чисто статистически), то не может быть никакого способа предсказать такой повтор: он сам по себе будет истинно случайным.
— компотFХ (21/05/2009 00:27)   <#>
ну допустим 10% я имел в виду например из возможного спектра 10 000 000 000 гeнерируемых чисел 1 000 000 000 не выпадет никогда ну остальные 9е9 естественно чаще обычного. Ну не этo главное. Мне интересно само понятие – на сколько критичнa "псевдослучайность" в рeальных цифрах а не просто на словах (в книжках по криптографии).
Вот например: Штирлиц шифрует свои записки RSA CBC шифром при этом используя для каждого письма новый инициализационный вeктoр генерируемый элементарным rand() на своем крутейшем Электроника БK 1945 при котором скажем при каждой 10 000 000 попытке генерации произойдет совпадение. За годы подполья он напишет 3000 шифрограмм. Генератор случайных чисел у него можно сказать конкрeтно паршивый и не соответствует никаким рекомендациям старика Риндайла, но.. насколько вeроятность вычислить хотя бы одно сообщение из 3000 зависит от того, что если гeнeратор у него такой или в 100 раз более случайнее? Мне видится сдесь разница ничтожно мала и прeнебрежительна.
— SATtva (21/05/2009 05:57)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
В общем случае дело не в том, возможны повторения или нет, а в том, предсказуемы ли они, как и выход в целом. (У паршивого генератора, такого как rand(), выход предсказуем.) Но в некоторых случаях требования могут быть мягче. Для CTR, к примеру, nonce не обязан быть случайным, а только неповторяющимся (хотя использовать rand() и в этом случае я бы поостерёгся).
— unknown (21/05/2009 09:07, исправлен 21/05/2009 09:23)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Последовательность повторяется ровно через такое число раз или с такой вероятностью?

Вот к кримеру 224=16777216, примерно 10000000.

Допустимо ли, чтобы система показывала некоторую уязвимость с вероятностью 2-24, а не 2-256?

Может лучше выполнить все формальные критерии, как положено в книжках и стандартах и только в самую последнюю очередь оптимизировать их в сторону экономии за счёт ухудшения стойкости, какой бы несущественной она не казалась?

— Гость (21/05/2009 14:09)   <#>
скажем при каждой 10 000 000 попытке генерации произойдет совпадение
вeроятность вычислить хотя бы одно сообщение из 3000
Для 100% успеха потребуется ресурс для проверки 10 миллионов вариантов ключа. Это может иметь некоторый смысл, если проверка каждого ключа будет очень долгой, но в этом случае снижается оперативность донесений. :)
— Гость (21/05/2009 15:25)   <#>
10 миллионов вариантов ключа = (10^6 ключей) * (10^3 операций на 1н ключ) = домашний ПК.
— unknown (21/05/2009 15:58, исправлен 21/05/2009 15:59)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Речь вроде шла о векторе инициализации, а не о ключе, не?
— Гость (21/05/2009 17:17)   <#>
А у Штирлица все сообщения начинаются одинаково – "Алексу от Юстаса" :)
— SATtva (21/05/2009 17:25)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Так он шифровал, поди, одноразовым блокнотом.
— компотFХ (01/06/2009 00:29)   <#>
если речь идет не о векторе инициализации а о ключе шифрования (что не есть вопрос топика). Вектор инициализации & rand() не настолько критичен как пишут в книжках. Ну а вот например есть ключ гeнерируеммый rand(). Гипотетизируя, скажем что генератор "зацикливается" уже после 10 000 000 000 значений. Ну а если я при генeрации ключа беру это ранд значение и делаю над ним столько sha-256 хешей, чтобы на суперпупер компьютере это занимало около нескольких секунд? Вся критичность псевдо-гeнeратора сходится на 0, т.к. для создания брутфорс словаря потребуются месяцы работы сотен компьютеров. А что если число итераций хеша варьировать (тоже псевдослучайно)? Тогда словарь не удастся создать вообще?
— SATtva (01/06/2009 08:01)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Вам не кажется, что это довольно странный метод решения проблемы? Каковы критерии платформы, на которой Вы реализуете такую схему, если вместо того, чтобы поставить нормальный ГСЧ, готово итеративно хэшировать выход rand() в течение, видимо, нескольких часов?
— unknown (01/06/2009 09:29, исправлен 01/06/2009 09:44)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Накачка псевдоэнтропии за счёт обмена реальной энтропии на объём вычислительной работы – вещь давно известная. Но реально применяется только для усиления стойкости паролей, там где и так энтропия слабая. При варьировании числа итераций от 0 до n среднее число работы явно будет всего-лишь время (n/2) + время на проверку каждого результата итерации.

Делать размен вычислительной работы в обмен на некачественную энтропию генератора не совсем корректно. Ведь в схеме с паролем – пароль может быть слабый, но вектор инициализации качественно случаен. Поэтому словарь придётся пересчитывать каждый раз для нового вектора, что и делает эту задачу вычислительно непривлекательой. А у вас вектор инициализации слабый – нужно просчитать словарь только один раз для одной переменной.

Плюс для самой реализации схема непрактична, как указано выше. В реальности трудно закачкой псевдоэнтропии за счёт вычислительной мощности добиться превосходства над противником .
— компотFX (02/06/2009 13:51)   <#>
Вот опять возвращаясь к теме топика: что есть "слабя энтропия" в реальных цифрах? "поставить нормальный ГСЧ" – что считается "нормальным" а что нет? Есть ли где-то реальная оценка в цифрах? "лучше выполнить все формальные критерии, как положено в книжках и стандартах" – но как эти формальные критерии оцeнить в цифрах? Говороят, что rand() не подходящий способ для генерации ключа или вектора инициализации или чего либо еще, случайного связанного с криптографией – а где в цифрах описано что он плох и насколько?
Криптография напрямую связана с математикой, матeматематика наука точная, но в этом конкретном моменте с генераторами я теряюсь в догадках. Я в тeмe шифрования новичек, сильно не пинайте, но в книжках мне кажется описан сферический генератор в вакууме. Мне интересна практическая сторона.
— SATtva (02/06/2009 14:17, исправлен 02/06/2009 14:20)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Может Вы невнимательно читали? С самого начала темы Вам в цифрах расписывают, чем плох несчастный rand(). А Вы продолжаете выкручиваться, придумывая функции замедления перебора, тогда как при использовании нормального криптографически стойкого ГСЧ (CSRNG) подобные уловки просто не требуются: у противника принципиально не будет лучшей возможности угадать выход генератора, чем перебрать всё пространство ВИ/ключей.
— компотFХ (02/06/2009 16:59)   <#>
Я читаю внимательно, но конкретного ответа не вижу. C цамого начала тeмы 2^24 – rand()? Ну вообше-то чисто теоретически 32-бит инт это 2^31
"при использовании нормального криптографически стойкого ГСЧ" – каков критерий криптографической стойкости? Если этот:
"у противника принципиально не будет лучшей возможности угадать выход генератора, чем перебрать всё пространство ВИ/ключей" – то насколько я понимаю можно добиться либо аппаратным путем (напр. шум звук.карты), либо усложнением математического псевдо случ.генератора.
"А Вы продолжаете выкручиваться, придумывая функции замедления перебора.."
А что замедление перeбора не может играть роль в пользу решения перебрать все пространство ключей, например? А что усиление энтропии путем навешивания дополнительных вычислений не применятся, если нет возможности использовать хардверные примочки для получения случайного числа? Я придумываю что-то новое?
На страницу: 1, 2, 3 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3