Автор работы: Пользователь скрыл имя, 27 Мая 2013 в 18:39, контрольная работа
В данной статье рассматривается подход к созданию криптоалгоритмов, преобразующих исходный текст таким образом, чтобы трудоёмкость его анализа была не ниже полного перебора всего множества ключей, а также невозможно осмысленная модификация зашифрованного сообщения без точного знания ключа.
В отличие от некоторых других статей, описывающих «доисторические» криптоалгоритмы, единственное достоинство которых в том, что их использование не надо лицензировать у спецслужб, рассматриваемый симметричный криптоалгоритм базируется на современной теории двоичных полиномов и обеспечивает невозможность анализа шифрованного текста существующими технологиями.
В данной статье рассматривается подход к созданию криптоалгоритмов, преобразующих исходный текст таким образом, чтобы трудоёмкость его анализа была не ниже полного перебора всего множества ключей, а также невозможно осмысленная модификация зашифрованного сообщения без точного знания ключа.
В отличие от некоторых других статей, описывающих «доисторические» криптоалгоритмы, единственное достоинство которых в том, что их использование не надо лицензировать у спецслужб, рассматриваемый симметричный криптоалгоритм базируется на современной теории двоичных полиномов и обеспечивает невозможность анализа шифрованного текста существующими технологиями. Тут уже никакой «хакер» не сможет взломать шифр ни на бумажке, ни на своём энном пентиуме, а при выборе соответствующей длины ключа, шифр невозможно будет взломать всеми вычислительными средствами планеты в разумные сроки. Описываемый алгоритм прост и легко реализуем, работает достаточно быстро, поскольку не использует трудоёмких операций вроде умножения и деления, время его выполнения линейно зависит от объёма текста и несущественно зависит от длины ключа (но существенно зависит от вида полинома). Алгоритм легко реализуем аппаратно.
А зачем надо шифроваться вообще? Есть ли что скрывать обычному законопослушному гражданину от "всесильных" спецслужб (или разных тёмных личностей)? Представляет ли ценность для кого-нибудь банальная личная жизнь обычных людей?
Думаю лишний раз трогать хакеров и кракеров не надо, это наверно всем порядком поднадоело, а вот вспомнить недавний скандал в Европарламенте, связанный с системой тотального электронного шпионажа «Эшелон», стоит (статья в одном из номеров журнала «Эхо Планеты» за этот год). В Европарламенте обсуждался вопрос, о том, что же всё-таки делать дальше, ведь никто не собирался выкидывать «Эшелон» на свалку только из-за того, что Европарламенту это не понравилось! И одним из выходов было признание необходимости тотального использования криптосистем.
А насчёт того, интересна ли жизнь
обычных людей спецслужбам, стоит
вспомнить статью, промелькнувшую на
страницах одной из компьютерных
газет (автора не помню, извиняйте ;). В
ней высказывалось
В локальных сетях прослушать весь трафик своего сегмента сможет даже начинающий ламер ;).
Да, ещё. Про существование всяких средств перехвата излучения мониторов и т.п. читал много, а вот про реальное их использование для отлова преступников не слышал. Всё сводилось к банальному взводу ОМОНА (или что у них там) и «Руки от клавы !» с выносом сервера. Да и то, насколько помню, проваливались такие преступники из-за своей жадности, а не из-за того что кто-то что-то у них подслушал. Вполне может быть что такие случаи не афишируются, и поэтому информации минимум.
Некоторыми из требований,
предъявляемых к
То есть криптоалгоритм должен обеспечить невозможность анализа зашифрованного текста. Задачи криптоанализа, в частности, состоят в установлении зависимостей между зашифрованным и исходным текстом (или его фрагментом) без знания ключа. Криптоалгоритм же надо строить таким образом, чтобы трудоёмкость анализа была не ниже полного перебора всего множества возможных ключей.
Идея такова: обеспечить влияние любого бита текста на все остальные таким образом, чтобы имея два одинаковых исходных текста, изменив любой бит (или группу битов) одного текста, на выходе получить два совершенно различных текста (в идеале отличающихся между собой как две случайные последовательности). Аналогичные требования предъявляются к обратному преобразованию и к изменению ключа.
Одними из этапов шифрования в симметричных криптосистемах является гаммирование и гаммирование с обратной связью.
Гаммирование – наложение гаммы (обычно псевдослучайной последовательности) на текст обратимым образом.
Гаммирование с обратной связью – значение зашифрованного символа зависит не только от гаммы, но и от предыдущих символов.
Остальные этапы рассматривать не будем, поскольку для них ничего нового предложено не будет, и их без проблем можно будет добавить к предлагаемому алгоритму.
Наша задача состоит в том, чтобы обеспечить такое гаммирование с обратной связью, которое бы приводило к полному изменению текста на выходе даже при несущественном изменении входного. Рассмотрим немного теории (излагается сокращенно по [2]).
Одним из наиболее широко применяемых способов формирования псевдослучайных последовательностей является способ, основанный на использовании соотношения:
(2.1)
где k - номер такта; akÎ{0, 1}-символы последовательности;
aiÎ{0, 1}-постоянные коэффициенты;
- операция суммирования по модулю два m логических переменных.
При соответствующем
выборе коэффициентов ai, на основании характеристического
полинома j(x)=1Åa1x1Åa2x2a3x3…am-1xm-1a
Главное преимущество метода
формирования псевдослучайных последовательн
Некоторыми из наиболее
важных для нас свойств М-
Сигнатура – это небольшой объём информации, максимально характеризующей длинную двоичную последовательность. Сущность сигнатуры в том, что для двух различных последовательностей , сигнатуры, характеризующие их, с очень большой вероятностью различаются.
Для сжатия двоичной последовательности в сигнатуру используем следующее соотношение:
где y(k) Î {0,1} – k-й символ сжимаемой последовательности {y(k)}, k = 1..l; aiÎ{0,1} – коэффициенты порождающего полинома j(x); ai(k-1)Î{0,1} – содержимое i-го элемента памяти в k-1-й такт. Процедура сдвига информации описывается соотношением
aj(k) = aj-1(k-1), j = 2..m.
Для описания процедуры сжатия информации, основанной на применении примитивных полиномов, используются различные математические модели и алгоритмы. Одной из наиболее часто применяемых является модель, реализующая идею представления процедуры сжатия информации как операцию деления полиномов над полем GF(2). При этом в качестве делимого используется поток сжимаемых данных, описываемых полиномом c(x) степени l-1, где l-количество бит в последовательности. Так, например, последовательность 10011 имеет вид полинома c(х) = x4ÅxÅ1. Делителем служит примитивный полином y(х), в результате деления на который получается частное q(х) и остаток S(х), связанные классическим соотношением вида
c(x) = q(x)y(x) Å S(x), (2.3)
где остаток S(х), представляющий
собой полином степени, меньшей,
чем
m = deg y(x), называется сигнатурой.
Результат сжатия C(x) (m-разрядное число, содержащееся в a1..am), получающийся по выражению (2.2), не совпадает с S(x), C(x)¹S(x), но линейно с ним связан.
Каковы же вероятности того, что сигнатуры различаются для двух различных последовательностей? Сигнатуры различаются для двух последовательностей любой длины l, отличающихся на один бит, и для всех последовательностей длиной l£2m-1, отличающихся на два любых бита [2]. Для n-кратных изменений (l=2m-2), при достаточно большом m, сигнатуры различаются с вероятностью » 1-1/2m, что при m>7 практически равно единице. Единственный параметр, влияющий на значения вероятности - старшая степень m полинома j(х). Дальнейшие упоминания о таких вероятностях будут менее точны, поэтому когда надо будет уточнить, обращайтесь к этому абзацу.
Для того чтобы изменение одного бита (или группы битов) воздействовало на все остальные, поступим следующим образом: будем вычислять сигнатуру двоичной последовательности и одновременно некоторой функцией преобразовывать биты, сигнатура для которых уже рассчитана. Естественно, эта функция должна иметь соответствующую ей обратную функцию для восстановления исходного текста. Преобразовывать можно как один бит, так сразу и группу битов. Шаг алгоритма может быть длиной как в один бит, так и в несколько бит.
Для простоты понимания рассмотрим алгоритм, с функцией, преобразующий один бит, и шагом в один бит.
k – длина последовательности, бит;
m – старшая степень полинома
для расчёта сигнатуры, а
сигнатура(предыдущая сигнатура, новый бит) – функция, осуществляющая сжатие последовательности в сигнатуру;
f(x, ai) – функция, осуществляющая преобразование бита ai некоторым числом x;
ai – i-ый бит последовательности.
Базовое преобразование (прямой ход) будет выглядеть так:
(3.1)
prev = 0;
для i от 1 до k
{
next = сигнатура(prev, ai);
ai = f(prev, ai);
prev = next;
}
Обратное преобразование (прямой ход) будет выглядеть так:
(3.2)
prev = 0;
для i от 1 до k
{
ai = f -1(prev, ai);
prev = сигнатура(prev, ai);
}
Как видим, изменение бита ai воздействует на все последующие биты, и вероятность того, что изменение этого бита отразиться на последующих, очень близка к единице. А что же делать с битами, предшествующими ai, ведь изменение их не затронет? Поступим просто – совершим такое же преобразование повторно, но в обратном направлении.
Базовое преобразование, обратный ход:
(3.3)
prev = 0;
для i от k до 1
{
next = сигнатура(prev, ai);
ai = f(prev, ai);
prev = next;
}
Обратное преобразование, обратный ход:
(3.4)
prev = 0;
для i от k до 1
{
ai = f -1(prev, ai);
prev = сигнатура(prev, ai);
}
Преобразования (3.1) и (3.3) разносят изменения в любой точке последовательности на всю последовательность целиком таким образом, что каждый бит становится связанным со всеми остальными, и его изменение повлечёт изменение остальных битов с вероятностью, очень близкой к единице. Для восстановления исходного текста надо применить последовательно преобразования (3.2) и (3.4).
Но вышеописанное обеспечивает
полноценное воздействие
Выглядеть это будет так:
фаза 1 – защита от изменений в исходном тексте
// прямой ход (3.5)
prev = 0;
для i от 1 до k
{
next = сигнатура(prev, ai);
ai = f(prev, ai);
prev = next;
}
// обратный ход (3.6)
prev = 0;
для i от k до 1
{
next = сигнатура(prev, ai);
ai = f(prev, ai);
prev = next;
}
фаза 2 – защита от изменений в зашифрованном тексте
// прямой ход (3.7)
prev = 0;
для i от 1 до k
{
ai = f(prev, ai);
prev = сигнатура(prev, ai);
}
// обратный ход (3.8)
prev = 0;
для i от k до 1
{
ai = f(prev, ai);
prev = сигнатура(prev, ai);
}
// обратный ход (3.8)-1
prev = 0;
для i от k до 1
{
next = сигнатура(prev, ai);
ai = f -1(prev, ai);
prev = next;
}
// прямой ход (3.7)-1
prev = 0;
для i от 1 до k
{
next = сигнатура(prev, ai);
ai = f -1(prev, ai);
prev = next;
}
// обратный ход (3.6)-1
prev = 0;
для i от k до 1
{
ai = f -1(prev, ai);
prev = сигнатура(prev, ai);
}
// прямой ход (3.5)-1
prev = 0;
для i от 1 до k
{
ai = f -1(prev, ai);
prev = сигнатура(prev, ai);
}
Одной из ранних идей преобразований подобного рода была такая: текст разбивается на две половинки, вычисляется сигнатура первой половины и с помощью этой сигнатуры преобразуется вторая половина, затем наоборот. Каждая из этих половинок опять разбивается на две, и преобразование повторяется рекурсивно, пока длина половинки не станет меньше одного бита (или байта). Время такого преобразования – порядка двоичного логарифма от длины последовательности.
Информация о работе Подход к созданию трудноанализируемых шифров