Основы ИТ-безопасности
1.4 Криптографические техники
Механизмы безопасности, будь они частью продаваемых продуктов или интернет-стандартов, используют набор общих криптографических техник. Очень важно иметь хорошее понимание этих техник, и вообще по курсу мы предполагаем, что читатель имеет некоторое базовое представление о них.
Несмотря на то что это сложная область, которая заключает в себе множество разнообразных и запутанных аспектов, в этом разделе мы попытались просуммировать эту информацию и предоставить краткий обзор существующих важных криптографических техник. Мы полагаем, что это полезный ресурс и рекомендуем читателю не пропускать его.
После определения понятия криптографии мы рассмотрим следующие области, связанные с криптографическими техниками:
- шифрование симметричным ключом (или массовое);
- шифрование общим (публичным) ключом;
- функции вычисления сумм (хешей) безопасности;
- цифровые подписи и другие комбинации вышеизложенных методов;
- механизмы сертификации.
Повторимся, что криптография – ее методы, способы применения, законы и математика, стоящая за всем этим, – это большой и сложный предмет, всестороннее обсуждение которого не является целью этого курса. Вместо этого мы полагаем, что читатель, желающий узнать больше по этой теме, обратиться к публикации "Часто задаваемые вопросы лаборатории RSA по сегодняшней криптографии, версия 4.1" (RSA Laboratories' Frequently Asked Questions About Today's Cryptography, Version 4.1), которую можно найти онлайн по адресу:
http://www.rsasecurity.com/rsalabs/faq/
1.4.1 Криптография
Прежде чем говорить о техниках, давайте для начала определимся, что же такое криптография.
Криптография, берем самое простое определение, – это искусство или наука сохранения информации в секрете. Хотя для новичков она кажется формой искусства, граничащей с магией, тем не менее в реальности это наука для действительно высококвалифицированных компьютерных специалистов и математиков. (Надо сказать, что для тех, кто желает глубоко погрузиться в то, как построены шифры и как они работают, серьезная ученая степень в математике была бы большим плюсом.)
Криптография обеспечивает конфиденциальность шифрованием информации, используя алгоритм и один или более ключей. Вы можете добиться базовой криптографии и без ключей, но то, что обычно требуется, – сохранение в секрете самого алгоритма – нечто достаточно трудное в наши дни. Если используются ключи, зашифрованная версия может быть расшифрована кем-то еще, у кого есть соответствующий шифровальный ключ. Если это тот же самый ключ, то он должен держаться в секрете между двумя сторонами. (В зависимости от метода шифрования, как будет объяснено позже, это может быть и другой ключ.) Самая центральная проблема большинства криптографических приложений – управление этими ключами и содержание их в секрете.
Алгоритмы, формирующие базу криптографии, – это шифры. Шифр – это:
- Криптографическая система, в которой элементы открытого текста4Открытый текст – обычный незашифрованный текст. заменяются согласно предопределенному ключу.
- Любая криптографическая система, в которой произвольные символы или группы символов представляют элементы открытого текста стандартной длины, обычно отдельные буквы; или в которой элементы открытого текста реорганизованы; или и то и другое в зависимости от неких предопределенных правил.
Выражаясь проще, шифры – это замена одного блока текста другим согласно некоторым общеприменимым правилам. Простой шифр произвольно заменял бы каждую букву другой.
Шифры определяются либо как симметричные, либо как асимметричные в зависимости от того, используют ли они один и тот же ключ для шифрования и дешифрования (симметричные шифры) или два разных ключа (асимметричное шифрование).
Люди по своему обыкновению склонны путать симметричное и асимметричное шифрование. Главная причина этого в том, что симметричное обычно ассоциируется с четными числами (т. е. два), а асимметричное, естественно, с нечетными (т. е. один).
Если применять такую логику (а так обычно и происходит), то люди получают неправильное представление5Опрос 10 человек (малознакомых с алгоритмами щифрования) не дал таких результатов. Симметричное шифрование ассоциировалось с одинаковыми ключами.. Мы дадим достаточно легкий способ запомнить, что есть что в последующих разделах.
1.4.2 Алгоритмы с симметричным ключом
Алгоритмы с симметричным ключом – это "взрослая" версия того типа секретного кода, которым большинство из нас время от времени играло в детстве. Обычно в них используется простой алгоритм замены символов; если вы хотите зашифровать текст, то просто заменяете каждую букву алфавита другой. Например:
Оригинал: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Замена: G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
В этом случае буквы в алфавите были просто сдвинуты на семь позиций влево6В этом примере ошибка – символы сдвинуты на шесть, а не на семь позиций; суть примера от этого не пострадала., таким образом, фраза "HELLO WORLD" транслировалась бы как "NKRRU CUXRJ". Предпосылкой, на которой основан этот код, является знание и отправителем и получателем исходного ключа, количества позиций для смещения букв в нашем случае.
Этот общий секрет позволяет получателю сообщения провести процесс шифрования в обратном направлении и прочитать зашифрованное сообщение.
Симметричное шифрование получило свое название из того факта, что один и тот же ключ используется как для шифрования открытого текста, так и для расшифровки соответствующего зашифрованного. Алгоритмы симметричного шифрования, используемые компьютерами, имеют те же самые составляющие, как и вышеприведенный пример, а именно механизм для шифровки/расшифровки сообщения (известный также как шифр) и общий секрет (ключ), который позволяет получателю расшифровать зашифрованное сообщение.
Определение надежности симметричного шифра
Надежность шифра с симметричным ключом подобного типа диктуется целым рядом факторов. Первый из них – эффективная рандомизация7Рандомизация – это процесс распределения результата случайным образом. выхода, чтобы два связанных сообщения с открытым текстом не давали после зашифровывания похожих результатов. Степень рандомизации на криптографическом языке обычно называется энтропией.
Наш детский пример в этом плане совершенно неудачен, поскольку каждая буква при шифровании всегда преобразуется в один и тот же результат, и еще потому, что он совершенно не шифрует пробелы. Даже детсадовский криптоаналитик способен достаточно легко расколоть этот код, зная, что любое однобуквенное слово, вероятнее всего, "A"8Действительно, в английском языке наиболее распространенным в тексте однобуквенным словом является неопределенный артикль "A". В русском языке таким словом, вероятнее всего, будет слово "И" или "В". Примеч. пер. См. также: Конан-Дойль А. Тайна пляшущих человечков. Примеч. науч. ред..
Еще одна причина, по которой наш пример столь неудачен, состоит в том, что, если по каким-либо причинам алгоритм известен (в нашем случае алгоритм: "сдвинуть каждую букву на семь позиций вправо"), человек, знающий его, легко может расшифровать каждое последующее сообщение.
Именно здесь мы подоши к важности концепции ключа. В алгоритмах, основанных на ключе, для его защиты предпринимаются определенные усилия. Такой подход вполне допускает рассмотрение и изучение криптографического алгоритма посторонними. Хороший алгоритм – это такой алгоритм, который можно понять, который эффективен и который нельзя использовать для шифрования без соответствующего ключа. Алгоритмы, о которых мы расскажем далее в этой лекции, все обладают этими чертами.
Таким образом, в полноценном симметричном шифре большая часть работы криптоаналитика заключается в попытках поиска в выходных данных алгоритма хоть каких-нибудь шаблонов, чтобы использовать их в качестве отправной точки для взлома кода.
Если в этом плане алгоритм шифрования не имеет недостатков, другим главным фактором, влияющим на его надежность, будет размер пространства ключа; т. е. общее количество всевозможных значений ключа. Опять же наш простенький пример будет расколот очень быстро, потому что в нем есть только 25 возможных позиций, на которые можно сместить ключи. Мы могли бы очень легко провести атаку грубой силой9Атака грубой силой (brute force attack) – атака методом перебора подряд всевозможных комбинаций значений., просто перебирая по очереди каждый ключ до тех пор, пока не получили бы такое сообщение, которое имело бы смысл.
Реально существующие симметричные шифры используют числовые ключи размером, как правило, от 40 до 256 бит. Даже для самых маленьких из них атака грубой силой должна была бы перебрать в среднем 2 в 39-й степени, или что-то около 550,000,000,000 возможных значений ключей. Каждый дополнительный бит в размере ключа удваивает пространство ключа.
Различия симметричного и асимметричного шифров
Некоторые люди испытывают затруднения при запоминании, какой тип шифрования симметричный, а какой асимметричный. Чтобы помочь, давайте дадим инструмент для запоминания. Уделите внимание рис. 1-3.
В этом нашем мнемоническом примере предположим, что ключи имеют какой-то определенный вес. Вес секретного ключа x и вес открытого ключа x + 1 (таким образом, у них разные веса). В случае асимметричного шифрования для зашифровки и расшифровки используются два различных ключа и, таким образом, на весах ключи не будут сбалансированы, весы будут выглядеть асимметричными. Симметричное же шифрование использует только открытый ключ, который один и тот же как для зашифровки, так и для расшифровки. Соответственно вес ключей одинаков, и на весах они будут сбалансированы, весы будут выглядеть симметричными.
Пример алгоритма с симметричным ключом
Давайте уделим минутку и рассмотрим, как работает симметричное шифрование. Для этого нам понадобится ввести пару персонажей, которые традиционно используются при объяснении концепций безопасности.
Конечно, можно было бы использовать A, B и C для схематического отображения потока информации между двумя точками. Однако поскольку этот поток информации вовлекает людей, лучше все-таки дать им нормальные имена. Итак, двумя нашими персонажами, которых с этого момента мы будем использовать для примеров, будут Алиса и Боб. По мере необходимости будут вводится новые персонажи, но в настоящий момент давайте сконцентрируем наше внимание на Бобе и Алисе.
Эти персонажи в течение многих лет использовались для демонстрации примеров того, как работают техники шифрования, и, как и многие другие выдуманные герои-долгожители, Боб и Алиса имеют свою собственную занимательную биографию. Эту биографию можно найти в статье под названием "Послеобеденная беседа Боба и Алисы" ("The Alice and Bob after-dinner speech"), которую Джон Гордон (John Gordon) зачитал на семинаре в Цюрихе в апреле 1984 г. Эта статья находится по адресу:
http://www.conceptlabs.co.uk/alicebob.html
Итак, вернемся к нашему примеру с Бобом и Алисой. Скажем, Алиса хочет послать Бобу сообщение, хочет, чтобы оно было отправлено защищенным, и хочет, чтобы Боб и только Боб мог прочитать его. Рис. 1.4 иллюстрирует этот пример, обмен происходит слева направо.
Вот что происходит в нашем примере:
- Сообщение Алисы шифруется секретным ключом.
- Боб получает зашифрованное сообщение Алисы; видит, что оно зашифровано, и хочет прочитать его.
- Боб расшифровывает сообщение, используя тот же самый секретный ключ, что использовался и при шифровании.
- Теперь после расшифровки сообщение может быть прочитано Бобом.
Замечание. В этом примере Алиса и Боб знают друг друга достаточно хорошо. По этой причине в нем предполагается, что Алиса получила – безопасно – копию секретного ключа, использованного для шифрования сообщения.
Виды симметричных шифров
Есть два вида симметричных шифров: блочные и потоковые. Блочные шифры оперируют с блоками данных и используются, как правило, для шифрования документов и баз данных. Потоковые шифры работают с битовыми потоками и обычно используются для шифрования коммуникационных каналов.
Общеизвестные блочные шифры
- DES (Data Encryption Standard, стандарт шифрования данных) – федеральный стандарт обработки информации (FIPS, Federal Information Processing Standard) 46-3 описывает алгоритм шифрования данных (DEA, Data Encryption Algorithm). DEA также определен в стандарте ANSI10ANSI – American National Standards Institute, Американский институт национальных стандартов. X3.92. DEA имеет 64-битовый размер блока и во время выполнения использует 56-битовый ключ (из полного 64-битового ключа вырезаны 8 бит четности).
- 3DES (Triple-DES, тройной DES) – определен в стандарте ANSI X9.52 и является тройным применением DES, где существует два варианта: DES-EDE и DES-EEE. Все очень просто: DES-EDE означает тройное применение DES, где идущими друг за другом процессами шифрования (Encryption), расшифровывания (Decryption) и еще одного шифрования (Encryption) используется три разные ключевые опции. DES-EEE означает три последовательных шифрования (Encryption, Encryption, Encryption).
- AES (Advanced Encryption Standard, улучшенный стандарт шифрования). Появившись как FIPS PUB 197 от NIST и преемник DES, AES поддерживает размеры ключа в 128, в 192 и в 256 бит, в отличие от 56-битовых ключей, предлагаемых DES. Алгоритм Rijndael, изобретенный Джоанной Дэйемен (Joan Daemen) и Винсентом Рижменом (Vincent Rijmen), был выбран в качестве стандарта. Со временем многие проекты планируется перевести на AES по двум причинам: он предлагает 128-битовый размер ключа и является федеральным стандартом.
- RC2 [алгоритм шифрования на ключе переменной длины Рона Ривеста (Ron Rivest); "RC" обозначает "Ron's Code" ("Код Рона"), хотя официально за ним значится "Rivest Cipher" ("Шифр Ривеста"). Он предлагался как замена DES]. RC2 имеет 64-битовый размер блока и работает в программном обеспечении примерно в два-три раза быстрее, чем DES.
- Blowfish [создан Брюсом Шнайером (Bruce Schneier) из компании Counterpane Systems]. Это 64-битовый блочный шифр; ключ имеет переменную длину (с максимальной длиной 448 бит) и используется для генерации нескольких массивов подключей. Этот шифр был разработан специально для 32-битовых машин и работает значительно быстрее, чем DES.
- Twofish [создан Брюсом Шнайером (Bruce Schneier) из компании Counterpane Systems]. Был финалистом тендера на AES, основан на алгоритме Шнайера Blowfish. Это быстрый и универсальный шифр, не требующий большого количества памяти. Тем не менее структура шифра очень сложна и, следовательно, трудноанализируема.
- IDEA [International Data Encryption Algorithm, интернациональный алгоритм шифрования данных, создатели Хьюэйжиа Лай (Xuejia Lai) и Джеймс Мэсси (James Massey)]. Изначально назывался PES – Proposed Encryption Standard (Предлагаемый стандарт шифрования). Позднее он был улучшен и назван IPES, а затем переименован в IDEA; известен тем, что является частью PGP. Это 64-битовый итеративный блочный шифр со 128-битовым ключом. Процесс шифрования состоит из восьми сложных этапов, но скорость IDEA в программном обеспечении сравнима со скоростью DES.
- CAST [канадский алгоритм, созданный Карлайл Адамс (Carlisle Adams) и Стэффордом Таваресом (Stafford Tavares)]. Это популярный 64-битовый шифр, допускающий размеры ключа вплоть до 128 бит. Название CAST происходит от первых букв его первоначальных изобретателей, Carlisle Adams и Stafford Tavares. CAST-128 принадлежит компании Entrust Technologies, но является бесплатным как для коммерческого, так и для некоммерческого использования. CAST-256 – бесплатное доступное расширение CAST-128, которое принимает размер ключа до 256 бит и имеет размер блока 128 бит. CAST-256 был одним из первоначальных кандидатов на AES.
Общеизвестные потоковые шифры
- RC4 (алгоритм шифрования на ключе переменной длины, созданный Роном Ривестом из RSA Security). Используется для безопасных коммуникаций точно также, как происходит шифрование трафика на защищенных Web-сайтах, использующих протокол SSL. RC4 – шифр с размером ключа вплоть до 2048 бит (256 байт).
- SEAL [Software Efficient Algorithm, программно-эффективный алгоритм, созданный в 1993 г. Филом Рогэвеем (Phil Rogaway) и Доном Копперсмитом (Don Coppersmith) из IBM]. Этот алгоритм защищен патентом США 5,454,039. Шифр основан на 32-битовых словах, шифрует со скоростью примерно 4 цикла на байт и использует для шифрования 160-битовый ключ. Считается очень надежным.
- WAKE [World Auto Key Encryption algorithm, всемирный алгоритм шифрования на автоматическом ключе Дэвида Дж. Веллера (David J Wheeler)]. Это система шифрования для среднескоростной шифровки блоков с высокой степенью безопасности. Предназначена для того, чтобы быть быстрой на большинстве компьютеров, при работе требуется использование таблицы повторений и наличие большого пространства состояний.
Замечание. Одна маленькая интересная подробность: RC1 никогда не сходил дальше ноутбука Ривеста, а RC3 был сломан в RSADSI еще на этапе разработки.