На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Практические советы по шифрованию данных

Итак, предположим, что в нашем распоряжении имеется сим­метричный блочный шифр, содержащий два зависящих от ключа К преобразования за- и расшифрования N-битовых блоков, ЕКи DK со­ответственно. Простейший способ использовать эти преобразования -разбить шифруемый массив Т HaN-битовые блоки и шифровать их не­зависимо друг от друга:
Т  -   (Т1,Т2,...,Тп)
Т'i = ЕК 'Ti)
Т' =  (Т'1,1'2, ..., Т'п)
где =  i TiI = N
Этот режим шифрования, то есть способ использования
криптографического преобразования для шифрования данных, в
отечественной литературе и части зарубежных источников называется
режимом простой замены, в другой части зарубежных источников,
тяготеющей к англосаксонской криптографической терминологии, он называется режимом электронной кодовой книги - Electronic Code Book, сокращенно ЕСВ. Использование данного простейшего режима шифрования сопряжено с рядом трудностей. Первая, чисто техничес­кая трудность, называется проблемой последнего блока и заключается в том, что размер шифруемого текста может быть не кратен размеру
блока используемого шифра. В этом случае последний блок будет не­полным — |Tn < N, и его необходимо как-либо дополнить до размера в
N бит, так как криптографическому преобразованию может быть под­вергнут только блок полного размера. При этом все полученные биты блока шифротекста будут значащими, их нельзя отбрасывать без поте­ри информации, что приводит к увеличению размера шифротекста по
сравнению с открытым текстом, а это не во всех случаях допустимо.
Вторая проблема связана со стойкостью шифра и заключается в том, что при использовании блочного криптографического преобразо­вания ЕК для зашифрования данных из одинаковых блоков открыто­го текста получаются одинаковые блоки шифротекста:
Ti  =   Tj     EK(Ti)   = EK(Tj)
Обратное также верно: если два блока шифротекста совпадают,
то соответствующие им блоки открытого текста идентичны:
EK(Ti)   =   EK(Tj)   Ti   = Tj
В результате для аналитика противника становится возможным сделать определенные заключения относительно свойств открытого
текста, если в шифротексте встретятся совпадающие блоки. Положе­ние усугубляется тем, что в реальных открытых данных часто встреча­ются повторяющиеся паттерны - группы байтов, символов, частоты вхождения которых намного превышают среднюю вероятность появ­ления в данных случайного блока. Это позволит противнику выявлять паттерны шифротекста и тем самым определять структуру открытого текста, что, конечно, неприемлемо для серьезных систем обеспечения секретности. Например, при форматировании магнитного диска на его
дорожке записываются фиксированные байты кода. Если свежеотфор-
матированный диск заполнить данными лишь частично, то эти паттер­ны будут занимать существенную часть диска и после зашифрования на их месте окажутся повторяющиеся блоки шифротекста, что позво­лит аналитику противника определить местонахождение полезных данных и отличить их от свободного пространства диска.
Для того, чтобы преодолеть указанные недостатки, были разра­ботаны различные способы использования криптографических преоб­разований для шифрования данных, называемые режимами шифрова­ния. Общим в них является то, что преобразование зашифрования вы­полняется по более сложному уравнению и результат шифрования очередного блока в общем случае зависит не только от этого блока, но и от всех предыдущих блоков открытого текста и шифротекста, и, воз­можно, от значения параметра инициализации S, называемого синхро-посылкой:
T'i= F(T1,T2.....TLT i,T2.....T'i-l,S)
Понятно, что при вычислении функции F должно использовать­ся криптографическое преобразование ЕК и приведенное выше соот­ношение должно быть разрешимо относительно шифруемого блока Ti, чего требует обратимость процедуры шифрования. Как мы с вами вы­яснили в предыдущих выпусках, обратимость преобразования в соче­тании с его криптостойкостью в ситуациях, когда один блок данных модифицируется с использованием одного или нескольких дополни­тельных блоков данных, легче всего обеспечить за счет применения обратимых бинарных операций. Напомню, что бинарная операция «Ч называется обратимой, если существует обратная ей операция «•», та­кая, что каковы бы не были два блока данных X и Y, составляющие па­ру допустимых аргументов первой операции, справедливо следующее соотношение:
(X °    Y)    •     Y = X
Использование обратимой бинарной операции необходимо со­четать с применением криптографического преобразования способом, обеспечивающим высокую криптостойкость. С учетом последнего за­мечания существуют два возможных варианта сочетания, раз­личающихся тем, как комбинируются друг с другом две указанные операции. Соответственно, все режимы шифрования можно разделить
на два больших класса, которые можно условно назвать «блочными
режимами» и «потоковыми режимами» подобно тому, как все шифры делятся на блочные и потоковые. Смысл такого названия режимов станет понятным после ознакомления с ними (далее в тексте настоя­щего выпуска эти названия употребляются без кавычек). В блочных
режимах шифруемый блок первоначально модифицируется путем на­ложения на него с помощью бинарной операции значения функ­ции f, зависящей от всех предыдущих блоков открытого (Ti) и шифро­ванного (T'i) текста, и, возможно, от параметра инициализации (S), после чего полученное значение модифицируется с помощью крипто­графического преобразования (ЕК). Таким образом, зашифрование в блочных режимах выполняется в соответствии со следующим уравне­нием:
T'i - EK(Ti   e    f (Т1,Т2, ... ,Ti-l,T'l,T'2,...,T'i-l,S))
Тогда расшифрование в режимах этого типа выполняется по сле­дующему уравнению:
Ti - DK(T'i)    •    f (T1,T2, . . .,Ti-l,T'l,T'2,...,T'i-l,S)
где через DK обозначена обратная ЕК процедура расшифрования в ре­жиме простой замены, а через «•» - бинарная операция, обратная опе­рации «V
В потоковых режимах шифруемый блок модифицируется путем наложения на него с помощью бинарной операции («°») результата криптографического преобразования ЕК значения функции f, завися­щей от всех предыдущих блоков открытого (Ti) и шифрованного (T'i) текста, и, от параметра инициализации (S). образом,
зашифрование в потоковых режимах выполняется в соответствии со следующим уравнением:
T'i - Ti   0   EK(f(Т1,Т2,...,Ti-l,T'l,T'2,...,T'i-l,S))
Тогда расшифрование в режимах этого типа выполняется по сле­дующему уравнению:
Ti = T'i   •    ЕК(f(Tl,T2,...,Ti-l,T'l,T'2,..., Т'i-1,S))
Функцию f мы будем называть рандомнзпрующей функцией, так как основной смысл ее использования заключается в том, чтобы внести разнообразие в блоки данных, подвергающихся преобразова­нию по криптографическому алгоритму ЕК. В режимах обоих типов
значение этой функции должно быть различным для блоков с различ­ными даже если эти блоки содержат одинаковые данные.
Если
Fi - f(Т1,Т2, ...,Ti-l,T'l,T'2, ...,T'i-l,S) и Fj = f(T1,T2,...,Tj-l,T'l,T'2,...,T'j-l,S), то i     j    Fi Fj
В остальном от функции f не требуется никаких особых свойств -ни сложности, ни обратимости. Все, что ей необходимо обеспечить, это статистические характеристики ее выхода - все выходные значения должны быть равновероятны при соответствующих предположениях о распределении аргументов, ибо если выход функции будет содер­жать статистические аналитики получат в свои руки некоторые дополнительные возможности по взлому шифра. Конечно, высокая сложность функции будет полезна с точки зрения обеспечения криптостойкости шифра, однако это не является определяющим фактором при ее выборе - не стоит забывать, что стой­кость шифра обеспечивается криптографическими свойствами преоб­разования ЕК, а не сложностью функции f.
Конечно, можно попытаться объединить оба вышеуказанных подхода в один, но при этом надо отдавать себе отчет в том, что это бу­дет не новым классом режимов шифрования, а просто повторным шифрованием, - сначала в одном режиме, а потом в другом, - со все­ми вытекающими последствиями.
В частности, все вычислительные затраты на выполнение такой процедуры как минимум удвоятся. Вот почему в практических схемах шифрования ограничиваются применением режимов одного из ука­занных типов и не пытаются «впрячь лошадь в паровоз», ибо это при­вело бы к возникновению совершенно неестественной криптографи­ческой конструкции. самое время заметить, что в случаях, ког­да бинарная операция применяется для модификации одного значе­ния с использованием другого с целью только его сокрытия и не ста­вится никаких дополнительных задач вроде обеспечения максимально высокой степени перемешивания, наиболее подходящим вариантом такой операции является побитовое исключающее ИЛИ, так как из всех бинарных операций, обладающих необходимыми свойствами, она наиболее проста и технологична.
В этом случае уравнения за- и расшифрования в блочных и по­токовых типах режимов будут следующими:
1. Блочные режимы:
зашифрование:
T'i = EK(Ti      f (TI, 12, . . . , Ti-1, ТЧ, T'2, . . . , T' i-1, S) )
расшифрование:
Ti = DK(Ti)     f(T1,T2, . . .,Ti-1,T'I,T'2, . . . ,Ti-l, S)
2. Потоковые режимы:
зашифрование:
T'i = Ti    EK(f(T1,T2,...,Ti-1,T'I,T'2,...,T'i-l,S))
расшифрование:
Ti = T'i    EK(f (T1,T2, . . ., Ti-1, T'1, T'2, . . . ,14-1,S)) Теперь сравним оба типа режимов. Сравнение начнем с двух
фундаментальных фактов, которые, собственно, и определяют их свойства.
В блочных режимах зашифрование осуществляется применени­ем криптографического преобразования непосредственно к шифруе­мому блоку, модифицированному значением рандомизирующей функции f, - в уравнении зашифрования шифруемый блок Ti стоит внутри скобок криптографического преобразования ЕК(...), тогда как
в потоковых режимах зашифрование осуществляется точно так же, как в потоковых шифрах — наложением на шифруемый блок некото­рого кода с помощью обратимой бинарной операции — и шифруемый блок Ti не фигурирует в выражении для аргумента преобразования ЕК.
Для расшифрования в блочных режимах применяется крип­тографическое преобразование DK, обратное преобразованию ЕК, ис­пользованному для зашифрования, тогда как при расшифровании в
потоковом режиме используется то же самое преобразование, что и при зашифровании. Из этого следует, кратко говоря, весьма интерес­ный вывод: для построения блочных режимов шифрования необхо­димо обратимое криптографическое преобразование, тогда как для
построения потоковых режимов обратимость используемого преобразования не требуется, достаточно его стойкости. Это, в частно­сти, позволяет реализовать такие режимы на базе вычислительно нео­братимых функций, например, на базе MD5 и аналогичных алгорит­мов.
Из сказанного выше становится понятным, что названия «блоч­ные» и «потоковые» режимы имеют вполне простой и понятный
смысл: шифр в блочном режиме ведет себя, как обычный блочный
шифр: шифрованию могут подвергаться только полные блоки данных. Если шифруемый массив данных содержит нецелое число блоков, это создает для такой схемы определенные трудности - данный вопрос бу­дет подробно рассмотрен ниже. Шифры же в потоковом режиме явля­ются в полном смысле слова потоковыми шифрами и для них, в част­ности, отсутствует проблема последнего блока. По своей сути потоко­вый режим есть не что иное, как способ построения потокового шиф­ра на базе блочного криптографического алгоритма. В этом, собствен­но, и заключается фундаментальная разница между указанными типа­ми режимов, хотя, на первый взгляд, различия между ними могут по­казаться незначительными и их уравнения зашифрования похожи друг на друга:
T'i = EK(Ti    Fi)   в «блочных» режимах Т' i  =  Ti     EK(Fi)   в  «потоковых» режимах
где Fi = f(rn,T2,..,Ti -1,Т1,Г2,... ,T'i-l,S)для обоих типов режимов.
Теперь поговорим о роли параметра инициализации S, называе­мого в отечественной криптографии синхропосылкой. Дело в том, что при определенных условиях шифрование двух сообщений или масси-
BOB данных на одном и том же ключе может привести к катастрофичес­кой потере стойкости. Вместе с тем, не всегда технически возможно обеспечить смену ключа перед началом шифрования каждого нового сообщения. Особенно это было актуально для первых систем шифро­вания, использовавших потоковые шифры и обслуживавших каналы связи с высоким трафиком. Чтобы примирить указанные обстоя­тельства, в системах обеспечения секретности стали использовать по­нятие «начального состояния» шифратора.
При шифровании одного и того же сообщения дважды на одном и том же ключе, но с различными начальными состояниями ра получаются две совершенно различные выходные последователь­ности. В этом случае шифрование двух сообщений на одном и том же ключе уже не грозит критической потерей стойкости - необходимо лишь обеспечить, чтобы начальные состояния шифратора при этом
были различны. Элементом данных, определяющим это начальное состояние, как раз и является синхропосылка. Понятно, что она долж­на передаваться или храниться вместе с зашифрованными данными и не может быть секретной. Собственно, поэтому она и называется син-хропосылкой или синхронизирующей посылкой, то есть посылкой элемента данных, предназначенного для синхронизации шифрующего
устройства получателя с шифрующим устройством отправителя.
В блочных режимах шифрование двух различных массивов ин­формации на одном и том же ключе с одним и тем же параметром ини­циализации S допустимо и не ведет к потере криптографической стой­кости. Собственно, по большому счету, в режимах этого типа вполне можно обойтись и вовсе без синхропосылки. Конечно, если при этом два массива данных
Т=(Т1,Т2,...,Тп), иУ=   (VI,V2,...,Vn)
дают при зашифровании массивы шифротекста, начальные отрезки
которых совпадают. Это говорит о том, что соответствующие началь­ные отрезки исходных массивов также идентичны:
если Т' i = V i для i =1,2,..., m,
то Ti = Vi для i = l,2,...,m
Если использованная при шифровании функция f такова, что ее значение не зависит от предыдущих блоков открытого текста и шиф­ротекста, а зависит только от количества предшествующих блоков данных, то есть фактически от порядкового номера шифруемого бло­ка i, и параметра синхронизации S, т.е. если Fi то это свойство справедливо для произвольных пар одинаковых блоков, занимающих в своих текстах одно и то же место, а не только для тех, что находятся в начальных отрезках своих массивов:
T'i ='V'i       Ti = Vi для любого!
Вспомним, что в случае простой замены, т. е. когда шифруемый блок данных вовсе не модифицируется перед тем, как быть подвергну­тым зашифрованию, указанное свойство выполняется для любых сов­падающих блоков двух шифротекстов, в том числе и занимающих раз­ные позиции в своих массивах:
Т' i = V' j Ti = Vj для любых ij, и, в частности, T'i -T'j        Ti = Tj для любых ij.
Таким образом, в случае шифрования в блочных режимах двух массивов данных на одном и том же ключе с Одним и тем же началь­ным параметром или вовсе без использования начального параметра тождественность двух блоков шифротекста позволяет установить тождественность двух соответствующих блоков открытого текста, что, конечно же, неприятно, но не смертельно для шифра. В потоковых шифрах то же самое приводит к катастрофической потере стойкости. Предположим, что два массива данных
Т =  (Т1,Т2,...,Тп), и V =  (V1,V2,...,Vn)
зашифрованы в потоковом режиме на одном и том же ключе К с ис­пользованием одного и того же параметра инициализации S. Для про­стоты предположим, что для модификации шифруемых данных ис­пользуется операция побитового.
Тогда:
Т'1 = TI EK(f(S))
VI = Vi EK(f(S)),  откуда следует, что
T'I    VI =   (TI    EK(f(S)))      (VI    EK(f(S)))   - TI VI
10*
Таким образом, аналитик получает в свое распоряжение линей­ное соотношение, связывающее два первых открытых блока сообще­ний, что, конечно, является провалом в стойкости шифра и совершен­но неприемлемо. Вообще говоря, данное свойство справедливо для двух первых несовпадающих блоков массивов. Предположим, что при зашифровании двух массивов в потоковых режимах на одном и том же ключе и с использованием одной и той же синхропосылки получены шифротексты, начальные отрезки которых совпадают:
=        для i = 1,2,..., m
Точно также, как и в случае блочных режимов, это позволяет ус­тановить тождественность соответствующих отрезков открытого текста:
Т i = Vi для i =1,2^...., m
Однако помимо этого будет также выполняться и приведенное выше соотношение, но сформулированное не для первых блоков, а для первых несовпадающих блоков соответствующих массивов данных:
T'm+1   V'm+l = Tm+1 Vm+1
Конечно, в случае использования стойкого криптографического
преобразования это не позволяет получить соотношения, облегчаю­щие определение второго и последующих несовпадающих блоков мас­сивов открытых данных. Но и вышеприведенного уже вполне доста­точно для того, чтобы криптосистема была безнадежно скомпромети­рована. Аналогично случаю блочных режимов положение значительно усугубляется, если используется модифицирующая функция f, не за­висящая от значений предыдущих блоков, а зависящая только от но­мера шифрующего блока (i) и от синхропосылки (S):
T'i = Ti EK(f(i,S)) Vi  = Vi    EK(f (i,S) )
откуда следует, что
Vi = Ti Vi
для всех блоков шифруемьгх массивов, а не только для первых двух от­личающихся, как это было в общем случае. Последнее соотношение позволяет восстановить оба открытых сообщения, причем тем легче, чем большей избыточностью они обладают. Данная ситуация по сути представляет случай повторного использования одноразовой гаммы и влечет те же самые катастрофические для шифра последствия. Вот по­чему для систем шифрования, в которых используются потоковые ре­жимы, необходимо обеспечивать уникальность синхропосылки в слу­чаях, когда возможно зашифрование нескольких массивов данных на одном и том же ключе.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика