Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Брюс Шнайер. Прикладная криптография

..pdf
Скачиваний:
3219
Добавлен:
02.05.2014
Размер:
3.41 Mб
Скачать

обеспечивают безопасность блочного шифра. В общем случае чем S-блоки больше, тем лучше.

В DES восемь различных 6*4-битовых S-блоков. В Khufu и Khafre единственный 8*32-битовый S-блок, в LOKI 12*8-битовый S-блок, а в Blowfish и CAST 8*32-битовые S-блоки. В IDEA S-блоком по сути является умножение по модулю, это 16*16-битовый S-блок. Чем больше S-блок, тем труднее обнаружить статистические отклонения, нужные для вскрытия с использованием либо дифференциального, либо линейного криптоанализа [653, 729, 1626]. Кроме того, хотя случайные S-блоки обычно не оптимальны с точки зрения устойчивости к дифференциальному и линейному криптоанализу, сильные S-блоки легче найти среди S-блоков большего ра з- мера. Большинство случайных S-блоков нелинейны, невырождены и обладают сильной устойчивостью к лине й- ному криптоанализу - и с уменьшением числа входных битов эта доля снижается медленно [1185, 1186, 1187].

Размер m важнее размера n. Увеличение размера n снижает эффективность дифференциального криптоан а- лиза, но значительно повышает эффективность дифференциального криптоанализа. Действительно, если n2m-m, то наверняка существует линейная зависимость для входных и выходных битов S-блока. И если n2m, то линейная зависимость существует только для выходных битов [164].

Заметной частью работы по проектированию S-блоков является изучение логических функций [94, 1098, 1262, 1408]. Для обеспечения безопасности булевы функции, используемые в S-блоках, должны отвечать опр е- деленным условиям. Они не должны быть ни линейными, ни аффинными, ни даже быть близкими к линейным или аффинным [9, 1177, 1178, 1188]. Количество нулей и единиц должно быть сбалансированным, и не должно быть никаких корреляций между различными комбинациями битов. При изменении на противоположный л ю- бого входного бита выходные биты должны вести себя независимо. Эти критерии проектирования также связ а- ны с изучением функций изгиба: функций, которые, как может быть показано, являются оптимально нелине й- ными. Хотя они определены просто и естественно, их изучение очень нелегко [1344, 1216, 947, 905, 1176, 1271, 295, 296, 297, 149, 349, 471, 298].

Очень важным свойством представляется лавинный эффект: сколько выходных битов S-блока изменяется при изменении некоторого подмножества выходных битов. Нетрудно задать для булевых функций условия, в ы- полнение которых обеспечивает определенный лавинный эффект, но проектирование таких функций является более сложной задачей. Строгий лавинный критерий (strict avalanche criteria, SAC) обеспечивает, что с изм е- нением одного входного бита изменяется ровно половина выходных битов [1586]. См. также [982, 571, 1262, 399]. В одной из работ эти критерии рассматриваются в терминах утечки информации [1640].

Несколько лет назад криптографы предложили выбирать S-блоки так, чтобы таблица распределения разл и- чий для каждого S-блока была однородной. Это обеспечило бы устойчивость к дифференциальному криптоан а- лизу за счет сглаживания дифференциалов на любом отдельном этапе [6, 443, 444, 1177]. Примером такого проектирования является LOKI. Однако такой подход иногда способствует дифференциальному криптоанализу [172]. Действительно, лучшим подходом является минимизирование максимального дифференциала. Кванджо Ким (Kwangjo Kim) выдвинул пять критериев проектирования S-блоков [834], похожих на критерии проектир о- вания S-блоков DES.

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

1.Случайно выбрать. Ясно, что небольшие случайные S-блоки небезопасны, но большие случайные S-блоки могут оказаться достаточно хороши. Случайные S-блоки с восемью и более входами дост а- точно сильны [1186, 1187]. Еще лучше 12-битовые S-блоки. Устойчивость S-блоков возрастает, если они одновременно являются и случайными, и зависящими от ключа. В IDEA используются большие зависящие от ключа S-блоки.

2.Выбрать и проверить. В некоторых шифрах свойства S-блоков, генерированных случайным образом, проверяются. Примеры такого подхода содержатся в [9, 729].

3.Разработать вручную. При этом математический аппарат используется крайне незначительно: S-блоки создаются с использованием интуитивных приемов. Барт Пренел (Bart Preneel) заявил, что "... теор е- тически интересные критерии недостаточны [для выбора булевых функций S-блоков] ...", и что "... н е- обходимы специальные критерии проектирования" [1262].

4.Разработать математически. S-блоки создаются в соответствии с математическими законами, поэтому они обладают гарантированной надежностью по отношению к дифференциальному и линейному криптоанализу, а также хорошими диффузными свойствами. Прекрасный пример такого подхода можно найти в [1179].

Существует ряд призывов объединить "математический" и "ручной" подходы [1334], но реально, по вид и- мому, конкурируют случайно выбранные S-блоки и S-блоки с определенными свойствами. Конечно преимущ е- ством последнего подхода является оптимизация против известных методов вскрытия - дифференциального и линейного криптоанализа - но обеспечиваемая этим подходом степень защиты от неизвестных методов вскр ы-

тия также неизвестна. Разработчикам DES было известно о дифференциальном криптоанализе, и его S-блоки были оптимизированы соответствующим образом. Скорее всего, о линейном криптоанализе они не знали, и S- блоки DES очень слабы по отношению к такому способу вскрытия [1018]. Случайно выбранные S-блоки в DES были бы слабее против дифференциального криптоанализа, но сильнее против линейного криптоанализа.

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

Проектирование блочного шифра

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

Легко можно спроектировать блочный шифр, если вы используете память, достаточную для размещения S- блоков 48*32. Трудно спроектировать небезопасный вариант DES, если вы собираетесь использовать в нем 128 этапов. При длине ключа 512 битов не стоит беспокоиться о том, нет ли какой-либо зависящей от ключа ко м- плиментарности.

14.11 Использование однонаправленных хэш-функций

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

Ci = Pi H(K, Ci-1)

Pi = Ci H(K, Pi-1)

Установите длину блока равной длине результата однонаправленной хэш-функции. По сути это приводит к использованию однонаправленной хэш-функции как блочного шифра в режиме CFB. При помощи аналогичной конструкции можно использовать однонаправленную хэш-функцию и в режиме OFB:

Ci = Pi Si; Si = H(K, Ci-1)

Pi = Ci Si = H(K, Ci-1)

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

Karn

Этот метод, изобретенный Филом Карном (Phil Karn) и открытый им для свободного использования, создает обратимый алгоритм шифрования из определенных однонаправленных хэш-функций.

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

Для шифрования сначала разбейте открытый текст на две 16-байтовых половины: Pl è Pr. Затем разбейте на две 48-байтовых половины ключ: Kl è Kr.

P= Pl , Pr,

K = Kl , Kr

Добавьте Kl ê Pl и выполните хэширование однонаправленной хэш-функцией, затем выполните XOR резул ь- тата с Pr, получая Cr, правую половину шифротекста. Затем, добавьте Kr ê Cr выполните хэширование однонаправленной хэш-функцией. Выполните XOR результата с Pl , получая Cl. Наконец, объедините Cr è Cl , получая шифротекст.

Cr = Pr H(Pl, Kl)

Cl = Pl H(Cr, Kr)

C = Cl, Cr

Для дешифрирования просто инвертируйте процесс. Добавьте Kr к Cr, выполните хэширование и XOR результата с Cl , получая Pl. Добавьте Kl ê Pl, выполните хэширование и XOR результата с Cr , получая Pr.

Pl = Cl H(Cr, Kr)

Pr = Cr H(Pl, Kl)

P = Pl, Pr

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

Luby-Rackoff

Майкл Любы (Michael Luby) и Чарльз Ракофф (Charles Rackoff) показали, что Karn не является безопасным [992]. Рассмотрим два одноблочных сообщения: AB и AC. Если криптоаналитику известны открытый текст и шифротекст первого сообщения, а также первая половина открытого текста второго сообщения, то он может легко вычислить все второе сообщение. Хотя такое вскрытие с известным открытым текстом работает только при определенных условиях, оно представляет собой главную проблему в безопасности алгоритма.

Ее удается избежать при помощи трехэтапного алгоритма шифрования [992,1643,1644]. Он использует три различных хэш-функции: H1, H2 è H3. Дальнейшие исследования показали, что H1 может совпадать с H2, èëè H2 может совпадать с H3, но не одновременно [1193]. Кроме того, H1, H2 è H3 не могут быть основаны на итерациях одной и той же базовой функции [1643]. В любом случае при условии, что H(k,x) ведет себя как псевдослу- чайная функция, трехэтапная версия выглядит следующим образом:

(1)Разделите ключ на две половины: Kl è Kr.

(2)Разделите блок открытого текста на две половины: L0 è R0.

(3)Объедините Kl è L0 и выполните хэширование. Выполните XOR результата хэширования с R0, получая R1:

R1= R0 H(Kl, L0)

(4)Объедините Kr è R1 и выполните хэширование. Выполните XOR результата хэширования с L0, получая L1

L1 = L0 H(Kr, R1)

(5)Объедините Kl è L1 и выполните хэширование. Выполните XOR результата хэширования с R1, получая R2:

R2= R1 H(Kl, L1)

(6)Объедините L1 è R2, получая сообщение.

Шифр краткого содержания сообщения

Шифр краткого содержания сообщения(Message Digest Cipher, M DC), изобретенный Питером Гутманном (Peter Cutmann) [676], представляет собой способ превратить однонаправленные хэш-функции в блочный шифр, работающий в режиме CFB. Шифр работает почти также быстро, как и хэш-функция, и по крайней мере н а- столько же безопасен. Оставшаяся часть этого раздела предполаг ает знакомство с главой 18.

Хэш функции, например MD5 и SHA, используют 512-битовый текстовый блок для преобразования входн о- го значения (128 битов в MD5, и 160 битов в SHA) в результат того же размера. Это преобразование необрат и- мо, но прекрасно подходит для режима CFB: и для шифрования, и для дешифрирования используется одна и та же операция.

Рассмотрим MDC с SHA. MDC использует 160-битовый блок и 512-битовый ключ. Используется побочный эффект хэш-функции, когда в качестве прежнего хэш-значения берется входной блок открытого текста (160 б и- тов), а 512-битовый вход хэш-функции играет роль ключа (см. Рис 14.5). Обычно при использовании хэшфункции для хэширования некоторого входа 512-битовый вход меняется при хэшировании каждого нового 512битового блока. Но в данном случае 512-битовый вход становится неизменяемым ключом.

MDC можно использовать с любой однонаправленной хэш-функцией: MD4, MD5, Snefru, и т.д. Он незап а- тентован и может быть совершенно бесплатно использован кем угодно когда угодно и для чего угодно [676 ].

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

øàÿ èäåÿ.

Безопасность шифров, основанных на однонаправленных хэш-функциях

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

Áëîê

 

сообщения

Êëþ÷

Выходное

 

Õýø-

 

Выходное

Õýø-

 

 

функция

 

функция

 

значение

значение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Открытый текст Шифротекст

(a) Хэш-функция

(b) Хэш-функция как блочный шифр в режимеCFB

Рис. 14-5. Шифр краткого содержания сообщения (MDC).

14.12 Выбор блочного алгоритма

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

Предложенные Бихамом зависимые от ключа S-блоки DES будут безопасны в течение по крайней мере н е- скольких лет, может быть за исключением использования против самых хорошо обеспеченных противников. Если необходимая безопасность должна быть обеспечена на десятилетия, или вы опасаетесь криптоаналитич е- ских усилий правительств великих держав, воспользуйтесь тройным DES с тремя независимыми ключами.

Небеполезны и другие алгоритмы. Мне нравится Blowfish, потому что он быстр, и потому что я его прид у- мал. Неплохо выглядит 3-WAY, возможно все в порядке и с ГОСТом. Проблема посоветовать что-нибудь с о- стоит в том, что NSA почти наверняка обладает набором эффективных криптоаналитических приемов, которые до сих пор засекречены, и я не знаю, какие алгоритмы могут быть вскрыты. В Табл. 14.3 для сравнения прив е- дены временные соотношения для некоторых алгоритмов.

Мой любимый алгоритм - IDEA. Его 128-битовый ключ в сочетании с устойчивостью к общеизвестным средствам криптоанализа - вот источники моего теплого и нежного чувства к этому алгоритму. Этот алгоритм анализировался различными группами, и никаких серьезных замечаний не было опубликовано. В отсутствие необычайных криптоаналитических прорывов я сегодня ставлю на IDEA.

Òàáë. 14-3.

Скорости шифрования для некоторых блочных шифров наi486SX/33 МГц

Алгоритм

Скорость шифрования

Алгоритм

Скорость шифрования

 

(Кбайт/с)

 

(Кбайт/с)

Blowfish (12 этапов)

182

MDC (ñ MD4)

186

Blowfish (16 этапов)

135

Blowfish (20 этапов)

110

DES

35

FEAL-8

300

FEAL-16

161

FEAL-32

91

ÃÎÑÒ

53

IDEA

70

Khufu (16 этапов)

221

Khufu (24 этапов)

153

Khufu (32 этапов)

115

Luby-Rackoff (ñ MD4)

47

Luby-Rackoff (ñ MD5)

34

Luby-Rackoff (ñ SHA)

11

Lucifer

52

MDC (ñ MD5)

135

MDC (ñ SHA)

23

NewDES

233

REDOC II

1

REDOC III

78

RC5-32/8

127

RC5-32/12

86

RC5-32/16

65

RC5-32/20

52

SAFER (6 этапов)

81

SAFER (8 этапов)

61

SAFER (10 этапов)

49

SAFER (12 этапов)

41

3-Way

25

Тройной DES

12

2n-3m
2n-2m

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

Существует множество способов объединять блочные алгоритмы для получения новых алгоритмов. Стимулом создавать подобные схемы является желание повысить безопасность, не пробираясь через тернии создания нового алгоритма. DES является безопасным алгоритмом, он подвергался криптоанализу добрых 20 лет и, тем не менее, наилучшим способом вскрытия остается грубая сила . Однако ключ слишком короток. Разве не плохо было бы использовать DES в качестве компонента другого алгоритма с более длинным ключом ? Это позволило бы получить преимущества длинного ключа с гарантией двух десятилетий криптоанализа .

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

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

15.1 Двойное шифрование

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

C = EK2 (EK1 (P))

P = DK1 (DK2 (C))

Если блочный алгоритм образует группу (см. раздел 11.3), то всегда существует K3, для которого

C = EK2 (EK1 (P)) = EK3 (P)

Если алгоритм не образует группу, то при помощи исчерпывающего поиска взломать получающийся дважды зашифрованный блок шифротекста намного сложнее . Вместо 2n (где n - длина ключа в битах), потребуется 22n попыток. Если алгоритм использует 64-битовый ключ , для обнаружения ключей, которыми дважды зашифр о- ван шифротекст, потребуется 2128 попыток.

Но при вскрытии с известным открытым текстом это не так . Меркл и Хеллман [1075] придумали способ обменять память на время, который позволяет вскрыть такую схему двойного шифрования за 2n+1 шифрований, а не за 22n. (Они использовали эту схему против DES, но результаты можно обобщить на все блочные алгоритмы.) Это вскрытие называется "встреча посередине", с одной стороны выполняется шифрование а с другой - дешифрирование, получившиеся посередине результаты сравниваются .

В этом вскрытии криптоаналитику известны P1, C1, P2 è C2, такие что

C1 = EK2 (EK1 (P1))

C2 = EK2 (EK1 ( P2 ))

Для каждого возможного K (или K1, èëè K2), криптоаналитик рассчитывает EK(P1) и сохраняет результат в памяти. Собрав все результаты, он для каждого K вычисляет DK(C1) и ищет в памяти такой же результат. Если такой результат обнаружен, то возможно, что текущий ключ - K2, а ключ для результата в памяти - K1. Затем криптоаналитик шифрует P1 с помощью K1 è K2. Если он получает C2, то он может гарантировать (с вероятностью успеха 1 к 2 , где m - размер блока), что он узнал и K1, è K2. Если это не так, он продолжает поиск. Максимальное количество попыток шифрования, которое ему , возможно, придется предпринять, равно 2*2n, èëè 2n+1. Если вероятность ошибки слишком велика, он может использовать третий блок шифротекста, обесп е- чивая вероятность успеха 1 к 2 . Существуют и другие способы оптимизации [912].

Для такого вскрытия нужен большой объем памяти: 2 n блоков. Для 56-битового ключа нужно хранить 256 64битовых блоков, или 1017 байтов. Такой объем памяти пока еще трудно себе представить, но этого хватает, чт о- бы убедить самых параноидальных криптографов в том, что двойным шифрованием пользоваться не стоит .

При 128-битовом ключе для хранения промежуточных результатов потребуется 10 39 байтов. Если предположить, что есть способ хранить бит информации, используя единственный атом алюминия , устройство памяти, нужное для выполнения такого вскрытия, будет представлять собой алюминиевый куб с ребром, длиной 1 км . Кроме того, вам понадобится куда-то его поставить ! Вскрытие "встреча посередине" кажется невозможным для ключей такого размера.

Другим способом двойного шифрования, который иногда называют Davies-Price, является вариантом CBC [435].

Ci = EK1 ( P1 EK2 (Ci−1))

Pi = DK1 (Ci ) EK2 (Ci−1))

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

15.2

Тройное шифрование с двумя ключами

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

C = EK1 (DK2 (EK1 (P)))

P = DK1 (EK2 (DK1 (C)))

Иногда такой режим называют шифрование-дешифрирование-шифрование(encrypt-decrypt-encrypt, EDE) [55]. Если блочный алгоритм использует n-битовый ключ, то длина ключа описанной схемы составляет 2n бит. Любопытный вариант схемы шифрование-дешифрирование-шифрование был разработан в IBM для совместимости с существующими реализациями алгоритма : задание двух одинаковых ключей эквивалентно одинарному шифрованию. этим ключом. Схема шифрование-дешифрирование-шифрование сама по себе не обладает ник а- кой безопасностью, но этот режим был использован для улучшения алгоритма DES в стандартах X9.17 и ISO 8732 [55, 761].

K1 è K2 чередуются для предотвращения описанного выше вскрытия "встреча посередине" . Если

C= EK1 (EK1 (EK1 (P))) , то криптоаналитик для любого возможного K1 может заранее вычислить EK1 (EK1 ( P))

èзатем выполнить вскрытие. Для этого потребуется только 2n+2 шифрований.

Тройное шифрование с двумя ключами устойчиво к такому вскрытию . Но Меркл и Хеллман разработали другой способ размена памяти на время, который позволяет взломать этот метод шифрования за 2n-1 действий, используя 2n блоков памяти [1075].

Для каждого возможного K2 расшифруйте 0 и сохраните результат. Затем расшифруйте 0 для каждого возможного K1, чтобы получить P. Выполните тройное шифрование P, чтобы получить C, и затем расшифруйте C ключом K1. Если полученное значение совпадает с значением (хранящемся в памяти), полученным при деши ф- рировании 0 ключом K2, òî ïàðà K1 K2 является возможным результатом поиска . Проверьте, так ли это. Если нет, продолжайте поиск.

Выполнение этого вскрытия с выбранным открытым текстом требует огромного объема памяти . Понадобится 2n времени и памяти, а также 2m выбранных открытых текстов. Вскрытие не очень практично, но все же чувствительность к нему является слабостью алгоритма .

Пауль ван Оорсчот (Paul van Oorschot) и Майкл Винер (Michael Wiener) преобразовали это вскрытие ко вскрытию с известным открытым текстом, для которого нужно p известных открытых текстов. В примере предполагается, что используется режим EDE.

(1)Предположить первое промежуточное значения a.

(2)Используя известный открытый текст, свести в таблицу для каждого возможного K1 второе промежуточ- ное значение b, при первом промежуточном значении, равном a:

b = DK1 (C)

где C - это шифротекст, полученный по известному открытому тексту .

(3)Для каждого возможного K2 найти в таблице элементы с совпадающим вторым промежуточным значение

b:

b = EK2 (a)

(4)Вероятность успеха равно p/m, где p - число известных открытых текстов, а m - размер блока. Если совпадения не обнаружены, выберите другое a и начните сначала.

Вскрытие требует 2n+m/p времени и p - памяти. Для DES это равно 2120/p [1558]. Для p, больших 256, это вскрытие быстрее, чем исчерпывающий поиск .

Тройное шифрование с тремя ключами

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

C = EK3 (DK2 (EK1 (P)))

P = DK1 (EK2 (DK3 (C)))

Для наилучшего вскрытия с разменом памяти на время, которым является "встреча посередине", потребуется 22n действий и 2n блоков памяти [1075]. Тройное шифрование с тремя независимыми ключами безопасно н а- столько, насколько на первый взгляд кажется безопасным двойное шифрование .

Тройное шифрование с минимальным ключом (TEMK)

Существует безопасный способ использовать тройное шифрование с двумя ключами, противостоящий описанному вскрытию и называемый Тройным шифрованием с минимальным ключом (Triple Encryption with Minimum Key, TEMK) [858]. Фокус в тои, чтобы получить три ключа из: X1 è X2.

K1 = EX1

(DX 2

(EX1

(T1 )))

K2

= EX1

(DX 2

(EX1

(T2 )))

K3

= EX1

(DX 2

(EX1

(T3 )))

T1, T2 è T3 представляют собой константы, которые необязательно хранить в секрете . Эта схема гарантирует, что для любой конкретной пары ключей наилучшим будет вскрытие с известным открытым текстом .

Режимы тройного шифрования

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

Внутренний CBC: Файл три раза шифруется в режиме CBC (см. 14tha). Для этого нужно три различных IV.

Ci = EK3 (Si Ci−1); Si = DK2 (Ti Si−1 );Ti = EK1 (Pi Ti−1 )

Pi = Ti−1 DK1 (Ti );Ti = Si−1 EK2 (Si ); Si = Ci−1 DK3 (Ci )

C0, S0 è T0 являются IV.

Внешний CBC: Файл троекратно шифруется в режиме CBC (см. 14thb). Для этого нужен один IV.

Ci = EK3 (DK2 (EK1 (Pi Ci−1 )))

Pi = Ci−1 DK1 (EK2 (DK3 (Ci )))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EK

 

 

 

EK

 

 

 

EK

 

 

 

E

K

 

E

K

 

E

K

 

1

 

 

1

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DK

2

 

DK

2

 

DK

2

 

D

 

D

 

D

 

 

 

 

 

 

 

 

 

 

 

 

K2

 

 

K2

 

 

K2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EK

3

 

EK

3

 

EK

3

 

E

K3

 

E

K3

 

E

K3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(а) Внутренний CBC

(b) Внешний CBC

 

Рис. 15-1. Тройное шифрование в режиме CBC.

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

Напротив во внешнем CBC обратная связь находится снаружи по отношению к трем шифрованиям . Это означает, что даже с тремя микросхемами производительность будет равна только одной трети производительн о- сти при однократном шифровании. Чтобы получить ту же производительность для внешнего CBC, потребуется чередование IV (см. раздел 9.12):

Ci = EK3 (DK2 (EK1 (Pi Ci−3 )))

В этом случае C0, C-1 è C-2 являются IV. Это не поможет при программной реализации, разве только при и с- пользовании параллельного компьютера.

К сожалению менее сложный режим является также и менее безопасным . Бихам проанализировал различ- ные режимы по отношению к дифференциальному криптоанализу и обнаружил, что безопасность внутреннего CBC по сравнению с однократным шифрованием увеличивается незначительно . Если рассматривать тройное шифрование как единый большой алгоритм , то внутренние обратные связи позволяют вводить внешнюю и и з- вестную информацию внутрь алгоритма, что облегчает криптоанализ . Для дифференциальных вскрытий нужно огромное количество выбранных шифротекстов, что делает эти вскрытия не слишком практичными, но этих результатов должно хватить, чтобы насторожить параноидальных пользователей . Анализ устойчивости алгоритмов к вскрытиям грубой силой и "встречей посередине" показал, что оба варианта одинаково безопасны [806].

Кроме этих существуют и другие режимы . Можно зашифровать файл один раз в режиме ECB, затем дважды в CBC, или один раз в CBC, один в ECB и еще раз в CBC, или дважды в CBC и один раз в ECB. Бихам показал, что эти варианты не безопаснее, чем однократный DES, против вскрытия дифференциальным криптоанализом с выбранным открытым текстом [162]. Он не оставил больших надежд и для других вариантов . Если вы собираетесь применять тройное шифрование, используйте внешнюю обратную связь .

Варианты тройного шифрования

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

строкой случайных битов (см. Рис. 15.2). Если PP - это функция дополнения, то:

C = EK3 (PP(EK2 ( PP(EK1 (P)))))

Это дополнение не только разрушает шаблоны, но также обеспечивает перекрытие блоков шифрования, как кирпичей в стене. К длине сообщения добавляется только один блок .

Открытый текст

....

Шифрование

Çàïî

....

åëü

ëíèò

 

Шифрование

Çàïî

 

 

....

åëü

ëíèò

 

 

 

 

 

Шифрование

Шифротекст ....

Рис. 15-2. Тройное шифрование с заполнением.

Другой метод, предложенный Карлом Эллисоном ( Carl Ellison), использует некоторую функцию независимой от ключа перестановки между тремя шифрованиями . Перестановка должна работать с большими блоками - 8 Кбайт или около этого, что делает эффективный размер бока для этого варианта равным 8 Кбайтам . При условии, что перестановка выполняется быстро, этот вариант ненамного медленнее, чем базовое тройное шифр о- вание.

C = EK3 (T(EK2 (T(EK1 ( P)))))

T собирает входные блоки (до 8 Кбайт в длину) и использует генератор псевдослучайных чисел для их пер е- мешивания. Изменение одного бита входа приводит к изменению 8 байтов результата первого шифрования, к изменению до 64 байтов результата второго шифрования и к изменению до 512 байтов результата третьего шифрования. Если каждый блочный алгоритм работает в режиме CBC, как было первоначально предложено, то изменение единичного бита входа скорее всего приведет к изменению всего 8-килобайтового блока, даже если этот блок не является первым.

Самый последний вариант этой схемы отвечает на вскрытие внутреннего CBC, выполненное Бихамом, добавлением процедуры отбеливания, чтобы замаскировать структуру открытых текстов . Эта процедура представляет собой потоковую операцию XOR с криптографически безопасным генератором псевдослучайных чисел и ниже обозначена как R. T мешает криптоаналитику определить a priori, какой ключ используется для шифрования любого заданного байта входа последнего шифрования . Второе шифрование обозначено nE (шифрование с циклическим использованием n различных ключей):

C = EK3 (R(T(nEK2 (T(EK1 (P))))))

Все шифрования выполняются в режиме ECB, используется не меньше n+2 ключей шифрования и криптографически безопасный генератор псевдослучайных чисел .

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

15.3 Удвоение длины блока

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