Текст книги "Введение в криптографию (ЛП)"
Автор книги: Филипп Циммерман
Жанры:
Программное обеспечение
,сообщить о нарушении
Текущая страница: 5 (всего у книги 7 страниц)
Как PGP определяет подлинность ключей
Прежде чем приступить к этому параграфу, ознакомьтесь с предыдущим, «Как защитить открытый ключ от подмены».
PGP следит, какие из открытых ключей на связке сертифицированы подписями ваших доверенных поручителей. Вам нужно лишь указать программе, кого вы считаете доверенными поручителями, подписав их открытые ключи собственным безоговорочно достоверным закрытым. Здесь PGP возьмёт работу на себя и будет автоматически удостоверять все остальные ключи, подписанные установленными вами поручителями; разумеется, вы можете продолжать самостоятельно сертифицировать дополнительные ключи.
PGP применяет два параллельных критерия оценки достоверности открытых ключей, не спутайте их:
1. Принадлежит ли ключ предполагаемому владельцу? Иными словами, заверен ли он доверенной подписью?
2. Принадлежит ли ключ человеку, уполномоченному вами на удостоверение иных ключей (поручителю)?
PGP автоматически вычисляет ответ на вопрос 1. Ответ на вопрос 2 вы предоставляете программе сами. Когда вы даёте ответ на вопрос 2, PGP может рассчитать ответ на вопрос 1 для всех ключей, подписанных установленным вами поручителем.
Ключи, заверенные доверенным поручителем, расцениваются подлинными. Ключ самого доверенного поручителя должен быть удостоверен или лично вами, или другим доверенным поручителем.
PGP даёт возможность указать одну из градаций доверия каждому поручителю. Уровень доверия владельцу ключа, выступающего в качестве поручителя, должен отражать не только вашу оценку порядочности этого человека, но и ваше мнение о его компетентности в понимании процедур управления ключами и их сертификации. Можно выставить уровень отсутствия доверия, частичного доверия или полного доверия пользователю в удостоверении других открытых ключей. Этот показатель будет хранится на вашей связке вместе с его ключом, но при экспортировании ключа со связки PGP её не копирует, поскольку ваше личное мнение считается конфиденциальным.
Рассчитывая достоверность открытого ключа, PGP проверяет уровни доверия всех сертифицирующих его подписей. Затем он выводит общую оценку достоверности: например, две частично доверяемые подписи расцениваются равнозначными одной полностью доверяемой. Скептицизм программы поддаётся регулировке: вы можете настроить PGP, чтобы для удостоверения ключа он требовал две полностью доверяемые или три частично доверяемые подписи и т. д[14]14
Функция регулировки «скептицизма» PGP при оценке достоверности ключей в последних версиях отсутствует (однако возможна в GnuPG). Ключ считается подлинным, если его сертификат заверен одной полностью доверяемой подписью или двумя частично доверяемыми подписями. Недоверяемые подписи в расчёт оценки не берутся.
[Закрыть].
Ваш собственный открытый ключ достоверен аксиоматически. Программа определяет, что открытый ключ принадлежит вам, находя на связке соответствующий ему закрытый. PGP также полагает, что вы целиком доверяете самому себе в сертификации других ключей.
С течением времени вы будете собирать на связке ключи корреспондентов, кого-то из которых решите наделить правом поручительства. Другие пользователи будут назначать собственных поручителей. Все постепенно будут накапливать и распространять со своими сертификатами наборы удостоверяющих подписей в надежде, что любой потенциальный корреспондент доверится хотя одной-двум из них. Всё это в конечном итоге сформирует децентрализованную отказоустойчивую Сеть доверия всех открытых ключей общественной информационной системы.
Этот уникальный децентрализованный подход резко констрастирует со стандартными схемами администрирования открытых ключей, разработанных в единоначальных государственных и частных консервативных организациях вроде Internet Privacy Enhanced Mail (PEM), полагающихся на централизованный контроль и навязываемую вертикальную систему доверия. Стандартные модели основаны на иерархии Центров сертификации, решающих за вас, кому вы можете доверять. Распределённый вероятностный метод определения подлинности открытых ключей – это краеугольный камень архитектуры управления ключами нашей программы. PGP ставит вас на вершину вашей собственной пирамиды сертификации, давая право самостоятельно решать, кто заслуживает доверия, а кто – нет. PGP создан для людей, предпочитающих лично паковать свои парашюты.
Имейте в виду, что акцентирование внимания на этом распределённом массовом подходе не означает, что PGP не может быть реализован и в более иерархичных структурированных схемах администрирования. Например, крупным корпоративным пользователям будет полезно иметь некую центральную фигуру (лицо или департамент), сертифицирующую ключи всех служащих. PGP справляется с таким централизованным сценарием, как с частным упрощённым случаем его собственной более универсальной модели доверия.
Как уберечь закрытый ключ от компрометации
Тщательнейшим образом оберегайте свой закрытый ключ и парольную фразу! Если закрытый ключ окажется скомпрометирован, вам нужно как можно быстрее дать знать об этом всем заинтересованным лицам, пока злоумышленник не начал подделывать вашу электронную подпись. Например, взломщик сможет использовать ключ для подписания сертификатов поддельных открытых ключей, что может создать большие проблемы для множества пользователей, особенно если ваша подпись имеет у них высокий авторитет. И, самое главное, скомпрометированный закрытый ключ ставит под угрозу раскрытия все ваши конфиденциальные послания и файлы.
Прежде всего держите свой закрытый ключ под полным физическим контролем. Можете хранить его на домашнем компьютере или в ноутбуке, который носите с собой. Если вы работаете за офисным компьютером, над которым не имеете постоянного контроля, то держите связки открытых и закрытых ключей на защищённом от записи внешнем носителе, например, флоппи-диске или смарт-карте, и никогда не забывайте его в конторе, уходя домой. Ни в коем случае не держите закрытый ключ на многопользовательской машине, например, на UNIX-системе с коммутируемым подключением. Взломщик может прослушать модемное соединение, перехватить парольную фразу, а затем добраться до закрытого ключа. Используйте свой закрытый ключ только на машине, находящейся под вашим полным физическим контролем.
Не храните парольную фразу на том же компьютере, что и закрытый ключ! Держать парольную фразу и сам ключ на одном ПК так же опасно, как держать свой PIN в одном бумажнике с банковской картой. Представьте, что будет, если кто-то получит доступ к диску, содержащему и закрытый ключ, и парольную фразу. Конечно, самое надёжное место для хранения парольной фразы – ваша собственная память. Если же вам кажется, что пароль всё-таки стоит записать, спрячьте запись и держите в безопасности, возможно даже в большей, чем сам ключ.
Сделайте несколько резервных копий закрытого ключа на разных носителях. Помните, что пока у вас только один экземпляр закрытого ключа, его потеря сделает бесполезными все копии открытого, которые вы распространили по миру, а вся зашифрованная информация окажется безвозвратно потеряна.
Децентрализованный не институциональный подход PGP по управлению открытыми ключами имеет как свои преимущества, так и недостатки: вы не можете полагаться на единый список аннулированных сертификатов, что делает ограничение последствий компрометации закрытого ключа более трудной задачей. Остаётся лишь распространить известие и надеяться, что о нём услышат все.
Если случилось худшее – закрытый ключ и его пароль оказались скомпрометированы (надо надеяться, вы как-то об этом узнали) – нужно немедленно издать сертификат аннулировании ключа (Key Revocation Certificate, KRC). Он применяется как предупредительная мера, блокирующая использование аннулированного открытого ключа. Вы можете издать сертификат KRC, воспользовавшись командой Отзыва (Revoke) из менеджера PGPkeys, либо попросить сделать это вашего «уполномоченного отменителя» (Designated Revoker). Затем нужно отправить этот сертификат на сервер-депозитарий. Любой потенциальный корреспондент, скачавший сертификат, не сможет намеренно или случайно воспользоваться вашим открытым ключом: PGP не позволит использовать его для шифрования, а при сличении подписей будет уведомлять, что ключ аннулирован. Теперь вы можете сгенерировать новую ключевую пару и опубликовать новый открытый ключ в Сети.
Что если вы потеряли закрытый ключДля аннулирования открытого ключа в обычной ситуации нужно воспользоваться в вашей программе командой Отзыва; так будет издан сертификат KRC, подписанный соответствующим закрытым ключом.
Но как поступить, если закрытый ключ оказался потерян, уничтожен, либо вы попросту забыли пароль? Вам не удастся самостоятельно аннулировать открытый ключ, поскольку для подписания сертификата аннулирования нужен закрытый ключ, которого у вас больше нет. Если у вас нет "доверенного отменителя", имеющего право по вашему требованию издать сертификат KRC, вам придётся лично попросить каждого человека, подписавшего открытый ключ, отозвать с него свою подпись. Тогда, если кто-то попытается воспользоваться им, полагаясь на мнение поручителей, он будет предупреждён не доверять состоянию вашего открытого ключа.
Берегитесь ханаанского бальзама
Приобретая новый криптографический продукт, всегда возникает вопрос: можно ли ему доверять? Даже лично изучив исходные тексты программы, далеко не каждый имеет математическое образование, чтобы судить о надёжности реализации криптосистемы. И будь вы даже опытным криптографом, незначительные уязвимости алгоритмов всё же могут остаться незамеченными.
В начале 70-х, ещё учась в колледже, я придумал, как тогда полагал, блестящую шифровальную схему. Простой поток псевдослучайных чисел объединялся с потоком открытого текста, производя шифртекст. Это должно было сделать его устойчивым к любому статистическому анализу, не позволяя взломать шифр даже самым могучим разведслужбам. Я почувствовал такое самодовольство!
Годы спустя я обнаружил такую же схему в ряде консультативных статей и вводных материалов по криптографии. Как мило, другим криптологам на ум пришла та же мысль! К сожалению, схема была представлена как простое домашнее задание по использованию элементарных криптоаналитических техник для её тривиального взлома. Вот и вся моя блестящая идея…
Из этого горького опыта я вынес, как легко, разрабатывая шифровальный алгоритм, впасть в ложное чувство защищённости. Большинство людей не предполагают, насколько это трудно изобрести алгоритм, который бы выдержал продолжительную атаку профессионального и обладающего огромными ресурсами оппонента. Многие заурядные разработчики создали равно неэффективные шифровальные схемы (зачастую одну и ту же схему), и некоторые из них были включены в коммерческие программные продукты, проданные за хорошие деньги тысячам ничего не подозревающих пользователей.
Это то же самое, что продавать автомобильные ремни безопасности, которые красивы и удобны, но мгновенно раскрываются даже в самом мягком крэш-тесте. Полагаться на них будет даже хуже, чем не пристёгивать ремень вообще. Никто и не поймёт, что он бесполезен, пока не попадёт в настоящую автокатастрофу. Используя слабый криптопродукт, вы, ничего не подозревая, можете поставить ценную информацию под угрозу, тогда как не сделали бы этого, вовсе не имея криптографических средств. Возможно, вы даже никогда не узнаете, что ваши данные были похищены.
Иногда в коммерческих продуктах реализован федеральный Стандарт шифрования данных – DES – весьма неплохой блочный шифр (за исключением слишком короткого ключа), рекомендованный правительством для коммерческого использования (но не для секретной информации, что довольно странно. Хммм). DES может работать в нескольких режимах, одни из которых лучше, чем другие. Правительство особо указывает не использовать при пересылке сообщений самый простой и слабый – электронную шифрокнигу (electronic codebook, ECB). Вместо него оно предлагает более стойкие и комплексные режимы гаммирования с обратной связью(cipher feedback, CFB) и сцепления блоков шифртекста (cipher block chaining, CBC).
К несчастью, большинство исследованных мною в начале 1990-х, когда я только опубликовал PGP, коммерческих пакетов использовали именно режим ECB. В беседах с некоторыми из авторов подобных разработок они отвечали, что никогда и не слышали о режимах CBC или CFB и не знают о слабостях ECB. В тех же продуктах иногда реализуются неадекватные и небезопасные протоколы управления ключами. Один тот факт, что они не изучили даже основ криптографии, чтобы понимать такие элементарные вещи, ничуть не воодушевляет. Кроме того, нередко такие программные продукты содержат альтернативный более быстрый алгоритм, который может быть использован вместо медленного DES. Разработчик программы, как правило, считает свой собственный быстрый алгоритм столь же надёжным, сколь и DES, но после разговора с ним я обычно выяснял, что это лишь вариация на тему моего собственного "блестящего" изобретения студенческих лет. Возможно он даже не понимает, как работает его алгоритм, но горячо уверяет меня, что это – великолепная схема, на которую можно положиться. Я знаю, что он считает свой алгоритм безупречным, но как мне проверить надёжность, не изучив его?
Справедливости ради стоит отметить, что компании, специализирующиеся на криптотехнологиях, не выпускают таких кошмарно слабых программ.
Но даже действительно хорошие программы, применяющие DES в верном режиме, всё же имеют проблемы. Обычный DES использует 56-битовый ключ, слишком короткий по сегодняшним меркам, который может быть с лёгкостью взломан полным перебором на специальных высокоскоростных машинах. Жизнь DES подошла к концу, равно завершилась жизнь всех его реализаций.
Есть компания под названием AccessData, торгующая очень дешёвой программой, которая взламывает шифровальные схемы, встроенные в WordPerfect, Lotus 1-2-3, MS Excel, Symphony, Quattro Pro, Paradox, MS Word и PKZIP. Она не просто угадывает пароль, а производит настоящий криптоанализ. Некоторые люди покупают её, когда забывают пароли к собственным файлам. Силовые структуры тоже её покупают, чтобы читать файлы, которые изымают в ходе обысков. Я разговаривал с Эриком Томпсоном, автором программы, и он признался, что ей требуется всего доля секунды, чтобы взломать пароль, но он добавил несколько циклов задержки для замедления процесса, дабы он не казался покупателю столь элементарным.
В некотором смысле криптография аналогична фармацевтике. Её надёжность представляется критически важной. Плохой пенициллин на вид ничем не отличается от хорошего. Если с вашим текстовым редактором что-то не так, вы это увидите, но как вы определите надёжность своего криптографического пакета? Шифртекст, произведённый слабым алгоритмом, выглядит так же убедительно, как и шифртекст, сгенерированный стойким алгоритмом. В этом деле много ханаанского бальзама[16]16
В старину ханаанским бальзамом называли шарлатанские лекарства, якобы излечивающие от всех болезней. Сегодня это термин, применяемый к ненадёжным системам безопасности.
[Закрыть]. Много знахарских снадобий. В отличие от торгашей лекарствами древности, нынешние разработчики обычно даже не догадываются, что их продукты – ханаанский бальзам. Возможно, они неплохие программные инженеры, но, как правило, даже не знакомы с научными трудами по криптографии. Но продолжают считать, что могут написать хороший криптопродукт. А почему бы и нет? В конце концов, интуитивно это кажется несложным, а их программы вроде бы функционируют нормально.
Каждый, кто считает, что изобрёл безупречный криптографический алгоритм, либо невероятно редкостный гений, либо наивный дурак. К сожалению, порой мне приходится иметь дело с такими потенциальными криптографами, которые хотят внести в PGP свои "улучшения", добавив алгоритм собственной разработки.
Я вспоминаю случившуюся в 91-ом году беседу с Брайеном Сноу, высокопоставленным криптографом из АНБ. Он сказал, что никогда бы не поверил в надёжность алгоритма, созданного тем, кто для начала "не набил собственных шишек", потратив достаточно времени на взлом кодов. В этом есть смысл. Я обнаружил, что практически никто из мира коммерческой криптографии не подходит под такой критерий."Да, – добавил он с самоуверенной ухмылкой. – И это делает нашу работу в АНБ значительно проще". Пугающая мысль. Ведь я тоже не подхожу.
Правительство тоже приторговывало ханаанским бальзамом. После Второй мировой войны Соединённые Штаты продали германские шифровальные машины "Энигма" странам третьего мира. Но правительство не сообщило, что в ходе войны Союзники вскрыли код "Энигмы", факт, остававшийся засекреченным в течение десятилетий. Даже сегодня во многих UNIX-системах алгоритм "Энигмы" применяется для шифрования файлов, отчасти и потому, что правительство создало юридические преграды для использования чего-то лучшего. Оно даже пыталось предотвратить первоначальную публикацию RSA в 1977-м. И многие годы препятствовало практически всем попыткам коммерческой разработки эффективного криптофона для массового потребителя.
Главной задачей Агентства национальной безопасности США является сбор разведданных, главным образом путём скрытого прослушивания и перехватов частных гражданский коммуникаций (см. книгу Джеймса Бэмфорда«Дворец головоломок»). АНБ накопило значительные навыки и опыт по взлому кодов. Если люди не могут воспользоваться надёжными средствами шифрования, это делает задачу АНБ ещё более лёгкой. Агентство также отвественно за одобрение и рекомендацию криптоалгоритмов. Некоторые критики видят в этом конфликт интересов, например, как если посадить лисицу сторожить курятник. В 1980-х АНБ продавливало собственный симметричный шифровальный алгоритм (Утверждённая программа COMSEC), принципы действия которого отказывалось раскрывать, ссылаясь на«секретность информации». Агентство хотело, чтобы все просто приняли его на веру. Но любой криптолог скажет вам, что грамотно спроектированный алгоритм не нуждается в защите для сохранения надёжности. Защиты требуют только ключи. Как же в таком случае можно убедиться, что засекреченный алгоритм АНБ действительно безопасен? Агентству не составит большого труда разработать такой алгоритм, который только оно сможет взломать.
На момент первоначальной публикации PGP, качество коммерческих криптопродуктов в США определялось тремя главными факторами:
Во-первых, почти тотальной некомпетентностью разработчиков коммерческих криптографических решений (хотя после выпуска PGP наметились сдвиги). Каждый программист воображал себя криптографом, что вело к профанации крипторазработок и распространению продуктов крайне низкого качества.
Во-вторых, систематическим вмешательством АНБ с целью подавить все разработки хороших коммерческих криптотехнологий мерами юридического запугивания и экономического давления. Часть этого давления выразилась в строгом экспортном контроле продуктов шифрования, который, по законам рынка программного обеспечения, имел результирующий эффект и в подавлении внутренних криптографических разработок.
Третьим методом подавления являлось предоставление патентов на все алгоритмы шифрования с открытым ключом единственной компании, что позволяло давлением на эту критическую точку ограничивать распространение технологии в целом (в итоге осенью 95-го этот патентный картель развалился).
Совместный эффект всех этих факторов состоял в том, что до момента публикации PGP в США не было ни одного общедоступного универсального продукта, обеспечивающего шифрование с высокой степенью криптографической защиты.
Я не так уверен в надёжности PGP, как был когда-то уверен в своей "блестящей" шифровальной схеме. Будь это так, это было бы дурным симптомом. В то же время я не думаю, что PGP содержит какие-то зияющие дыры (хотя и убеждён, что в нём есть ошибки). Для реализации в нём я избрал лучшие алгоритмы из опубликованных в гражданской криптологической литературе. Эти алгоритмы были индивидуально детально изучены. Я знаю многих ведущих мировых криптографов, с некоторыми из них обсуждал большинство алгоритмов и протоколов, задействованных в PGP. Программа была годы в разработке и уже хорошо изучена. И я не работаю на АНБ. Но вы не обязаны мне верить, ведь её исходные тексты опубликованы именно с целью свободного изучения.
И ещё один момент в пользу надёжности и целостности PGP: после его первоначальной свободной публикации в 1991 году я провёл три года под уголовным преследованием Таможенной службой США за распространение программы за рубеж, с перспективой суда и многих лет тюремного заключения. Кстати, почему-то правительство не реагировало на другое криптографическое ПО, но только PGP вывел его из себя. Говорит ли вам это что-нибудь о стойкости PGP? Я заработал свою репутацию на криптографической целостности своих продуктов. Я не предам своих обязательств нашим гражданским и конституционным правам, ради которых рисковал собственной свободой. Я не позволю программе, автором которой являюсь, иметь секретные "потайные ходы".