рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Смещения и корреляции

Смещения и корреляции - раздел Компьютеры, Объединение блочных шифров Главной Проблемой Подобных Систем Являются Возможные Закономерности В Генерир...

Главной проблемой подобных систем являются возможные закономерности в генерируемой последовател ь-ности. Используемые физические процессы могут быть случайны, но между физическим процессом и компь ю-тером находятся различные измерительные инструменты. Эти инструменты могут легко привести к появлению проблем.

Способом устранить смещение,или отклонение, является XOR нескольких битов друг с другом. Если слу­чайный бит смещен к 0 на величину е, то вероятность 0 можно записать как:

Р(0) = 0.5 + е

XOR двух из таких битов дает:

Р(0) = (0.5 + ef + (0.5 - ef = 0.5 + 2е2

Те же вычисления для XOR 4 битов дают:

Р(0) = 0.5 + 8е4

XOR т битов экспоненциально сходится к равной вероятности 0 и 1 . Если известно максимальное смещение, которое допустимо в вашем приложении, вы можете вычислить, сколько битов вам нужно объединить с помо­щью XOR, чтобы уменьшить смещение до этого значения.


Еще лучше рассматривать биты попарно. Если 2 бита одинаковы отбросьте их и взгляните на следующую пару. Если 2 бита различны, используйте первый бит в качестве выхода генератора. Это полностью устраняет смещение. Другие методы уменьшения смещения используют распределение переходов сжатие и быстрое пр е-образование Фурье [511].

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

Например, возьмите радиоактивный источник и присоедините счетчик Гейгера к вашему компьютеру . Возь­мите пару шумящих диодов и записывайте в качестве события каждое превышение определенного значения . Измерьте атмосферный шум. Извлеките из каждого источника случайный бит и выполните их XOR друг с дру­гом, получая случайный бит. Возможности бесконечны.

Одно то, что генератор случайных чисел смещен не обязательно означает его бесполезность . Это только оз­начает, что он менее безопасен. Например, рассмотрим проблему Алисы, генерирующей 168-битовый ключ для тройного DES. А все, что у нее есть, - это генератор случайных битов со смещением к 0 : с вероятностью 55 про­центов он выдает нули и с вероятностью 45 процентов - единицы . Это означает, что энтропия на бит ключа со­ставит только 0.99277 (для идеального генератора она равна 1). Мэллори, пытаясь раскрыть ключ, может опти­мизировать выполняемое вскрытие грубой силой, проверяя сначала наиболее вероятные ключи (000 . . . 0) и двигаясь к наименее вероятному ключу (111 . . . 1). Из-за смещения Мэллори может ожидать, что ему удастся обнаружить ключ за 2109 попыток. При отсутствии смещения Мэллори потребуется 2Ш попыток. Полученный ключ менее безопасен, но это практически неощутимо.

Извлеченная случайность

В общем случае лучший способ генерировать случайные числа - найти большое количество кажущихся ел у-чайными событий и извлечь случайность из них. Эта случайность может храниться в накопителе и извлекаться при необходимости. .Однонаправленные хэш-функции прекрасно подходят для этого. Они быстры, поэтому вы можете пропускать биты через них, не слишком заботясь о производительности или действительной случайн о-сти каждого наблюдения. Попробуйте хэшировать почти все, что вам кажется хоть чуть-чуть случайным. Н а-пример:

— Копия каждого нажатия на клавиши

— Команды мыши

— Номер сектора, время дня и задержка поиска для каждой дисковой операции

— Действительное положение мыши

— Номер текущей строки развертки монитора

— Содержание действительно выводимого на экран изображения

— Содержание FAT-таблиц, таблиц ядра, и т.д.

— Времена доступа/изменения /dev/tty

— Загрузка процессора

— Времена поступления сетевых пакетов

— Выход микрофона

— /dev/audio без присоединенного микрофона

Если ваша система использует различные кристаллы-осцилляторы для своего процессора и часов , попытай­тесь считывать время дня в плотном цикле. В некоторых (но не всех) системах это приведет к случайным коле­баниям фазы между двумя осцилляторами.

Так как случайность в этих событиях определяется синхронизацией осцилляторов, используйте часы с как можно меньшим квантом времени. В стандартном PC используется микросхема таймера Intel 8254 (или эквива­лентная), работающая на тактовой частоте 1.1931818 МГц, поэтому непосредственное считывание регистра счетчика даст разрешение в 838 наносекунд. Чтобы избежать смещения результатов, не используйте в качестве источника событий прерывание таймера. Вот как выглядит этот процесс на языке С с MD5 (см. раздел 18.5) в качестве хэш-функции:

char Randpool[16];

/* Часто вызывается для широкого множества случайных или полуслучайных системных событий для to churn the randomness pool . Точный формат и длина randevent не имеет значения, пока его содержание


является в некоторой мере чем-то непредсказуемым. */

void churnrand(char *randevent,unsigned lnt randlen) { MD5_CTX md5; MD5Init(&md5);

MD5Update(&md5, Randpool , sizeof(Randpool)); MD5Update(&md5 , randevent , randlen ); MD5Final(Randpool,&md5); }

После достаточных вызовов chumrand() накопления достаточной случайности в Randpool, можно генериро­вать из этого случайные биты. MD5 снова становится полезной, в этот раз в качестве генератора псевдослучай­ного байтового потока, работающего в режиме счетчика.

long Randcnt;

void genrand(char *buf,unsigned int buflen) { MD5_CTX md5; char tmp[16]; unsigned int n; while(buflen != 0) {

/* Пул хэшируется счетчиком */

MD5Init(&md5);

MD5Update(&md5, Randpool, sizeof(Randpool));

MD5Update(&md5,(unsigned char *)SRandcnt,sizeof(Randcnt));

MD5Final(tmp,&md5);

Randcnt++; /* Инкрементируем счетчик */

/♦Копируем 16 или запрошенное число байтов, если оно меньше 16, в буфер пользователя*/

n = (buflen < 16) ? buflen : 16;

memcpy(buf, tmp, n);

buf += n ;

buflen -= n;

}

}

По многим причинам хэш-функция имеет ключевое значение. Во первых она обеспечивает простой способ генерировать произвольное количество псевдослучайных данных, не вызывая всякий раз chumrand(). На деле, когда запас в накопителе подходит к концу, система постепенно переходит от совершенной случайности к пра к-тической. В этом случае становится теоретически возможным использовать результат вызова genrand() для определения предыдущего или последующего результата. Но для этого потребуется инвертировать MD5, что вычислительно невозможно.

Это важно, так как процедуре неизвестно, что делается потом со случайными данными, которые она возвр а-щает. Один вызов процедуры может генерировать случайное число для протокола, которое посылается в явном виде, возможно в ответ на прямой запрос взломщика. А следующий вызов может генерировать секретный ключ для совсем другого сеанса связи, в суть которого и хочет проникнуть взломщик . Очевидна важность того, чтобы взломщик не смог получить секретный ключ, используя подобную схему действий .

Но остается одна проблема. Прежде, чем в первый раз будет вызвана genrand() в массиве Randpool[] должно быть накоплено достаточно случайных данных. Если система какое-то время работала с локальным пользовате­лем, что-то печатающим на клавиатуре, то проблем нет. Но как насчет независимой системы, которая перегру­жается автоматически, не обращая внимания ни на какие данные клавиатуры или мыши ?

Но есть одна трудность. В качестве частичного решения можно потребовать, чтобы после самой первой з а-грузки оператор какое-то время поработал на клавиатуре и создал на диске стартовый файл перед выгрузкой операционной системы, чтобы в ходе перезагрузок использовались случайные данные, переданные в Randseed[]. Но не сохраняйте непосредственно сам Randseed[]. Взломщик, которому удастся заполучить этот файл, сможет определить все результаты genrand() после последнего обращения к churnrand() прежде, чем этот файл будет создан.

Решением этой проблемы является хэширование массива Randseed[] перед его сохранением, может даже вы­зовом genrandO. При перезагрузке системы вы считываете данные из стартового файла, передаете их


churnrand(), а затем немедленно стираете их. К сожалению это не устраняет угрозы того, что злоумышленник добудет файл между перезагрузками и использует его для предсказания будущих значений функции genrand(). Я не вижу иного решения этой проблемы кроме, как подождать накопления достаточного количества случайных событий, случившихся после перезагрузки, прежде, чем позволить genrand() выдавать результаты.

– Конец работы –

Эта тема принадлежит разделу:

Объединение блочных шифров

На сайте allrefs.net читайте: Объединение блочных шифров...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Смещения и корреляции

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Объединение блочных шифров
Существует множество способов объединять блочные алгоритмы для получения новых алгоритмов. Стиму­лом создавать подобные схемы является желание повысить безопасность, не пробираясь через тернии созд

ЕСВ + OFB
Этот метод был разработан для шифрования нескольких сообщений фиксированной длины, например, бл о-ков диска [186, 188]. Используются два ключа: Ki и К2. Сначала для генерац

Пятикратное шифрование
Если тройное шифрование недостаточно безопасно - может быть, вам нужно шифровать ключи тройного шифрования, используя еще более сильный алгоритм - то кратность шифрования можно увеличить . Очень ус

И потоковые
16.1 Линейные конгруэнтные генераторы Линейными конгруэнтными генераторамиявляютсягенераторы следующей формы Хп = (аХпЛ + Ъ) mod

Объединение линейных конгруэнтных генераторов
Был предпринят ряд попыток объединения линейных конгруэнтных генераторов [1595, 941]. Криптографи­ческая безопасность полученных результатов не повышается, но они обладают более длинными периодами

Сдвиговый регистр с обратной связьюсостоит из двух частей: сдвигового регистра и функции обратной
связи(см. 15th). Сдвиговый регистр представляет собой последовательность битов . (Количество битов опреде­ляется длинойсдвигового регистра. Если длина равна п

Программная реализация LFSR
Программные реализации LFSR медленны и быстрее работают, если они написаны на ассемблере, а не на С. Одним из решений является использование параллельно 16 LFSR (или 32, в зависимости от длины слов

Линейная сложность
Анализировать потоковые шифры часто проще, чем блочные. Например, важным параметром, используе­мым для анализа генераторов на базе LFSR, является линейная сложность(linear complexi

Генератор Геффа
В этом генераторе потока ключей используются три LFSR, объединенные нелинейным образом (см. 10th) [606]. Два LFSR являются входами мультиплексора, а третий LFSR управляет выходом мультиплексора. Ес

Обобщенный генератор Геффа
Вместо выбора между двумя LFSR в этой схеме выбирается один из к LFSR, где к является степенью 2. Все­го используется к + 1 LFSR (см. 9th). Тактовая частота LFSR-1 должна быть

Генератор "стоп-пошел" (Stop-and-Go) Both-Piper
Этот генератор, показанный на 7th, использует выход одного LFSR для управления тактовой частотой друго­го LFSR [151]. Тактовый вход LFSR-2 управляется выходом LFSR-1, так что LFSR-2 может изменять

Пороговый генератор
Этот генератор пытается обойти проблемы безопасности, характерные для предыдущих генераторов, с п о-мощью переменного числа LFSR [277]. По теории при использовании большего количества LFSR вскрыть

Самопрореживающие (Self-Decimated) генераторы
Самопрореживающими называются генераторы, которые управляют собственной тактовой частотой . Было предложено два типа таких генераторов, один Рэйнером Рюппелом (Ranier Rueppel) (см. 3-й) [1359] друг

Каскад Голлманна
Каскад Голлманна (см. 0-й), описанный в [636, 309], представляет собой усиленную версию генератора "стоп-пошел". Он состоит из последовательности LFSR, тактирование каждого из которых упр

Прореживаемый генератор
Прореживаемый (shrinking) генератор [378] использует другую форму управления тактированием. Возьмем два LFSR: LFSR-1 и LFSR -2. Подадим тактовый импульс на оба регистра. Если выходом LFSR-1 являетс

Самопрореживаемый генератор
Самопрореживаемый (self-shrinking) генератор [1050] является вариантом прореживаемого генератора. Вме­сто двух LFSR используется пара битов одного LFSR. Протактируйте LFSR дважды. Если первым битом

Алгоритм М
Это название дано Кнутом [863]. Алгоритм представляет собой способ объединить несколько псевдослучай­ных потоков, увеличивая их безопасность. Выход одного генератора используется для выбора отстающ

Патенты и лицензии
SEAL запатентован [380]. По поводу лицензирования нужно обращаться к Управляющему по лицензиям IBM ( Director of Licenses, IBM Corporation, 500 Columbus Ave., Thurnwood, NY, 10594 ).

Комбинированные генераторы FCSR
Эти генераторы используют переменное количество LFSR и/или FCSR и множество функций, объединяю­щих регистры. Операция XOR разрушает алгебраические свойства FCSR, поэтому имеет смысл использовать эт

Каскад LFSR/FCSR с суммированием/четностью
По теории сложение с переносом разрушает алгебраические свойства LFSR, a XOR разрушает алгебраиче­ские свойства FCSR. Данный генератор объединяет эти идеи, используемые в перечисленных суммирующем

Генератор 1/р
Этот генератор был предложен и подвергнут криптоанализу в [193]. Если внутреннее состояние генератора в момент времени t равно х,, то хм=Ъх,то&р

Другие схемы
Еще один генератор основан на проблеме рюкзака (см. раздел 19.2) [1363]. CRYPTO-LEGGO небезопасен [301]. Джоан Дэймен (Joan Daemen) разработала SubStream, Jam и StepRightUp [402], но они слишком но

Генератор Blum-Micali
Безопасность этого генератора определяется трудностью вычисления дискретных логарифмов [200]. Пусть g - простое число, ар - еще одно простое число. Ключ х0 начинает

Blum, Blum, and Shub
Простейший и наиболее эффективный генератор, использующий сложностно-теоретический подход, в честь своих авторов называется Blum, Blum, and Shub. Мы сократим его название до BBS, хотя иногда его на

Рандомизированный потоковый шифр Диффи
Эта схема впервые была предложена Уитфилдом Диффи [1362]. Используется 2" случайных последователь­ностей. Ключ представляет собой случайную и-битовую строку. Для шифрования сообщения Ал

Рандомизированный потоковый шифр Маурера
Уели Маурер (Ueli Maurer) описал схему, основанную на выполнении XOR открытого текста с несколькими большими открытыми последовательностями случайных битов [1034, 1029, 1030]. Ключ является набором

Таблицы RAND
Давным давно, в 1955 году, когда компьютеры все еще были в новинку, Rand Corporation издала книгу, со­державшую миллион случайных цифр [1289]. Их метод описывался так: Случайные цифры

Использование случайного шума
Лучшим способом получить большое количество случайных битов является извлечение их из естественной случайности реального мира. Часто такой метод требует специальной аппаратуры, но этот трюк можно п

Использование таймера компьютера
Если вам нужен один случайный бит (или даже несколько), воспользуйтесь младшим значащим битом лю­бого регистра таймера. В системе UNIX он может быть не слишком случайным из-за различной возможной с

Измерение скрытого состояния клавиатуры
Процесс печатания и случаен, и неслучаен. Он достаточно неслучаен, чтобы его можно было использовать для идентификации печатающего человека, но он достаточно случаен, чтобы его можно было использов

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги