А.Винокуров. Серия выпусков по криптографии для электронного журнала "iNFUSED BYTES Online".


На домашнюю страничку Содержание Предыдущий выпуск Следующий выпуск

Выпуск 2. Шифрование и шифры (теоретические основы).


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

На следующем ниже рисунке 1 приведена схема преобразования данных при шифровании:

[здесь рисунок]

Рис. 1. Схема преобразования данных при шифровании.

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

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

Каким же условиям должен удовлетворять шифр? Ну прежде всего, процедура расшифрования должна всегда восстанавливать открытое сообщение в его исходном виде. Иными словами, для каждого допустимого сообщения T преобразования за- и расшифрования должны удовлетворять следующему свойству:

T = D(E(T)).

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

Отправленное сообщение до поступления к получателю является для него и, естественно, для злоумышленника неопределенным - если это было бы не так, тогда не было бы вообще никакого смысла его посылать. Пусть возможна отправка сообщений T1,T2,...,Tn с вероятностью p1,p2,...,pn соответственно. Тогда мерой неопределенности сообщения для всех, кто обладает этой априорной информацией, может служить величина математического ожидания логарифма вероятности одного сообщения, взятая со знаком "минус"; по некоторым соображениям в качестве основания логарифма удобно выбрать 2:

[здесь формула].

Эта величина имеет вполне понятный физический смысл: количество битов информации, которое необходимо в среднем передать, чтобы полностью устранить неопределенность. Если никакой априорной информации о сообщении нет кроме его размера в N бит, то все возможные из 2N вариантов считаются равновероятными и тогда неопределенность сообщения равна его размеру:

H(T ) = -2N·2-N·log2(2-N) = N = | T |,

где через |X| обозначен размер блока данных X в битах. А если об исходном тексте неизвестно вообще ничего, даже его размер? В этом случае все равно необходимо принять за основу какую-либо модель распределения. Как правило, в реальности подобных трудностей не возникает, поскольку многие весьма стойкие шифры "не считают нужным" скрывать размер шифруемого сообщения, - в этом действительно почти никогда нет особой необходимости, - и эта характеристика априорно считается известной злоумышленнику. Там же, где этот размер все же реально необходимо скрыть, все сообщения перед зашифрованием преобразуются в массивы данных одной и той же длины, и опять получается рассмотренная выше ситуация.

После перехвата шифртекста характеристика неопределенности открытого текста изменится - она станет апостериорной ("после-опытной") условной неопределенностью - условием здесь является перехваченное шифрованное сообщение T'. Теперь она определеяется следующей формулой:

[здесь формула],

где через p(Ti | T') обозначена вероятность того, что исходное сообщение есть Ti при условии, что результат его зашифрования есть T'.

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

I = H(T) - H(T | T').

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

В наилучшем для разработчиков шифра случае обе эти неопределенности равны:

H(T | T') = H(T),

то есть злоумышленник не может извлечь никакой полезной для себя информации об открытом тексте из перехваченного шифртекста: I = 0. Иными словами, знание шифртекста не позволяет уменьшить неопределенность соответствующего открытого текста, улучшить его оценку и увеличить вероятность его правильного определения. Шифры, удовлетворяющие данному условию, называются абсолютно стойкими или совершенными шифрами, так как зашифрованные с их применением сообщения не только не могут быть дешифрованы в принципе, но злоумышленник даже не сможет приблизиться к успешному определению исходного текста, то есть увеличить вероятность его правильного дешифрования.

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

Для того, чтобы шифр был абсолютно стойким, необходимо, чтобы неопределенность алгоритма шифрования была не меньше неопределенности шифруемого сообщения:

H(E) >= H(T).

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

Для простоты предположим, что исходное сообщение имеет ту же длину. Если у злоумышленника нет никаких априорных сведений о зашифрованном сообщении, для него каждый из 212 исходных вариантов равновероятен, и, таким образом, вероятность правильно определить исходное сообщение простым угадыванием равна 2-12. Предположим теперь, что злоумышленнику априорно известно, что зашифрование является наложением одной и той же 4-битовой маски на каждую 4-битовую группу сообщения с помощью операции побитового исключающего или. Очевидно, возможно 16 = 24 различных вариантов битовой маски, соответственно, возможно 16 различных значений исходного текста:

маскаисходный текст
0000100101110101
0001100001100100
0010101101010111
......
1111011010001010

Таким образом, теперь вероятность правильно угадать исходный текст равна 1/16 - знание особенности использованного способа шифрования повысило ее в 256 раз. Отсюда следует интересный вывод: чем больше неопределенность в шифрующем преобразовании для постороннего лица, тем дальше оно стоит от разгадки шифра, тем шифр надежнее. Шифр, полностью неопределенный для злоумышленника (H(E) =  O><O ) является нераскрываемым для него, то есть абсолютно стойким! Получается, что надежность шифра зависит исключительно от его секретности и не зависит от прочих его свойств.

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

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

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

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

T' = E(T) = EK(T),

здесь K - ключ шифра.

Использование принципа Кирхгофа позволяет получить следующие преимущества в построении шифров:

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

Вернемся к необходимому условию абсолютной стойкости шифра для шифров, построенных в соответствии с принципом Кирхгофа. В предположении, что никаких априорных данных о шифруемом тексте кроме его длины нет, получаем, что неопределенность исходного текста равна его длине, выраженной в битах:

H(T) = |T|.

Максимально возможная неопределенность блока данных фиксированного размера достигается, когда все возможные значения этого блока равновероятны - в этом случае она равна размеру блока в битах. Таким образом, неопределенность ключа K не превышает его длины:

H(K) <= |K|.

С учетом сказанного выше получаем необходимое условие абсолютной стойкости для шифров,удовлетворяющих принципу Кирхгофа:

|K| >= H(K) = H(EK) = H(E) >= H(T) = |T|.

Для того, чтобы шифр, построенный по принципу Кирхгофа, был абсолютно стойким, необходимо, чтобы размер использованного для шифрования ключа был не меньше размера шифруемых данных:

|K| >= |T|.

Точное равенство возможно только в том случае, если все возможные значения ключа равновероятны, что эквивалентно условию, что биты ключа равновероятны и статистически независимы друг от друга.

Примером абсолютно стойкого шифра может служить одноразовая гамма Вернама - наложение на открытые данные (T) ключа (K) такого же размера, составленного из статистически независимых битов, принимающих возможные значения с одинаковой вероятностью, с помощью некоторой бинарной операции " {+} ":

T' = T {+} K.

Используемая для наложения гаммы операция должна удовлетворять некоторым условиям, которые можно суммировать следующим образом: уравнение зашифрования должно быть однозначно разрешимо относительно открытых данных при известных зашифрованных и ключе, и однозначно разрешимо относительно ключа при известны открытых и зашифрованных данных. Если операция удовлетворяет этому свойству, она подходит. Среди подходящих операций нет подходящих лучше и подходящих хуже, с точки зрения стойкости шифра они все одинаковы - "совершенство" не знает сравнительных степеней, оно либо есть, либо его нет. По указанной причине для практического использования обычно выбирают наиболее удобную в реализации операцию - побитовое суммирование по модулю 2 или побитовое исключающее ИЛИ, так как она обладает следующими свойствами:

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

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

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

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

Таким образом, E0(01) = 11, E1(01) = 00. Очевидно, что наш шифр не обладает абсолютной стойкостью. Предположим, что перехвачена шифровка "10". Каков исходный текст? Понятно, что он может быть как 00 так и 11 в зависимости от значения ключа, и без дополнительной информации однозначно определить это невозможно, что и требовалось доказать. Конечно, приведенный пример "игрушечный", но он верно отражает суть дела: для более серьезных шифров у криптоаналитика будет просто больше "вариантов выбора" открытого текста, и никаких указаний на то, какой из них предпочесть.

Таким образом, вопрос о возможности однозначного дешифрования сообщения, зашифрованного несовершенным шифром, остается открытым. Когда же такое дешифрование возможно? Шеннон в своих работах подробно исследовал этот вопрос. Для анализа он ввел в рассмотрение следующие характеристики шифра, в целях упрощения изложения здесь они приведены в варианте битового представления данных:

1. Функция ненадежности ключа - неопределенность ключа при известных n битах шифртекста:

f(n) = H(K | T'), где |T'| = n.

Понятно, что функция ненадежности ключа f(n) может быть неопределена для некоторых n.

2. Расстояние единственности шифра - такое значение n, при котором функция ненадежности, то есть неопределенность ключа становится близкой к 0.

U(E) = n, где f(n) ~ 0.

Шеннон показал, что обе определенные выше величины зависят от избыточности открытого текста, причем расстояние прямо пропорционально размеру ключа единственности и обратно пропорционально избыточности:

[здесь формула],

где избыточность исходного текста R определяется следующим соотношением:

[здесь формула].

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

H(T) = H(K) = |K|.

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

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

На домашнюю страничку Содержание Предыдущий выпуск Следующий выпуск


[Оглавление] [Предыдущий выпуск] [Следующий выпуск]
[Начало осмотра] [Что нового] [Статьи] [Выпуски в "Байтах"] [Что скачать] [Криптоалгоритмы] [Глоссарий] [Ссылки] [Гостевая книга] [Форум] [Напиши мне]

Версия от 23.12.00. (c) 1998-2000 Андрей Винокуров.