Здесь T1, T2 и Т3 - константы, которые необязательно хранить в секрете. Эта схема гарантирует, что для любой конкретной пары ключей наилучшим методом взлома будет вскрытие с известным открытым текстом.
4.2.4. Режимы тройного шифрования
Недостаточно просто определить тройное шифрование, его можно выполнить несколькими методами. Решение зависит от требуемых безопасности и эффективности.
Вот два возможных режима тройного шифрования:
Внутренний СВС: Файл зашифровывается в режиме СВС три раза (Рис. 1а). Для этого нужны три различных вектора инициализации (ВИ).
Ci=EK3(SiÅ Ci-1); Si=DK2(TÅ Si-1); Ti=EK1(PiÅ Ti-1)
Pi=Ti-1Å DK1(Ti); Ti=Si-1Å EK2(Si); Si=Ci-1Å DK3(Ci)
Где С0, S0 и T0 - векторы инициализации.
Внешний СВС: Файл шифруется с помощью тройного шифрования (один раз) в режиме СВС (Рис. 5). Для этого нужен один вектор ВИ.
Ci=EK3(DK2(EK1(PiÅ Ci-1)))
Pi=Ci-1Å DK1(EK2(DK3(Ci)))
Рис. 5. Тройное шифрование в режиме СВС
Оба режима требуют больше ресурсов, чем однократное шифрование: больше аппаратуры или больше времени. Однако при установке трех шифровальных микросхем производительность внутреннего СВС не меньше, чем при однократном шифровании. Так как три шифрования СВС независимы, три микросхемы могут быть загружены постоянно, подавая свой выход себе на вход.
Напротив, во внешнем СВС обратная связь лежит вне трех процессов шифрования. Это означает, что даже при использовании трех микросхем производительность составит только треть производительности однократного шифрования. Чтобы получить ту же производительность для внешнего СВС, потребуется чередование векторов ВИ.
Сi = EK3(DK2(EK1(PiÅ Ci-3)))
где С0, C-1 и С-2 - векторы инициализации. Это не поможет при программной реализации, разве только при использовании параллельного компьютера.
К сожалению, менее сложный режим также и менее безопасен. Бихам проанализировал устойчивость различных режимов к дифференциальному криптоанализу с подобранными шифртекстами и обнаружил, что внутренний СВС только незначительно надежнее однократного шифрования. Если рассматривать тройное шифрование как большой единый алгоритм, его внутренние обратные связи позволяют вводить внешнюю и известную информацию во внутреннюю структуру алгоритма, что облегчает криптоанализ. Для дифференциальных атак нужно огромное количество подобранных шифртекстов, что делает эти вскрытия не слишком практичными, но этих результатов должно хватить, чтобы насторожить скептически настроенных пользователей. Анализ устойчивости алгоритмов к вскрытиям «в лоб» и «встречей посередине» показал, что и этом отношении оба варианта одинаково надежны.
Кроме перечисленных, известны и другие режимы. Можно зашифровать файл один раз и режиме ЕСВ, затем дважды в СВС, или один раз в СВС, один в ЕСВ и еще раз в СВС, или дважды в СВС и один раз в ЕСВ. Бихам показал, что эти варианты отнюдь не устойчивее однократного DES при вскрытии методом дифференциального криптоанализа с подобранным открытым текстом. Он не оставил больших надежд и для других вариантов. Если вы собираетесь применять тройное шифрование, используйте режимы с внешней обратной связью.
4.2.5. Варианты тройного шифрования
Прежде чем было доказано, что DES не образует группу, предлагались различные схемы многократного шифрования. Одним из способов гарантировать, что тройное шифрование не выродится в однократное, было изменение эффективной длины блока. Простой метод предполагает дополнять блок битами. С этой целью между первым и вторым, а также между вторым и третьим шифрованиями текст дополняется строкой случайных битов длиной в полблока (Рис. 6). Если p - это функция дополнения, то:
С = ЕK3(р(ЕК2(р(ЕК1(Р)))))
Дополнение не только маскирует структуру текста, но и обеспечивает перекрытие блоков шифрования, примерно как кирпичи в стене. Длина сообщения увеличивается только на один блок.
Рис. 6. Тройное шифрование с дополнением
В другом методе, предложенном Карлом Эллисоном (Carl Ellison), между тремя шифрованиями используется некоторая бесключевая функция перестановки. Перестановка должна работать с большими блоками - 8 Кбайт или около этого, что делает эффективный размер блока для этого варианта равным 8 Кбайт. Если перестановка выполняется быстро, этот вариант ненамного медленнее, чем базовое тройное шифрование.
C = EK1(T(EK2(T(EK1(P)))))
Т собирает входной (длиной до 8 Кбайт) и использует генератор псевдослучайных чисел для его перемешивания. Изменение одного входного бита приводит к изменению восьми байтов результата первого шифрования, до 64 байтов - результата второго шифрования и до 512 байтов - результата третьего шифрования. Если каждый блочный алгоритм работает в режиме СВС, как предполагалось первоначально, изменение единичного входного бита, скорее всего, приведет к изменению всего 8-килобайтового блока, даже если это не первый блок.
Новейший вариант этой схемы противодействует атаке на внутренний СВС, предложенной Бихамом, добавлением процедуры отбеливания, позволяющей замаскировать структуру открытых текстов. Эта процедура представляет собой потоковую операцию XOR с криптографически надежным генератором псевдослучайных чисел и обозначена ниже как R. Т мешает криптоаналитику определить априорно ключ, использованный для шифрования любого заданного входного байта последнего шифрования. Второе шифрование обозначено пЕ (шифрование с циклическим использованием п различных ключей):
С = ЕК3(R(Т(пЕК2(Т(ЕК1(R))))))
Все шифрования выполняются в режиме ЕСВ, используется не меньше п+2 ключей шифрования и криптографически стойкий генератор псевдослучайных чисел.
В этой схеме предлагалось использование алгоритма DES, однако она работает с любым блочным алгоритмом. Мне неизвестны факты анализа надежности этой схемы.
4.3. Удвоение длины блока
В академических кругах давно спорят на тему, достаточна ли 64-битовая длина блока. С одной стороны, 64-битовый блок обеспечивает рассеивание открытого текста только на 8 байтов шифртекста. С другой стороны, более длинный блок затрудняет надежную маскировку структуры, а, кроме того, увеличивает вероятность ошибок.
Выдвигались предложения удваивать длину блока алгоритма с помощью многократного шифрования. Прежде, чем реализовывать одно из них, можно оценить возможность вскрытия «встреча посередине». Схема Ричарда Аутбриджа (Richard Outerbridge), показанная на рис. 7, ничуть не безопаснее тройного шифрования с одинарным блоком и двумя ключами.
Рис. 7. Удвоение длины блока
Однако подобный прием не быстрее обычного тройного шифрования: для шифрования двух блоков данных все так же нужно шесть шифрований. Характеристики обычного тройного шифрования известны, а за новыми конструкциями часто скрываются новые проблемы.
4.4. Другие схемы многократного шифрования
Недостаток тройного шифрования с двумя ключами заключается в том, что при увеличении вдвое пространства ключей нужно выполнять три шифрования каждого блока открытого текста. Поэтому существуют хитрые способы объединения двух шифрований, которые удвоили бы пространство ключей.
4.4.1 Двойной режим OFB/счетчика
Этот метод использует блочный алгоритм для генерации двух гамм, которые используются для шифрования открытого текста.
Si = EK1(Si-1Å I1); I1 = I1+1
Ti = EK2(Ti-1Å I2); I2 = I2+1
Ci = PiÅ SiÅ T
где Si и Ti - внутренние переменные, а I1, и I2 - счетчики. Две копии блочного алгоритма работают в некотором гибридном режиме OFB/счетчика, а открытый текст, Si, и Тi объединяются операцией XOR. При этом ключи К1 и К2 независимы.
4.4.2. Режим ECB + OFB
Этот метод разработан для шифрования нескольких сообщений фиксированной длины, например, блоков диска. Используются два ключа: К1 и К2. Сначала для генерации маски блока нужной длины используется выбранный алгоритм и ключ К1. Эта маска впоследствии используется повторно для шифрования сообщений теми же ключами. Затем выполняется операция XOR над открытым текстом сообщения и маской. Наконец результат этой операции шифруется с помощью выбранного алгоритма и ключа К2 в режиме ЕСВ.
Этот метод анализировался только в той работе, в которой он и был опубликован. Понятно, что он не слабее одинарного шифрования ЕСВ, и, возможно, столь же устойчив, как и двойное применение алгоритма. Вероятно, криптоаналитик может выполнять независимый поиск двух ключей, если получит несколько файлов открытого текста, зашифрованных одним ключом.
Чтобы затруднить анализ идентичных блоков в одних и тех же местах различных сообщений, можно использовать вектор инициализации (ВИ). В отличие от использования векторов ВИ в других режимах, в данном случае перед шифрованием ЕСВ выполняется операция XOR над каждым блоком сообщения и вектором ВИ.