Для наиболее полного удовлетворения всем требованиям, предъявляемым к коммерческим системам шифрования, реализованы несколько режимов работы алгоритма DES. Наиболее широкое распространение получили режимы:
- электронный шифроблокнот (Electronic Codebook) - ECB;
- цепочка цифровых блоков (Cipher Block Chaining) - CBC;
- цифровая обратная связь (Cipher Feedback) - CFB;
- внешняя обратная связь (Output Feedback) - OFB.
Кстати, если вы написали программу защиты данных и хотите дать полноценную рекламу, то автор рекомендует прямо указывать, какие из режимов поддерживает ваше детище. Это, вообще говоря, признак хорошего тона на рынке программного обеспечения средств защиты. Нет смысла раскрывать весь алгоритм, вы просто указываете: DES-CBC или DES-CFB и, как говорится, "умный догадается, а дураку и не надо".
Давайте рассмотрим перечисленные выше режимы
DES-ECB
В этом режиме исходный файл M разбивается на 64-битовые блоки (по 8 байтов): M = M(1)M(2)...M(n). Каждый из этих блоков кодируется независимо с использованием одного и того же ключа шифрования (рис.5). Основное достоинство этого алгоритма - простота реализации. Недостаток - относительно слабая устойчивость против квалифицированных криптоаналитиков.
Рис.5. Работа алгоритма DES в режиме ECB
В частности, не рекомендуется использовать данный режим работы для шифрования EXE файлов, потому что первый же блок - заголовок файла, является вполне удачным началом для взлома всего шифра.
В то же время следует признать, что этот режим в силу своей простой реализации наиболее популярен среди любительских разработок.
DES-CBC
В этом режиме исходный файл M также, как и в режиме ECB, разбивается на 64-битовые блоки: M = M(1)M(2)...M(n). Первый блок M(1) складывается по модулю 2 с 64-битовым начальным вектором IV, который меняется ежедневно и держится в секрете. Полученная сумма затем шифруется с использованием ключа DES, известного и отправителю, и получателю информации. Полученный 64-битовый блок шифртекста C(1) складывается по модулю 2 со вторым блоком исходного текста, результат шифруется и получается второй 64-битовый блок шифртекста C(2) и т.д. Процедура повторяется до тех пор, пока не будут обработаны все блоки исходного текста (рис.6).
Рис.6. Работа алгоритма в режиме CBC
Таким образом для всех i = 1...n блок шифртекста C(i) определяется следующим образом:
C(i) = DES(M(i) xor C(i-1)), C(0) = IV - начальное значение шифра, равное начальному вектору. |
Расшифрование выполняется следующим образом:
M(i) = C(i-1) xor DES-1(C(i)), C(0) = IV - начальное значение шифра, равное начальному вектору. |
Прелесть данного режима состоит в том, что он не позволяет накапливаться ошибкам при передаче. Блок M(i) является функцией только C(i-1) и C(i). Поэтому ошибка при передаче приведет к потере только двух блоков исходного текста.
DES-CFB
В этом режиме размер блока может отличаться от 64. Исходный файл M считывается последовательными t-битовыми блоками (t <= 64): M = M(1)M(2)...M(n) (остаток дописывается нулями или пробелами).
64-битовый сдвиговый регистр (входной блок) вначале содержит вектор инициализации IV, выравненный по правому краю. Для каждого сеанса шифрования используется новый IV.
Для всех i = 1...n блок шифртекста C(i) определяется следующим образом:
C(i) = M(i) xor P(i-1),
где P(i-1) - старшие t битов операции DES(С(i-1)), причем C(0)=IV.
Обновление сдвигового регистра осуществляется путем удаления его старших t битов и дописывания справа C(i).
Восстановление зашифрованных данных также не представляет труда: P(i-1) и C(i) вычисляются аналогичным образом и
M(i) = C(i) xor P(i-1).
Блок-схема режима CFB приведена на рис.7.
Рис.7. Работа алгоритма DES в режиме CFB
DES-OFB
Режим OFB очень похож на режим CFB.
Отличие от режима CFB состоит только в методе обновления сдвигового регистра. В данном случае это осуществляется путем удаления его старших t битов и дописывания справа P(i-1) (рис.8).
Рис.8. Блок-схема алгоритма DES в режиме OFB
Каждому из рассмотренных режимов свойственны свои достоинства и недостатки, что обусловливает области их применения.
Режим ECB хорошо подходит для шифрования ключей. Режимы CBC и CFB пригодны для аутентификации данных. Режим CFB, кроме того, предназначен для шифрования отдельных символов. Режим OFB нередко используется в спутниковых системах связи.