Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Шифр гаммирования со случайной равновероятной гаммой. Пусть имеется сообщение t1…tn, представляющее собой последовательность символов из алфавита А, состоящего, как и ранее, из 32 букв русского языка и пробела (буквы Е и Ё не различаются). Ключ К представляет собой последовательность чисел k1...kn из множества чисел М ={0...32}. Зашифрованный текст S1…Sn вычисляется по следующей формуле:
Si=(C(ti)) + ki) mod 33, i= 1...n,
где С: А ® М функция, отображающая символ в его порядковый номер. Запись d=(a+b)mod m означает, что d совпадает с остатком от деления на m суммы чисел а и b, например, 1=(4 + 5) mod 8.
Расшифровать сообщение можно с помощью формулы:
ti=C-1 ((si+(33 - ki)) mod 33).
В данном случае через С-1 обозначается функция, отображающая число из множества от 0 до 32 в символ (букву или пробел) с соответствующим номером.
Будем предполагать, что ключ выбирается случайно равновероятно из Мn - множества векторов длины n, координаты которых принимают значения из М (или, что то же самое, каждый из элементов ключа ki, i=1...n, выбирается случайно равновероятно и независимо из М).
Определенный таким образом шифр называется шифром гаммирования со случайной равновероятной гаммой (гаммой принято называть последовательность чисел k1...kn, складываемую по модулю с шифруемым сообщением).
При таком методе шифрования количество символов в криптограмме совпадает с количеством символов сообщения, то есть совпадают их длины. Чтобы скрыть от противника длину сообщения, его можно дополнить пробелами до некоторой фиксированной длины, которую не превосходит стандартное сообщение. В приведенном ниже примере, мы будем дополнять сообщения до 10 символов.
Зашифруем с помощью описанного выше шифра гаммирования сообщение «НАСТУПАТЬ» на ключе «05 12 03 29 24 12 30 14 11 31». Для этого, заменим буквы нашего сообщения их порядковыми номерами в алфавите и сложим эти номера с элементами ключевой последовательности по модулю 33:
13 00 17 18 19 15 00 18 28 32 - шифруемое сообщение в цифровом виде;
05 12 03 29 24 12 30 14 11 31 - ключ;
18 12 20 14 10 27 30 32 06 30 - результат шифрования.
Криптоаналитик противника, зная алгоритм шифрования и имея зашифрованный текст, но, не имея ключа, не сможет извлечь для себя ни какой другой информации, кроме самого факта передачи сообщения (факт передачи сообщения можно замаскировать, передавая с определенной частотой "пустые" сообщения). Делая разные предположения о ключе, криптоаналитик будет получать разные открытые тексты. Изменяя значение ki от 0 до 32, он получит все возможные значения i-го символа открытого текста, независимо от значения i-го символа криптограммы. Таким образом, из любого шифрованного текста можно получить произвольный текст такой же длины. В частности, если предположить, что был выбран ключ, удовлетворяющий соотношению ki,=(33-C(ti,)+si)mod33, i=l...n, криптограмма s1...sn будет расшифрована в сообщение t1...tn. Например, в нашем случае, в предположении, что использовался ключ "04 27 03 29 24 12 30 14 11 31", криптограмма "18 12 20 14 10 27 30 32 06 30" будет дешифрована в сообщение «ОТСТУПАТЬ» - прямо противоположное по смыслу исходному («НАСТУПАТЬ»). Так как ключи выбирались случайно равновероятно, криптоаналитик противника на основе шифротекста не сможет отдать предпочтение ни одному из возможных сообщений из десяти символов (всего их 3310). Единственное, что может сделать противник в данном случае - это отсортировать сообщения на более вероятные и менее вероятные, исходя из анализа обстановки. Например, если сторона, которой адресовано сообщение, имеет превосходство над своим противником, то сообщение «ОТСТУПАТЬ» является менее вероятным, чем сообщение «НАСТУПАТЬ», а получение приказа «СДАВАЙТЕСЬ» - совсем неправдоподобно. Однако чтобы прийти к подобным выводам, нет необходимости перехватывать криптограммы противника.
Рассмотренный метод шифрования можно было бы считать идеальным, если бы не один существенный недостаток - длина ключа при гаммировании случайной равновероятной гаммой совпадает с длинной шифруемого текста. Конечно, современные технические средства позволяют обеспечить хранение большого объема ключевых данных, используя для этого, например, лазерные диски. Однако во многих случаях реализация данного метода будет слишком дорогой и неудобной. Например, чтобы обеспечить шифрование изображения со спутника-шпиона необходимо будет отправить в космос целый контейнер с несколькими тысячами лазерных дисков. Большие трудности возникают также при попытке объединить в сети связи большое количество абонентов. Ведь в этом случае необходимо иметь возможность быстро получать доступ к ключу любого абонента (а их может быть несколько тысяч). Таким образом, на практике, как правило, приходится довольствоваться шифрами, которые не являются совершенными. В частности, распространены шифры гаммирования с использованием псевдослучайной гаммы.
ШИФРЫ ГАММИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ПСЕВДОСЛУЧАЙНОЙ ГАММЫ. Проанализируем стойкость, рассматривавшегося выше шифра гаммирования в предположении, что вместо случайной гаммы используется псевдослучайная последовательность. Для того чтобы упростить дальнейшее изложение, перейдем к алфавиту из 32 символов, отбросив пробел из нашего исходного алфавита М. Вместо пробела в сообщениях будем использовать одну из редко встречающихся букв, например "Ф".
Будем предполагать, что ключ K=(Y1,Y2,Y3) состоит их трех чисел, выбранных случайно равновероятно и независимо из множества {0...31}. С помощью рекуррентного соотношения Yt =(Yt-1+Yt-3)mod 32 порождаются элементы последовательности Y1...Yn+1 для t > 3. Затем по формуле
Zt = (Yt + Yt+1) mod 32, t=l,…n, (2.1)
вычисляется псевдослучайная последовательность Z1...Zn, используемая вместо случайной гаммы. Как и в предыдущем примере, шифрование заключается в сложении по модулю 32 элементов гаммы с порядковыми номерами символов шифруемого текста.
Зашифруем на ключе K=(04,31,15) сообщение
«ПРИКАЗЫВАЮ НАСТУПАТЬ».
Рекуррентная последовательность Y1...Yn+1 в данном случае будет иметь вид: "04 31 15 19 18 01 20 06 07 27 01 08 03 04 12 15 19 31 14 01 00".
Сложим по модулю 32 порядковые номера символов нашего сообщения с элементами псевдослучайной последовательности (гаммы), полученной по формуле (2.1):
15 16 08 10 00 07 27 02 00 30 20 13 00 17 18 19 15 00 18 28 - сообщение;
03 14 02 05 19 21 26 13 02 28 09 11 07 16 27 02 18 13 15 01 - гамма;
18 30 10 15 19 28 21 15 02 26 29 24 07 01 13 21 01 13 01 29 - зашифрованное сообщение.
Общее число возможных текстов из 20 символов составляет 3220, а количество различных ключей в данном случае 323=32768. Следовательно, количество возможных вариантов расшифрования при неизвестном ключе не превосходит 32768 и, имея перехваченную криптограмму, а также зная алгоритм шифрования, криптоаналитик может отбросить большую часть текстов как недопустимые (в частности, будет отброшено сообщение «ПРИКАЗЫВАЮ ОТСТУПАТЬ»).
Таким образом, криптоаналитик имеет 32768 вариантов сообщения, из которых он должен выбрать единственный правильный. Возникает вопрос - можно ли вообще отличить настоящее сообщение от ошибочных вариантов? Если сообщение представляет собой осмысленный текст на русском языке, то его наверняка удастся отличить от ложных, так как, из 3220 слов из рассматриваемого алфавита осмысленными текстами является только малая часть. Согласно исследованиям, проведенным еще К. Шенноном, осмысленных текстов из 20 букв на английском языке порядка 106. Приблизительно такая же оценка справедлива и для русского языка.
Оценим вероятность появления среди всех вариантов расшифрования второго осмысленного текста, сделав разумное допущение о том, что тексты длины 20, являющиеся ложными вариантами расшифрования нашей криптограммы, выбираются из совокупности всех последовательностей, состоящих из 20 символов, совершенно случайно, независимо от того, имеют они смысл или нет. Вероятность того, что выбранный случайным образом текст не окажется осмысленным, равна приблизительно (3220-106)/3220. Следовательно, вероятность появления среди 32767 случайных текстов осмысленного текста, оценивается следующим образом:
Для сравнения, вероятность угадать 6 чисел, выбранных случайно из 36, больше чем 10-10.
Таким образом, мы показали, что в нашем случае криптоаналитик, прочитав варианты расшифрования криптограммы для всех возможных ключей, с вероятностью близкой к единице правильно определит переданное сообщение. Если он будет отбрасывать по одному ложному сообщению в секунду, то ему понадобится на просмотр всех вариантов около 9 часов. Гораздо больше времени (546 часов при скорости один вариант в минуту) необходимо для получения вручную самих вариантов расшифровки. Таким образом, трудоемкость ручного дешифрования рассматриваемой криптограммы методом перебора всех возможных ключей составляет 555 часов.
Время дешифрования можно значительно сократить, если использовать ЭВМ для генерации вариантов сообщения. В этом случае все варианты будут получены практически мгновенно и, следовательно, трудоемкость дешифрования составит 9 часов, которые необходимы для прочтения этих вариантов. При этом, правда, нужно еще учесть время, необходимое для программирования ЭВМ. Очевидно, однако, что это время играет менее значительную роль, чем собственно время перебора (если только речь не идет о дешифровании одной единственной криптограммы).
В современных алгоритмах шифрования используются гораздо более длинные ключи, чем в нашем примере. В частности широко используемый алгоритм шифрования DESимеет ключ длиной 56 бит. Если мы захотим просмотреть все варианты дешифрования сообщения зашифрованного с помощью алгоритма DES(количество ключей в этом случае 256 = 7.2 × 1016), то для этого понадобится более 2 миллиардов лет при скорости один вариант в секунду. Метод дешифрования перебором ключей становится действительно опасным, если имеется алгоритм, позволяющий автоматизировать отбраковку ошибочных вариантов с помощью ЭВМ. Для этого может использоваться несколько способов.
Во-первых, если для проверки правильности сообщения используется контрольная сумма, то она же может послужить и для отбраковки опробуемых вариантов.
Во-вторых, если мы заранее знаем фрагмент дешифруемого сообщения (или значения некоторых служебных полей дешифруемых данных), то для отбраковки ложных сообщений достаточно произвести сравнение известного фрагмента со значением соответствующей части расшифрованных на опробуемом ключе сообщений.
Может, однако, оказаться, что проверку указанных типов пройдет большое количество сообщений. Например, если контрольная сумма содержит 32 бита, а ключ - 56 бит, то мы получим приблизительно 224 = 8388608 сообщений, имеющих правильную контрольную сумму, среди которых нужно найти единственное подлинное. В таких случаях, а также, если контрольная сумма отсутствует и неизвестна даже часть зашифрованного текста, при отбраковке ложных сообщений не обойтись без так называемых "критериев на открытый текст". Такие критерии предназначены для выявления тех последовательностей символов заданного алфавита, которые допустимы в качестве открытых сообщений.
Построим критерий на открытый текст для отбраковки ложных вариантов в рассматриваемом нами примере.
Проанализировав частоты встречаемости различных пар соседних букв в текстах русского языка (см. таблицу 2.4), можно сделать вывод, что вероятность появления 317 из них практически равна нулю. Для нашего случая, когда вместо пробела используется буква "Ф", столбец, соответствующий букве "Ф", объединяется со столбцом, соответствующим пробелу, и аналогичная операция проводится со строками. Поэтому в рассматриваемом алфавите из 32 букв число невозможных сочетаний соседних символов составляет 287. Данная особенность позволяет сформулировать критерий на открытый текст: если в тексте имеется хотя бы одна запретная биграмма, то он не является открытым сообщением.
Очевидно, что с помощью такого критерия мы не сможем отбраковать все ложные варианты расшифрования, так как не любая последовательность символов без запретных биграмм является осмысленным сообщением. Вероятность появления любой фиксированной пары символов, в конкретном месте случайно равновероятно выбранного текста (из множества текстов заданной длины), равна 1/322 для алфавита из 32 символов. Если пренебречь зависимостью соседних биграмм, то несложно подсчитать вероятность того, что из 19 пар соседних символов ни одна не окажется запретной:
(1-287/322)19≈0,002.
Следовательно, среди 32 768 вариантов сообщения лишь около 65 не содержат ни одного невозможного сочетания соседних букв. Воспользовавшись ЭВМ, отбросить тексты с недопустимыми сочетаниями соседних букв можно практически мгновенно. Затем из оставшихся нескольких десятков вариантов выбрать правильный несложно и вручную.
Читатель, знакомый с основами математической статистики, может попробовать построить и рассчитать другие - более совершенные критерии на открытый текст, с помощью которых в данном примере и без участия человека можно определить единственный правильный вариант дешифрования.
Рассмотренный метод дешифрования, заключающийся в переборе всех возможных ключей, называют методом тотального опробования. Очевидно, что время необходимое для дешифрования таким методом будет зависеть от мощности используемой ЭВМ. Поэтому, в случае полной автоматизации перебора, трудоемкость алгоритма удобнее всего измерять числом элементарных операций, производимых при выполнении этого алгоритма. Оценим трудоемкость дешифрования рассматриваемого шифра методом тотального опробования.
Для генерации одного символа опробуемого сообщения необходимо две операции сложения по модулю и несколько обращений к памяти. Проверка того, является ли сгенерированное сообщение текстом на русском языке, реализуется с помощью п обращений к памяти и сравнений, где п - длина текста (на самом деле несколько меньше, так как если в тексте уже найдена запретная биграмма, то проверять оставшиеся биграммы нет смысла). Таким образом, трудоемкость метода тотального опробования ключей можно выразить формулой Т = Сп| К |, где С - некоторая константа, не зависящая от размерности задачи. В нашем случае Т =С×20×32768=С×655360, т. е. трудоемкость опробования всех ключей нашего алгоритма шифрования составляет несколько миллионов операций (современная персональная ЭВМ проделает эти вычисления практически мгновенно).
При построении критерия на отбраковку ложных вариантов расшифрования вовсе не обязательно использовать все знаки сообщения. Скорее всего, достаточно будет небольшого отрезка из нескольких десятков знаков. Соответственно нет и необходимости расшифровывать сразу весь текст. Данные соображения позволяют прийти к выводу, что в большинстве случаев трудоемкость метода тотального опробования на качественном уровне не зависит от длины текста и определяется только количеством возможных ключей.
Не очень добросовестные производители средств шифрования данных, рекламируя свои продукты, сообщают время, необходимое для взлома этих средств, исходя из того, что противник будет применять именно метод тотального опробования. Однако этот метод далеко не всегда оказывается наилучшим.
Вернемся к рассмотрению нашего алгоритма шифрования, для которого, как мы выяснили, трудоемкость дешифрования методом тотального опробования составляет несколько миллионов операций. Сделаем предположение, что противник знает значение нескольких символов зашифрованного сообщения (это может быть стандартный заголовок, адрес, обращение или служебная информация используемого редактора текстов). В нашем примере будем считать известным, что первое слово сообщения начинается с приставки "при": приказ, приказываю, приказание и т.д. Буквы "П", "Р", "И" идут под номерами "15", "16", "08". Следовательно, выполняются соотношения: (15+Z1,)mod 32 = 18, (16+Z2)mod 32 = 30, (8+Z3)mod 32 = 10, согласно которым первые три знака гаммы принимают значения Z1,=3, Z2=14. Z3=2. Исходя из этой информации, криптоаналитик противника может составить систему уравнений:
(Y1+Y2)mod 32 = 3
(Y2+Y3)mod 32 = 14
(Y3+Y4)mod 32 = 2.
Воспользуемся для вычисления Y4рекуррентным соотношением Yt =(Yt-1+Yt-3)mod 32. В итоге, получим систему из трех уравнений, с тремя неизвестными:
(Y1+Y2)mod 32 = 3
(Y2+Y3)mod 32 = 14
(Y1+2Y3)mod 32 = 2.
Выразим Y1и Y3 через Y2, используя первое и второе уравнения:
Y1=(3 - Y2)mod 32
Y3=(14-Y2)wod32.
Затем, подставив результат в последнее уравнение, получим:
(3-Y2+28-2Y2)mod 32 = 2.
Отсюда (3Y2)mod 32 = 29.
Несложно убедиться, что последнее уравнение имеет единственное решение Y2=31. В итоге находим ключ Y1=4, Y2=31, У3=15, воспользовавшись которым можно расшифровать наше сообщение.
Таким образом, мы нашли ключ, проделав всего пару десятков операций вместо нескольких миллионов, необходимых для опробования всех возможных ключей.
Вернемся теперь к рассмотрению вопроса о способе измерения стойкости криптографических алгоритмов. Все алгоритмы шифрования можно разделить на три группы.
К первой группе относятся совершенные шифры, заведомо неподдающиеся дешифрованию (при правильном использовании). Примером такого шифра является шифр гаммирования случайной равновероятной гаммой.
Во вторую группу входят шифры, допускающие неоднозначное дешифрование. Например, такая ситуация возникает, если зашифровать с помощью шифра простой замены, рассмотренного выше, очень короткое сообщение.
Основная масса используемых шифров относится к третьей группе и может быть в принципе однозначно дешифрована. Сложность дешифрования шифра из этой группы будет определяться трудоемкостью используемого алгоритма дешифрования. Следовательно, для оценки стойкости такого шифра необходимо рассмотреть все известные алгоритмы дешифрования, и выбрать из них имеющий минимальную трудоемкость, то есть тот, который работает в данном случае быстрее всех остальных. Трудоемкость этого алгоритма и будет характеризовать стойкость исследуемого шифра.
Удобнее всего измерять трудоемкость алгоритма дешифрования в элементарных операциях, но более наглядным параметром является время, необходимое для вскрытия шифра (при этом необходимо указывать технические средства, которые доступны криптоаналитику). Не следует только забывать, что вполне возможно существование неизвестного на данный момент алгоритма, который может значительно снизить вычисленную нами стойкость шифра. К большому сожалению разработчиков шифросистем, строго доказать с помощью математических методов невозможность существования простых алгоритмов дешифрования удается чрезвычайно редко. Очень хорошим результатом в криптографии является доказательство того, что сложность решения задачи дешифрования исследуемого шифра эквивалентна сложности решения какой-нибудь известной математической задачи. Такой вывод хотя и не дает 100% гарантии, но позволяет надеяться, что существенно понизить оценку стойкости шифра в этом случае будет очень не просто.
Дата публикования: 2014-11-02; Прочитано: 7532 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!