id: Гость   вход   регистрация
текущее время 18:41 28/03/2024
Владелец: SATtva (создано 14/09/2006 22:50), редакция от 17/12/2007 19:55 (автор: SATtva) Печать
Категории: криптография, софт, pgp, алгоритмы, симметричное шифрование, сайт проекта, статьи
создать
просмотр
редакции
ссылки

Симметричные блочные шифры

Bass-o-Matic


Этот блочный шифр приведен первым как первый, который был представлен в PGP. Он больше не является частью программы. Он ненадежен. Фил Циммерман сам разработал этот шифр, а спустя два месяца после выхода PGP 1.0 он и Бихам выявили слабости Bass-o-Matic. Найти этот шифр в литературе непросто: библия блочных шифров, "Прикладная криптография" [18], не содержит даже упоминания о нем. К счастью, исходные коды PGP 1.0 все еще доступны в качестве описания этого алгоритма. Его название произошло от постановки в воскресном телешоу с рыбой, приготовленной в блендере.

IDEA


IDEA появился на свет в 1991 году под названием IPES (Improved Proposed Encryption Standard). В 1992 году название изменилось на International Data Encryption Algorithm. Его авторы – Суэджа Лай и Джеймс Мэсси. Это 64-битовый блочный шифр со 128-битовым ключом. Его дизайн основан на смешении побитового исключающего ИЛИ (⊕), сложения по модулю 216 и умножения по модулю 216+1 (известное простое число 65537). Он быстр в программной реализации (процессоры персональных компьютеров могут умножать одной инструкцией), но менее эффективен в аппаратной реализации (маленькие процессоры смарт-карт не имеют таких инструкций). IDEA запатентован, патент принадлежит швейцарской Ascom-Tech AG.


Практических атак, направленных на полный алгоритм IDEA, неизвестно. Если вы планируете взломать PGP, можете забыть об атаке на его блочные шифры. Это не его слабое место.

Кровавые подробности

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


Ключ расширяется, чтобы получить множество 16-битовых подключей. Для каждого из 8 раундов используется шесть подключей S1, S2, S3, S4, S5 и S6, а для заключительного выходного преобразования – четыре других подключа S1, S2, S3, S4. Затем, на каждом из восьми раундов выполняются следующие шаги:


  1. 64-битовый вход данного раунда делится на четыре 16-битовых подблока: X1, X2, X3 и X4.
  2. A = X1S1. Это умножение по модулю 65537. 0 умножается как -1.
  3. B = X2 + S2. Это сложение по модулю 216.
  4. C = X3 + S3
  5. D = X4S4
  6. E = A ⊕ C
  7. F = B ⊕ D
  8. G = E ∗ S5
  9. H = F + G
  10. I = H ∗ S6
  11. J = G + I
  12. K = A ⊕ I
  13. L = C ⊕ I
  14. M = B ⊕ J
  15. N = D ⊕ J

Выход каждого раунда – это (K L M N). После каждого раунда, за исключением последнего, два внутренних подблока меняются местами, и следующий раунд начинается с (X1 X2 X3 X4) i+1 = (K M L N)i.


После восьмого раунда происходит заключительное преобразование (с новыми подключами S1, S2, S3 и S4):


  • W = X1S1
  • X = X2 + S2
  • Y = X3 + S3
  • Z = X4S4

Сами подключи зависят от того, зашифровываете вы или расшифровываете. Если вы зашифровываете, то для первых 8 подключей просто берете биты ключа K, разделенного на 16-битовые группы, затем циклически сдвигаете ключ на 25 бит влево, снова берете 8 подключей, сдвигаете еще на 25 бит, ... пока не получите все подключи. Процесс суммирован в таблице 1, где K0-16 означает, что берутся биты ключа от 0 до 16.


Если вы расшифровываете, то подключи представляют собой инвертированные подключи зашифрования с обратными значениями операций. Суть в том, что вы выполняете те же операции, что и при зашифровании, но наоборот. Пусть E(1,2), или, сокращенно, E12, будет вторым подключом зашифрования из раунда 1, -X – инверсией прибавления X, а X' – инверсией умножения X. Тогда подключи расшифрования можно получить из таблицы 2.


IDEA похож на другие блочные шифры во всем, кроме одного: он не содержит S-блоков. S-блок – это таблица подстановочных значений, действующая как очень случайная функция: она не должна быть линейной или иным образом систематизированной. Дело в том, что XOR и сложение рассеивают информацию, тогда как S-блоки действительно перемешивают ее. Часто именно S-блоки определяют устойчивость шифра против криптоаналитических атак. IDEA использует умножение по модулю 65537 в качестве своего "S-блока". Это крайне хаотичная функция, за счет чего получается очень большой S-блок, который не нужно хранить.


Таблица 1. Подключи зашифрования IDEA

Раунд 1K0-16 K16-32 K32-48 K48-64 K64-80 K80-96
Раунд 2K96-112 K112-128 K25-41 K41-57 K57-73 K73-89
Раунд 3K89-105 K105-121 K121-128, K0-9 K9-25 K50-66 K66-82
Раунд 4 K82-98 K98-114 K114-128, K0-2 K2-18 K18-34 K34-50
Раунд 5K75-91 K91-107 K107-123 K123-128, K0-11 K11-27 K27-43
Раунд 6K43-59 K59-75 K100-116 K116-128, K0-4 K4-20 K20-36
Раунд 7K36-52 K52-68 K68-84 K84-100 K125-128, K0-13 K13-29
Раунд 8K29-45 K45-61 K61-77 K77-93 K93-109 K109-125
Закл. преобр.K22-38 K38-54 K54-70 K70-86

Таблица 2. Подключи расшифрования IDEA

Раунд 1E91'-E92-E93E94'E85E86
Раунд 2E81'-E83-E82E84'E75E76
Раунд 3E71'-E73-E72E74'E65E66
Раунд 4E61'-E63-E62E64'E55E56
Раунд 5E51'-E53-E52E54'E45E46
Раунд 6E41'-E43-E42E44'E35E36
Раунд 7E31'-E33-E32E34'E25E26
Раунд 8E21'-E23-E22E24'E15E16
Закл. преобр.E11'-E12-E13E14'

CAST


Карлайсл Адамс и Стаффорд Таварес создали блочный шифр CAST. Они утверждали что его название описывает процесс разработки, 1 но более вероятно, что они намеренно подобрали название по собственным инициалам. Точный вариант CAST, реализованный в PGP, – CAST5-128, специфицированный в RFC 2144 [1]. Это 16-раундовый шифр Файстеля со 128-битовым ключом, оперирующий на 64-битовых блоках.


Исходное описание CAST не оговаривало порядок выбора S-блоков. RFC же содержит их описание. Документ определяет CAST-128 – 128-битовый вариант алгоритма, который также может работать с ключом меньшего размера. Чтобы отличить все эти варианты, CAST-128 еще именуют CAST5, а длину ключа дописывают после названия. PGP использует наибольшую длину ключей: 128 бит. Отсюда, CAST5-128.

3DES


DES означает Data Encryption Standard, Стандарт шифрования данных. Этот алгоритм был создан в 1977 году американским правительством (NIST и АНБ) на основе разработки IBM. DES – это 64-битовый блочный шифр с 64-битовым ключом. К несчастью, последний бит каждого байта в ключе является битом четности, так что эффективная длина ключа составляет только 56 бит. Это слишком мало, атака грубой силой на специализированной машине займет менее суток. Тройной DES (Triple DES) или 3DES – это DES, выполняемый трижды с разными ключами. Таким образом, тройной DES – это 64-битовый блочный шифр со 168-битовым ключом (плюс 24 бита четности). Оригинальный DES исследовался многие годы, вследствие этого эксперты считают 3DES очень надежным. Недостатком является то, что он значительно медленнее всех остальных алгоритмов: DES сам по себе довольно медлителен из-за применения битовых перестановок, эффективно производимых на специальных микросхемах, но гораздо хуже на универсальных компьютерах, а с 3DES вам нужно выполнить три операции, чтобы получить защищенность двух. Единственная причина, по которой стоит применять тройной DES – это то, что он хорошо изучен. Это шифр для консерваторов.


3DES – наиболее интересный блочный шифр PGP. Многократное зашифрование делает шифр сильнее, но не обходится без проблем. Атака на двойное шифрование описана ниже. Кроме того, DES сам по себе не так хорош, как другие шифры. Существуют атаки на 16-раундное шифрование DES, что, в теории, делает 3DES самым сомнительным шифром PGP.

Дифференциальный криптоанализ

С помощью дифференциального криптоанализа и атаки на основе подобранного открытого текста можно найти ключ DES, используя 247 открытых текстов. Атака на основе подобранного открытого текста заключается в том, что оппонент может предоставить любой по своему выбору открытый текст на шифрование и получить шифртекст. Это исключительно теоретическая атака, поскольку нереально собрать столько открытых текстов. Особым образом сконструированные S-блоки DES надежно противостоят дифференциальному криптоанализу, из чего можно сделать вывод, что АНБ знало об этой технике криптоанализа еще в 1977 году. Остальной мир услышал о ней от Эли Бихама и Ади Шамира лишь в 1990-м.

Линейный криптоанализ

Линейный криптоанализ еще более эффективен против DES. Это схожая техника, однако другая, открытая Мицуру Мациу в 1993 году, с помощью которой можно провести против DES атаку на основе 243 известных открытых текстов. При атаке на основе известного открытого текста взломщик имеет доступ к некоторому количеству открытых текстов и соответствующих шифртекстов, но не может выбирать открытый текст для шифрования. Эта атака уже ближе к практике, хотя 243 – все же слишком много. Атаку нельзя применить к случаю тройного DES, так что она не имеет практической ценности против PGP, однако демонстрирует, что блочный шифр не обязан храниться в секрете, даже если создан лучшими криптографами времени. 2


S-блоки DES не выбирались с учетом повышенной устойчивости к линейному криптоанализу, так что можно допустить, что АНБ не знало этой техники в 1977 году.


Обе эти методики описаны в [18], страницы 285-293.

Атаки на многократное шифрование

Эффективная стойкость 3DES – 112 бит, не 168. Логично предположить, что достичь такой стойкости можно было бы за два шифрования. Но это не так из-за атаки "встреча посередине" ( [18], стр. 358). Для атаки грубой силой на DES по известному открытому тексту нужно провести 256 шифрований. Если используется двойное шифрование, для атаки потребуется только 257 пробных шифрований и еще память под 256 блоков.


Для атаки с известным открытым текстом атакующий располагает шифртекстом C1 и открытым текстом P1, так что
C1 = Ek2 ( Ek1 ( P1 ))
(3.1)

Для всех возможных ключей k, он шифрует и сохраняет результат Ek (P1). Сделав это, он пытается вычислить для всех ключей выражение Dl (C1) и ищет результат вычислений в памяти: если он находит соответствие Ek (P1) = Dl (C1), то kl – вероятно, его искомый ключ. Мы допускаем, что у взломщика есть в наличии несколько известных открытых текстов, на которых он может проверить, правильный ли найден ключ, и попробовать другие l, если неправильный.


Хотя дополнительные требования к памяти под 256 блоков не тривиальны, все же ясно, что двойное шифрование не сильно увеличивает безопасность. Для тройного шифрования есть похожая атака со встречей посередине, трубущая 22n вычислений и память под 2n блоков. Ранние реализации тройного шифрования должны были быть обратно совместимы с одиночным зашифрованием, поэтому в них использовался метод зашифрования-расшифрования-зашифрования (EDE): C = Ek3 ( Dk2 ( Ek1 ( P ))). Это не влияло на стойкость, но если вы выбирали k1 = k2 = k3, это было равносильно однократному зашифрованию.


Чтобы еще более все усложнить, есть также схема тройного шифрования, требующая только два ключа: C = Ek1 ( Dk2 ( Ek1 ( P ))). Это весьма неплохой подход, если вы ограничены в объеме памяти для размещения ключа, но она не столь устойчива, как тройное шифрование. Смотрите [18], стр. 359.


PGP использует 3DES со 168-битовым ключом (действительная длина) в режиме EDE, что дает эффективную стойкость 112 бит.

Rijndael/AES


В 2000 году блочный шифр Rijndael был выбран на звание нового Улучшенного стандарта шифрования (Advanced Encryption Standard), заменив тем самым стандарт DES. PGP 6.5.8 не имеет поддержки AES, но в версиях от 7.0 и выше она есть. AES это очень новый шифр, и атаки на него неизвестны.


Rijndael разработан Джоан Даймен и Винсентом Рижменом. У него необычный дизайн: он использует операции над полиномами, и расшифрование проходит не так быстро, как зашифрование. Размер блока составляет 128 бит (вдвое больше, чем у других шифров), а длина ключа – 128, 192 или 256 бит. Для дополнительной информации смотрите http://csrc.nist.gov/encryption/aes/rijndael/

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


Блочные шифры можно применять несколькими способами, называемыми режимами шифрования. Самый недальновидный способ, называемый режимом простой замены (Electronic Codebook Mode, ECB), состоит в том, чтобы разбить входные данные на блоки и по отдельности зашифровать каждый блок. У этого режима есть недостатки: если на вход подаются повторяющиеся структуры (множество одинаковых символов, например), они будут видны и на выходе. Другая проблема заключается в том, что одинаковый открытый текст будет всякий раз давать одинаковый шифртекст. И последнее, но не менее важное: взломщик может предсказуемо изменять данные, переставляя или повторяя зашифрованные блоки.


Для преодоления этих проблем существуют еще три режима: 3 CBC, CFB и OFB. PGP использует режим CFB, поэтому он будет описан подробней. CFB означает Cipher Feedback Mode (гаммирование с обратной связью). Режим CFB, реализованный в PGP, был разработан PRZ и имеет некоторые отличия от классического варианта. Более подробно они описаны в [3].

CFB


CFB-алгоритм использует некоторый объем памяти, называемый регистром сдвига, размер которого равен размеру блока используемого шифра (т.е. блока данных; обычно это 8 байт). Чтобы зашифровать блок, он просто объединяется операцией XOR с содержимым регистра. Если шифруемый блок не полный, но короче, чем длина регистра сдвига, вы берете первые байты регистра. После использования (части) регистра, он сдвигается и заполняется последним зашифрованным блоком. Если была использована только часть регистра, а вход еще не завершен, этот процесс называется синхронизацией. Пусть Ci будет i-ным блоком шифртекста, R – регистром, а Pii-ным блоком открытого текста, тогда
Ci = Pi ⊕ R ;
R = E ( Ci-1 )
(3.2)

Чтобы начать шифрование, алгоритм шифрует один состоящий из нулей блок, и шифртекст заполняет регистр. Затем вектор инициализации (ВИ), представляющий собой один блок случайных байтов, шифруется в режиме CFB: результат отбрасывается, но задает начальное состояние регистра. Первые два байта ВИ шифруются вновь, что запускает синхронизацию. Теперь можно зашифровывать данные.


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

Проблемы CFB


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


Более теоретический недостаток CFB в том, что он уязвим для атаки с подобранным шифртекстом, описанной в [11]. В этой атаке взломщик может получить расшифрование любого блока данных, кроме того который он атакует. Это довольно сильное допущение, но при некоторых обстоятельствах оно осуществимо. Оппонент может послать оригинальное сообщение со случайными байтами вместо последнего блока, а из расшифровки этого сообщения сможет определить, с каким блоком нужно выполнить XOR. Эта атака не представляет серьезной угрозы для PGP, но может быть интересна в других применениях CFB. 5

CBC


Другой распространенный режим – это CBC, или Cipher Block Chaining (сцепление блоков шифртекста). PGP не использует этот режим непосредственно для шифрования, но он применяется внутри генератора случайных чисел (смотрите параграф "Случайные числа"). В этом режиме также есть регистр R, всегда содержащий последний выход. Блок открытого текста объединяется операцией XOR с R и затем шифруется.
Ci = E ( Pi ⊕ R ) ;
R = Ci-1
(3.3)

Этот режим не позволяет использовать неполные блоки в конце сообщения. Любые изменение, внесенные в шифртекст, повреждают весь данный блок.


Назад | Дальше



1 От англ. "cast" – "догадка", – прим. пер.


2 Возможно, а некоторые скажут, что и весьма вероятно, что разработчики намеренно старались сделать DES настолько слабым, какой он и есть.


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


4 Этой особенностью режима CFB в PGP воспользовались в феврале 2005 года исследователи Мистер и Цуккерато, чтобы с помощью тайминг-атаки или дешифрующего оракула раскрыть часть зашифрованного текста. После публикации их работы стандарт OpenPGP был изменен с тем, чтобы отбрасывать синхронизирующие байты ВИ, а не помещать их в тэг "быстрой проверки" (Quick Check), – прим. пер.


5 Такая атака с участием дешифрующего оракула была проведена в 2002 году Шнайером, Джелладом и Катцем. Вставив произвольные данные между блоками шифртекста, каким-то образом убедив пользователя расшифровать такое сообщение, а потом получив в распоряжение "мусор", произведенный при расшифровании, взломщик может дешифровать это единичное послание. Мера безопасности, реализованная с тех пор в OpenPGP (MDC), обнаруживает подобные манипуляции с шифртекстом, – прим. пер.


 
Комментариев нет [показать комментарии/форму]
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3