Режим счетчика
Все режимы, кроме электронного шифроблокнота, обладают одним и тем же неприятным свойством: доступ к произвольной части зашифрованных данных невозможен. Допустим, например, что файл передается по сети и затем сохраняется на диске в зашифрованном виде. Так иногда делают, если принимающий компьютер представляет собой ноутбук, который может быть украден. Хранить все важные данные в зашифрованном виде действительно полезно: риск утечки секретной информации в случае попадания аппаратуры в руки «нехорошим дядям» резко снижается.
Однако доступ к файлам на диске зачастую бывает необходимо осуществлять в произвольном порядке. Особенно это касается файлов баз данных. Если файл зашифрован в режиме сцепления блоков, придется вначале дешифровать все блоки, предшествующие нужному. Согласитесь, такой способ работы несколько неудобен. По этой причине был введен еще один режим шифрования — режим счетчика (counter mode). Он показан на рис. 8.13. Здесь открытый текст не шифруется напрямую. Вместо этого шифруется вектор инициализации плюс некоторая константа, а уже получающийся в результате шифр складывается по модулю 2 с открытым текстом. Сдвигаясь на единицу по вектору инициализации при шифровании каждого нового блока, можно легко получить способ дешифрации любого места файла. При этом нет необходимости расшифровывать все предшествующие блоки.
Рис. 8.13. Шифрование в режиме счетчика
Несмотря на то что режим счетчика весьма полезен, у него есть один существенный недостаток, который стоит упомянуть. Допустим, уже использовавшийся однажды ключ К будет использован повторно (с другим открытым текстом, но с тем же вектором инициализации), и взломщик захватит весь шифрованный текст, который был послан в обоих случаях. Ключевые потоки остаются неизменными, в итоге возникает риск взлома за счет повторного использования ключевого потока (тот же эффект, на который мы уже указывали, обсуждая режим группового шифра). Все, что криптоаналитику остается сделать, это сложить по модулю 2 два перехваченных сообщения. Тем самым он полностью снимет какую бы то ни было криптографическую защиту, и в его распоряжении окажется сумма по модулю 2 двух блоков открытого текста. Этот недостаток вовсе не означает, что режим счетчика в целом неудачен. Это говорит лишь о том, что как ключи, так и векторы инициализации должны выбираться независимо и случайным образом. Даже если один и тот же ключ случайно попадется дважды, от перехвата информацию может спасти отличающийся вектор инициализации.
8.2.4. Другие шифры
AES (Rijndael) и DES — это самые известные криптографические алгоритмы с симметричными ключами, и они являются стандартным выбором производителей хотя бы по соображениям ответственности. (Никто не станет вас винить, если вы использовали AES в своем продукте, и его взломали, но вас точно обвинят, если вы использовали нестандартный шифр, который затем был взломан). Тем не менее стоит отметить, что в природе существует еще много других шифров с симметричными ключами. Некоторые из них встраиваются в различные программно-аппаратные продукты. Наиболее распространенные из них перечислены в табл. 8.2. Возможно использование комбинаций данных шифров, например, AES и Twofish, так чтобы для получения данных было необходимо взломать оба шифра.
Таблица 8.2. Некоторые распространенные криптографические алгоритмы с симметричными ключами
Название
Автор
Длина ключа
Комментарии
DES
IBM
56 бит
Слишком слабый для современных систем
RC4
Рональд Ривест (Ronald Rivest)
1-2048 бит
Внимание: есть слабые ключи
RC5
Рональд Ривест (Ronald Rivest)
128-256 бит
Хороший, но запатентованный
AES (Rijndael)
Домен (Daemen) и Раймен (Rijmen)
128-256 бит
Лучший
Serpent
Андерсон (Anderson), Байхэм (Biham) и Кнадсен (Knudsen)
128-256 бит
Очень сильный
Тройной DES
IBM
168 бит
Хороший, но устаревает
Twofish
Брюс Шнайер (Bruce Schneier)
128-256 бит
Очень сильный; широко распространен
8.2.5. Криптоанализ
Прежде чем закончить разговор об использовании симметричных ключей в криптографии, необходимо хотя бы упомянуть о четырех направлениях развития криптоанализа. Первый подход называется дифференциальным криптоанализом (Biha и Shamir, 1997). Он может использоваться для взлома любых блочных шифров. Для начала анализируется пара блоков открытого текста, отличающихся лишь небольшим числом бит. При этом внимательно анализируется происходящее при каждой внутренней итерации во время шифровании. Во многих случаях можно заметить, что одни битовые последовательности встречаются чаще других, и это соображение используется для взлома, основанного на теории вероятностей.
Второй подход, который следует обозначить, называется линейным криптоанализом (Matsui, 1994). С его помощью можно взломать DES только с 243 известными открытыми текстовыми блоками. Принцип работы основан на суммировании по модулю 2 некоторых бит открытого текста и изучении результатов для шаблонных последовательностей. Если повторять эту процедуру много раз, половина бит будет иметь нулевые значения, половина — единичные. Тем не менее довольно часто это соотношение изменяется в ту или иную сторону. Это отклонение, каким бы малым оно ни было, может использоваться для снижения показателя трудозатрат криптоаналитика. Более подробную информацию можно найти в материалах автора этого метода Мацуи (Matsui).
Третье направление развития связано с анализом потребляемой электроэнергии для вычисления секретного ключа. Обычно в компьютерах напряжение 3 В соответствует логической единице, а 0 В — логическому нулю. Таким образом, обработка единицы требует большего потребления электроэнергии, чем обработка нуля. Если криптографический алгоритм состоит из цикла, в котором разряды ключа обрабатываются поочередно, взломщик, заменив главный системный и-гигагерцовый тактовый генератор медленным (например, с частотой 100 Гц) и повесив «крокодилы» на ножки питания и заземления центрального процессора, может с большой точностью отслеживать мощность, потребляемую каждой машинной инструкцией. По этим данным узнать секретный ключ оказывается на удивление просто. Этот метод криптоанализа можно победить лишь аккуратным кодированием алгоритма на язык ассемблера таким образом, чтобы энергопотребление не зависело ни от общего ключа, ни от ключей каждой итерации.
Четвертый подход основан на временном анализе. Криптографические алгоритмы содержат большое количество условных операторов (if), тестирующих биты итерационных ключей. Если части then и else выполняются за различное время, то, замедлив системный тактовый генератор и измерив длительность всех шагов, можно вычислить ключи итераций. По этим ключам обычно можно вычислить и общий ключ. Анализ энергопотребления и временной анализ могут применяться и одновременно, что позволяет упростить задачу криптоанализа. Несмотря на то что анализы энергозатрат и времени выполнения операций могут показаться несколько экзотическими, на самом деле они представляют собой мощные методы, способные взломать любой шифр, если только он не имеет специальной защиты.
8.3. Алгоритмы с открытым ключом
Исторически процесс передачи ключа всегда был слабым звеном почти во всех системах шифрования. Независимо от того, насколько прочна была сама криптосистема, если нарушитель мог украсть ключ, система становилась бесполезной. До 1976 года все криптологи исходили из предпосылки, что ключ дешифрации должен быть идентичен ключу шифрования (или один может легко получиться из другого). В то же время ключи должны были быть у всех пользователей системы. Таким образом, казалось, что эта проблема неустранима: ключи должны быть защищены от кражи и в то же время их нужно распространять среди пользователей, поэтому их нельзя хранить в банковском сейфе.