Текст книги "Введение в криптографию (ЛП)"
Автор книги: Филипп Циммерман
Жанры:
Программное обеспечение
,сообщить о нарушении
Текущая страница: 4 (всего у книги 7 страниц)
Симметричные алгоритмы PGP
PGP располагает набором различных алгоритмов с тайным ключом, шифрующих само сообщение. Под алгоритмами с тайным ключом мы подразумеваем симметричные блочные шифры, использующие один и тот же ключ как для зашифрования, так и для расшифрования. Симметричные блочные шифры, предлагаемые PGP, это CAST, Triple-DES, IDEA, Twofish, а такжеAES. Все эти алгоритмы не были написаны «на коленке» – это результаты серьёзных научных исследований криптологических групп с выдающейся репутацией.
Для интересующихся криптографией мы можем рассмотреть эти алгоритмы немного более детально. CAST, Triple-DES и IDEA оперируют с 64-битовыми блоками данных. CAST и IDEA имеют ключи длиной 128 бит, Triple-DES использует 168-битовый ключ. Как и Data Encryption Standart (DES), эти алгоритмы могут работать в режимах гаммирования с обратной связью по шифртексту (cipher feedback, CFB) и последовательного сцепления блоков шифртекста (cipher block chaining, CBC). PGP использует их в 64-битовом режиме CFB.
Я добавил в PGP алгоритм CAST по ряду причин: он подаёт надежды как стойкий блочный шифр со 128-битовым ключом, он очень быстр, и он бесплатный. Его название происходит от инициалов разработчиков, Карлайсла Адамса и Стаффорда Тавареса[9]9
Разработчики же утверждают, что название CAST связано с процедурой разработки, и должно напоминать о вероятностном характере процесса (cast, англ. – догадка), а не об инициалах авторов.
[Закрыть], из Northern Telecom (Nortel). Nortel запатентовал CAST, но дал письменное обязательство оставить его доступным для каждого без выплат патентных гонораров. CAST представляется очень удачным шифром, спроектированным людьми с хорошей репутацией в своей профессиональной сфере. Дизайн основан на сугубо формальном подходе с рядом формально доказуемых положений; всё это даёт веские основания заключить, что для взлома его 128-битового ключа потребуется лобовая атака. CAST не имеет пространства слабых и полуслабых ключей. Есть серьёзные аргументы в пользу того, что CAST совершенно неподвержен линейному и дифференциальному криптоанализу, двум мощнейшим формам криптоанализа, описанным в открытой литературе, обе из которых оказались эффективны при взломе DES. Формальная DES-подобная архитектура CAST и хорошая репутация его авторов привлекли к алгоритму внимание и попытки криптоаналитических атак со стороны всего научного сообщества, которые он выстоял достойно. У меня появляется почти то же чувство уверенности в CAST, какое было несколько лет назад от IDEA, шифра, который я избрал для ранних версий PGP. На то время IDEA был слишком молод, чтобы иметь серьёзное доверие, но и поныне он демонстрирует себя очень хорошо.
Блочный шифр IDEA (International Data Encryption Algorithm) основан на концепции«смешения операций из различных алгебраических групп». Он был разработан в ETH, Цюрих, Джеймсом Мэсси и Суэджа Лай, и опубликован в 1990 г. В первых публикациях алгоритм назывался IPES (Improved Proposed Encryption Standart), но позднее его переименовали в IDEA. IDEA гораздо более стоек против атак, нежели ранние шифры FEAL, REDOC–II, LOKI, Khufu и Khafre. Также, IDEA оказался гораздо устойчивей DES к очень удачной дифференциальной криптоатаке Бихама и Шамира, равно как и к линейному криптоанализу. Уверенность в IDEA растёт с каждым годом. К сожалению, самым большим препятствием к применению IDEA как стандарта шифрования стал тот факт, что держатель патента на его дизайн – AscomSystec – не предоставляет его для свободного применения без выплат роялти, как в случаях с DES и CAST.
Также, в числе прочих, в арсенал блочных шифров PGP включён и трёхключевой Triple-DES. DES был изобретён в IBM в середине 70-х. Хотя он и имеет эффективный дизайн, его 56-битовый ключ слишком мал по сегодняшним меркам. Triple-DES же крайне надёжен; за многие годы он был хорошо изучен, так что может быть это более удачный выбор в сравнении с относительно молодыми CAST и IDEA. Triple-DES – это DES, применяемый трижды на одном блоке данных, используя три разных ключа, за исключением того, что вторая операция проходит в обратном порядке в режиме расшифрования. Несмотря на то, что Triple-DES гораздо медленней, чем CAST или IDEA, скорость обычно не играет критической роли в email-приложениях. Хотя Triple-DES имеет длину ключа в 168 бит, эффективная стойкость составляет по меньшей мере 112 бит против взломщика с невероятно огромным вычислительным потенциалом, используемым в атаке. В соответствии с расчётами, представленными Майклом Винером на Crypto96, любые хотя бы удалённо правдоподобные ресурсы для хранения промежуточных вычислений, доступные взломщику, позволят провести атаку, требующую практически столько же времени/средств, сколько понадобится для лобового взлома 129-битового ключа. Применение Triple-DES не ограничено никакими патентами.
Начав с версии PGP 7.0, мы добавили алгоритм Брюса Шнайера Twofish. Twofish стал одним из пяти финалистов в проекте NIST "Улучшенный стандарт шифрования" (AES). AES представляет собой новую архитектуру блочного шифра, работающего на 128-битовых блоках, с размерами ключа в 128, 192 или 256 бит. Пятнадцать криптографических групп со всего света подали свои разработки, когда в 1996 году NIST объявил о начале конкурса, из которых в 1998 выбрал пять.
Пятью финалистами стали Twofish, Serpent, Rijndael, RC6 и MARS. Все пять прошли через серьёзнейшее криптоаналитическое испытание лучшими криптографами мира, многие из которых представляли на AES собственные работы, соревновавшиеся с другими. NIST из этих пяти превосходных алгоритмов в качестве победителя избрал Rijndael («рэйн долл»). Rijndael – это блочный шифр, разработанный Джоан Даймен и Винсентом Рижменом. Rijndael был включён в PGP, начиная с версии 7.1. За более подробной информацией об AES см. http://www.nist.gov/aes.
Открытые ключи, сгенерированные в PGP 5.0 и выше, несут в себе сведения о том, какие блочные шифры распознаются программой получателя с тем, чтобы программа отправителя знала, какие алгоритмы можно применять для зашифрования. Открытые ключи типа Diffie-Hellman/DSS поддерживают CAST, IDEA, AES (Rijndael), Triple-DES и Twofish в качестве блочных шифров с AES, установленным по умолчанию (в версиях 8.0 и выше). С целью обратной совместимости, ключи RSA не обладают такой возможностью. PGP ограничен алгоритмом IDEA для шифрования сообщений ключами RSA, поскольку старые версии PGP поддерживают только RSA и IDEA[10]10
Речь идёт о формате ключей RSA обратной совместимости, о так называемых RSA Legacy v3. Новый формат ключей RSA v4 в полной мере соответствует функциональности ключей DH/DSS v4.
[Закрыть].
PGP сжимает открытый текст перед его зашифрованием, поскольку зашифрованные данные сжимаются гораздо хуже. Сжатие данных сокращает время их модемной передачи и экономит дисковое пространство, а так же, что более важно, усиливает криптографическую стойкость. Большинство криптоаналитических техник основано на статистическом анализе шифртекста в поисках признаков избыточности открытого текста. Сжатие уменьшает избыточность информации, чем существенно усиливает сопротивляемость криптоанализу. Сжатие данных требует немного дополнительного времени, но с точки зрения безопасности оно того стоит.
Слишком короткие файлы и файлы, которые не сжимаются достаточно хорошо, не сжимаются вовсе. Кроме того, программа распознаёт файлы, созданные наиболее распространёнными архиваторами, такими как PKZIP, и не пытается сжать уже сжатый файл.
Для технически любознательных можно добавить, что программа использует алгоритмы сжатия ZIP, написанные Жаном Лу Галли, Марком Адлером и Ричардом Уэйлсом. Программа ZIP использует алгоритмы сжатия, функционально эквивалентные тем, что применяются в PKZIP 2.x от PKWare. Эта программа сжатия была избрана для PGP в первую очередь из-за своей неплохой степени сжатия и быстроты работы.
О случайных числах и сеансовых ключахДля генерации одноразовых симметричных сеансовых ключей PGP использует криптографически стойкий генератор псевдослучайных чисел (ГПСЧ)[11]11
В PGP реализован генератор ПСЧ, соответствующий спецификациям ANSI X9.17 для генерации непредсказуемых сеансовых ключей. Более подробные сведения могут быть найдены в IETF RFC 1750.
[Закрыть]. Если файл ПСЧ отсутствует, он автоматически создаётся и заполняется абсолютно произвольными числами, полученными программой от показаний системного таймера, задержек нажатий клавиш и перемещений мыши.
Генератор "пересеивает" файл при каждом его использовании, частично смешивая старый материал с новым, полученным от конкретного времени суток и иных произвольных показателей. В качестве гамма-генератора применяется симметричный алгоритм шифрования. Файл содержит как случайные данные выхода генератора, так и случайные данные ключа, используемого для задания исходного внутреннего состояния генератора.
Файл ПСЧ должен быть защищён от компрометации, дабы снизить риск вычисления из него ваших предыдущих или будущих сеансовых ключей. Потенциальному взломщику придётся очень постараться, чтобы извлечь хоть что-то полезное из этого файла, поскольку он криптографически перемешивается до и после каждого применения. Тем не менее, не будет лишним защитить его от попадания в чужие руки. Если можете, сделайте файл доступным только для себя. Если такое невозможно, не позволяйте посторонним беспрепятственно копировать файлы с вашего компьютера.
О дайджестах сообщенийДайджест сообщения – это компактная 160– или 128-битовая свёртка вашего сообщения-прообраза, или контрольная сумма файла. Вы можете представить его как отпечаток (fingerprint) сообщения или файла. Дайджест сообщения – это «отражение» прообраза: если исходные данные будут как-либо изменены, из них будет вычислен совершенно иной дайджест. Это позволяет обнаружить даже самые незначительные изменения, внесённые злоумышленником в сообщение. Дайджест генерируется посредством криптографически стойкой односторонней хэш-функции. В вычислительном плане невозможно создать такое подставное сообщение, которое бы производило дайджест, идентичный дайджесту оригинального сообщения[12]12
Если говорить точнее, в вычислительном плане практически невозможно создать такое подставное сообщение, которое производило бы дайджест, идентичный дайджесту заданного сообщения – для это потребуется перебрать 2160вариантов при использовании хэш-функции SHA-1. В то же время, исходя из парадокса дней рождений, можно создать два сообщения, производящих идентичный дайждест, за 280 вычислений, а если принять во внимание теорию вероятности, то с 50-процентным успехом искомая комбинация сообщений будет найдена уже после 279 вычислений.
[Закрыть]. В этом отношении дайджест сообщения гораздо лучше контрольной суммы (CRC32 или CRC64), поскольку довольно просто создать два различных сообщения, производящих одинаковую контрольную сумму. Но, как и в случае с контрольной суммой, не существует никакого способа восстановить из дайджеста исходные данные прообраза.
Алгоритм стойкой односторонней хэш-функции, используемый в PGP 5.0 и выше, называется SHA-1, что означает Secure Hash Algorithm; он был разработан в АНБ для Национального Института Стандартов и Технологий (NIST) США. SHA-1 – это 160-битовый хэш-алгоритм. Некоторые люди ко всем разработкам АНБ относятся с подозрением, поскольку именно АНБ «заведует» электронной и радиотехнической разведкой и взломом кодов. Но имейте в виду, что АНБ не заинтересовано в подделке подписей; правительство и его силовые структуры получат гораздо больше выгоды от хорошего стандарта неподделываемых ЭЦП, не позволяющих никому от них отрекаться. Кроме того, SHA-1 был опубликован в открытой литературе и, после тщательнейшего исследования лучшими криптографами мира, специализирующимися на хэш-функциях, получил единодушную высочайшую оценку своего крайне удачного дизайна. Он имеет некоторые архитектурные инновации, благодаря которым преодолевает все наблюдавшиеся прежде проблемы односторонних хэш-функций, когда-либо созданных гражданским криптографическим сообществом. Все последние версии PGP используют SHA-1 в качестве хэш-алгоритма для генерации подписей новыми ключами DSA, соответствующими Стандарту Цифровых Подписей (DSS) NIST[13]13
PGP 9.x и выше, как и текущие версии GnuPG, смещают акцент к применению хэш-функций семейства SHA-2, имеющих длину выхода до 512 бит. Предполагается, что это должно дать отсрочку на случай дальнейших криптоаналитических атак, ослабляющих коллизионную устойчивость классических алгоритмов хэширования.
[Закрыть]. Для нужд обратной совместимости новые версии PGP всё ещё используют MD5 для подписания ключами RSA [Legacy v3], т. к. старые версии PGP используют для работы с ЭЦП только алгоритм MD5.
В ранних версиях PGP в качестве алгоритма хэш-функции применялся MD5, Message Digest Algorithm, опубликованный для свободного применения компанией RSA Data Security. MD5 представляет собой хэш-алгоритм со 128-битовым выходом. В 1996 году MD5 был практически взломан немецким криптографом Гансом Доббертином. Хотя алгоритм не поддался окончательно, в нём выявились столь серьёзные недостатки (тенденция сжимающей функции алгоритма к коллизиям), что теперь никому более не рекомендуется использовать его для генерации ЭЦП. Дальнейшая работа в этой области наверняка позволит полностью его взломать, что сделает возможной свободную подделку электронных подписей. Если вы не желаете в один прекрасный день обнаружить свою электронную подпись на подставных признательных показаниях, переходите к применению новых ключей DSA и RSA v4 как предпочтительного метода генерации цифровых подписей, поскольку они в качестве криптографически стойкой односторонней хэш-функции используют SHA-1.
Как защитить открытый ключ от подмены
В среде криптосистем с открытым ключом вам нет нужды предохранять открытые ключи от компрометации. Напротив, гораздо лучше, когда они широко распространены. Но очень важно защищать их от подделки, дабы всегда сохранялась уверенность, что конкретный открытый ключ действительно принадлежит человеку, чьё имя указано в сведениях сертификата. В этом состоит самое слабое место криптосистем с открытым ключом и это их главная уязвимость. Давайте для начала представим потенциально возможный инцидент, а затем разберёмся, как его не допустить.
Предположим, вам нужно отправить секретное послание Алисе. Вы скачиваете её сертификат и открытый ключ с сервера-депозитария, затем этим ключом зашифровываете письмо и отправляете его по электронной почте.
К несчастью для вас и Алисы, злоумышленник Мэллори сгенерировал собственную ключевую пару с идентификационными сведениями Алисы в сертификате (имя, email), взломал сервер и незаметно подменил подлинный открытый ключ Алисы своей подделкой. Ничего не подозревая, вы использовали поддельный ключ Мэллори вместо открытого ключа Алисы, ведь всё выглядело вполне правдоподобно, поскольку на поддельном ключе была идентификационная информация Алисы. Теперь Мэллори может перехватить и расшифровать сообщение, предназначенное Алисе, поскольку в его распоряжении соответствующий закрытый ключ. Он даже может вновь зашифровать письмо реальным ключом Алисы и отправить его по назначению, так что никто не заметит ничего подозрительного. Более того, он может делать собственным закрытым ключом подписи, якобы принадлежащие Алисе, поскольку для их проверки все будут использовать его подставной открытый ключ.
Единственный способ избежать подобной проблемы – не допускать махинаций с открытыми ключами. Это несложно, если вы получили открытый ключ Алисы непосредственно от неё при личной встрече, но может оказаться весьма проблематичным, если она в тысячах миль от вас или просто в данный момент недоступна.
Вероятно, вы сможете получить ключ Алисы от вашего с ней общего друга Дэвида, который имеет подлинную копию её открытого ключа. Дэвид может подписать открытый ключ Алисы собственным закрытым, тем самым поручаясь за его достоверность.
Так, Дэвид заверит сертификат ключа, чем укажет, что ключ Алисы не был подделан. В то же время, проверка подписи поручителя на сертификате требует наличия у вас подлинной копии открытого ключа Дэвида. Вероятно, Дэвид также сможет предоставить и Алисе надёжную копию вашего ключа. Таким образом, он станет доверенным посредником-поручителем между вами и Алисой.
Этот подписанный сертификат открытого ключа Алисы может быть загружен ей самой или Дэвидом на сервер-депозитарий с тем, чтобы вы могли его получить в любое удобное время. Скачав сертификат, вы сверяете подпись открытым ключом Дэвида и можете быть уверены, что это на самом деле подлинный открытый ключ Алисы. Ни один мошенник не сможет вас одурачить, выдавая свой поддельный ключ за ключ Алисы, поскольку никто не может подделать сертифицирующую этот ключ подпись Дэвида.
Широко известный и уважаемый человек может даже специализироваться на услугах посредничества и представительства между разными пользователями, подписывая сертификаты их открытых ключей. Этого доверенного индивида можно назвать Центром сертификации. Цифровой сертификат любого открытого ключа, содержащий подпись этого Центра сертификации, может быть априорно расценен как подлинный и действительно принадлежащий пользователю, чья идентификация указана в сведениях сертификата. Любому пользователю, желающему участвовать в такой Сети доверия, для проврки подписей будет достаточно достоверной копии открытого ключа ЦС. В некоторых случаях, ЦС может также выступать в качестве сервера-депозитария, позволяя пользователям сети запрашивать из него открытые ключи; но для сервера-депозитария заверять ключи нет никакой необходимости.
Доверенный централизованный ЦС особенно уместен в крупных корпоративных и государственных учреждениях с единой системой управления. Некоторые организации используют иерархии ЦС.
В более децентрализованной среде возможность всем пользователям выступать в качестве представителей и доверенных поручителей своих друзей и коллег будет более предпочтительна, нежели централизованный источник сертификации ключей.
Одна из привлекательных особенностей PGP состоит в том, что он реализуется равно эффективно и в централизованной среде с Центром сертификации, и в более децентрализованной, в которой пользователи самостоятельно обмениваются своими персональными ключами.
Комплекс мер по защите открытых ключей от подделки – это наиболее сложная проблема практических реализаций криптосистем с открытым ключом. Это "ахиллесова пята" всей асимметричной криптографии, и большая часть всех механизмов PGP завязана именно на решение этой главной задачи.
Не используйте чужой открытый ключ, пока полностью не убедитесь, что это не подделка, а подлинный ключ человека, чья идентификация указана в сведениях сертификата. Вы можете быть уверены в подлинности ключа, если получили его напрямую от владельца при личной встрече, либо если его сертификат подписан человеком, которому вы доверяете, при условии, что располагаете достоверной копией ключа поручителя. Кроме того, в сведениях сертификата должно быть отражено как имя, так и фамилия пользователя, а не одно его имя.
Как бы вы ни были опытны, не забывайте о мерах предосторожности и не полагайтесь на подлинность скачанного с сервера-депозитария или с веб-сайта открытого ключа, если он не заверен кем-то, кому вы доверяете. Такой несертифицированный открытый ключ мог быть подделан или заменён кем угодно, возможно даже системным администратором сервера или веб-сайта.
Если вас просят подписать чей-то ключ, прежде убедитесь, что он действительно принадлежит человеку, указанному в идентификации сертификата, поскольку подпись на сертификате открытого ключа – это ваше поручительство за его подлинность и принадлежность указанному человеку. Все, кто вам доверяет, примут этот открытый ключ за достоверный, потому что он несёт вашу сертифицирующую подпись. Не полагайтесь на домыслы и чужое мнение: подписывайте открытый ключ только тогда, когда лично и непосредственно убедились в его принадлежности заявленному владельцу. Предпочтительнее подписывать только те ключи, которые были напрямую получены от их истинных владельцев.
Для подписания сертификата ключа вы должны быть гораздо более уверены в его подлинности, нежели для его личного использования с целью шифрования сообщений. Для установления подлинности ключа только для личного применения будет достаточно подписи доверенного поручителя. Но чтобы подписать ключ самому, вам необходима собственная независимая непосредственная убеждённость в том, кто в действительности является владельцем этого ключа. Возможно, вам стоит позвонить владельцу (убедитесь, что говорите с тем, с кем надо) и попросить его прочитать отпечаток ключа, дабы удостовериться, что ключ, находящийся у вас, является точной копией оригинального.
Имейте в виду: ваша подпись на сертификате ключа не поручительствует за доверие владельцу; она поручительствует только за достоверность (подлинность) этого открытого ключа. Вы не рискуете репутацией, подписывая ключ социопата, если полностью убеждены, что ключ действительно принадлежит ему. Другие люди поверят в подлинность ключа, поскольку он подписан вами (допуская, что они вам доверяют), но не поверят его владельцу как человеку. Доверие целостности ключа и доверие его обладателю – не одно и то же.
Полезно держать свой открытый ключ вместе с набором удостоверяющих подписей от ряда поручителей в надежде, что большинство людей доверится сертифицирующей подписи хотя бы одного из них. Вы можете разместить свой ключ с набором подписей в различных депозитариях. Если подписываете чужой открытый ключ, верните его копию с вашей подписью обратно владельцу; таким образом, вы сможете выступать в качестве его представителя.
Примите все меры, чтобы никто не мог подменить файл вашей собственной связки открытых ключей. Проверка подписей на сертификате нового ключа полностью зависит от целостности достоверных открытых ключей, уже находящихся на вашей связке. Держите связку под физическим контролем; желательно хранить её, равно как и закрытый ключ, на собственном персональном компьютере, нежели на многопользовательской системе со свободным доступом или служебном ПК; это необходимо для защиты связки от подделки, а не от компрометации. Храните актуальную достоверную резервную копию связки открытых и закрытых ключей на защищённом от записи внешнем носителе, например, на компакт-диске.
Так как ваш собственный открытый ключ является последним источником прямой или опосредованной проверки подлинности всех остальных ключей на связке, этот ключ защитить от подделки важнее всего. Будет лучше, если вы сделаете его резервную копию и поместите её на надёжный носитель.
PGP в своей логике исходит из допущения, что вы держите связки ключей, сам PGP и систему в целом в полной физической безопасности. Если злоумышленник получит доступ к компьютеру, тогда, теоретически, он сможет изменить программу, делая неэффективными все её механизмы обнаружения недостоверных ключей.
Несколько усложнённым способом защиты всей связки открытых ключей от подделки будет подписание её файла закрытым ключом. Вы можете сделать это, создав съёмную подпись (detached signature) файла и регулярно её сверяя.