Текущее время: 15 дек 2018, 15:31

Город ХОББИ

Занятие любимым хобби - это путь к счастливой жизни!

Основы криптографии

Все о языках программирования, примеры программ, функций, процедур, классов, синтаксис, скрипты , на любых языках программирования
Аватар пользователя
 
Сообщений: 42
Зарегистрирован: 05 апр 2013, 09:22

Основы криптографии

Сообщение Виталий » 11 апр 2013, 20:45

Основы криптографии


Юлий Цезарь не доверял гонцам. Поэтому, отправляя письма своим генералам, он заменял каждую букву A в своём сообщении на D, каждую B на E, и т.д. Только тот, кто знал правило «сдвига на 3» мог расшифровать его послание.

Итак, приступим.

Зашифрование и расшифрование

Информация, которая может быть прочитана, осмыслена и понята без каких-либо специальных мер, называется открытым текстом (plaintext, clear text). Метод искажения открытого текста таким образом, чтобы скрыть его суть, называется зашифрованием 1 (encryption или enciphering). Зашифрование открытого текста приводит к его превращению в непонятную абракадабру, именуемую шифртекстом (ciphertext). Шифрование позволяет скрыть информацию от тех, для кого она не предназначается, несмотря на то, что они могут видеть сам шифртекст. Противоположный процесс по обращению шифртекста в его исходный вид называется расшифрованием (decryption или deciphering) 2.

Рисунок 1 иллюстрирует это.



Что такое криптография

Криптография – это наука об использовании математики для зашифрования и расшифрования данных. Криптография позволяет хранить важную информацию или передавать её по ненадёжным каналам связи (таким как Интернет) так, что она не может быть прочитана никем, кроме легитимного получателя.

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

Криптология объединяет криптографию и криптоанализ.

Стеганография является смежной дисциплиной. Вместо того, чтобы делать сообщения нечитаемыми, она использует техники сокрытия самих сообщений. Стеганография – это не криптография, это лишь частный случай кодирования, чья надёжность опирается на секретность механизма сокрытия сообщений. Скажем, если вы решите спрятать сообщение А, используя для этого первые буквы первых слов в каждом предложении сообщения Б, это будет секретом, пока кто-то не обнаружит, где искать А, и тогда механизм более не будет предоставлять никакой защиты.

Стойкая криптография

«В мире различают два типа критографии: криптография, которая помешает вашей младшей сестре читать ваши файлы, и криптография, которая помешает читать ваши файлы правительствам крупных стран. Эта книга посвящена криптографии вторго типа»

– Брюс Шнайер, «Прикладная криптография:
протоколы, алгоритмы, исходные тексты на языке С»

PGP основан на том же типе криптографии.

Криптография может быть стойкой, а может быть слабой, как описано в приведённом примере. Криптографическая стойкость измеряется тем, сколько понадобится времени и ресурсов, чтобы из шифртекста восстановить исходный открытый текст. Результатом стойкой криптографии является шифртекст, который исключительно сложно взломать без обладания определёнными инструментами по дешифрованию. Но насколько сложно? Используя весь вычислительный потенциал современной цивилизации – даже миллиард компьютеров, выполняющих миллиард операций в секунду – невозможно дешифровать результат стойкой криптографии до конца существования Вселенной.

Кто-то может решить, что стойкая криптография сможет устоять даже против самого серьёзного криптоаналитика. Но кто об этом говорит? Никем не доказано, что лучшее шифрование, доступное сегодня, сможет выстоять против вычислительных возможностей компьютеров, доступных завтра. Тем не менее, стойкая криптография, задействованная в PGP, – лучшая на сегодняшний день. Бдительность и консерватизм сберегут вас лучше заявлений о совершенной защите.

Как действует криптография

Криптографический алгоритм, или шифр, – это математическая формула, описывающая процессы зашифрования и расшифрования. Чтобы зашифровать открытый текст, криптоалгоритм работает в сочетании с ключом – словом, числом или фразой. Одно и то же сообщение одним алгоритмом, но разными ключами будет преобразовываться в разный шифртекст. Защищённость шифртекста целиком зависит от двух вещей: стойкости криптоалгоритма и секретности ключа.

Криптоалгоритм плюс всевозможные ключи и протоколы, приводящие их в действие, составляют криптосистему. PGP – это криптосистема.

Обычная криптография

В традиционной криптографии, также называемой шифрованием тайным, или симметричным, ключом, один и тот же ключ используется как для зашифрования, так и для расшифрования данных. Data Encryption Standart (DES) – пример симметричного алгоритма, широко применявшегося на Западе с 70-х годов в банковской и коммерческой сферах. В настоящее время его сменяет Advanced Encryption Standard (AES). Рисунок 2 иллюстрирует процесс симметричного шифрования.



Шифр Цезаря

Крайне простой пример симметричного шифрования – это подстановочный шифр. Подстановочный шифр заменяет каждую часть информации другой информацией. Чаще всего это достигается смещением букв алфавита. Пара примеров – это Секретное кольцо-декодер капитана Миднайта, которое могло быть у вас в детстве, и шифр Юлия Цезаря. В обоих случаях алгоритм состоит в том, чтобы сдвинуть алфавит, а ключ – это число букв, на которое произведено смещение.

Допустим, если мы решим зашифровать слово «SECRET», используя ключ Цезаря, равный 3, то сдвинем латинский алфавит так, чтобы он начинался с третьей буквы (D).

Итак, беря исходный вариант

ABCDEFGHIJKLMNOPQRSTUVWXYZ,

и смещая всё на 3, получаем

DEFGHIJKLMNOPQRSTUVWXYZABC,

где D=A, E=B, F=C, и т.д.

Используя эту схему, открытый текст «SECRET» превращается в «VHFUHW». Чтобы кто-то мог восстановить исходный текст, вы сообщаете ему, что ключ – 3.

Очевидно, что по сегодняшним меркам это чрезвычайно слабый алгоритм, тем не менее, даже он помогал Цезарю! И прекрасно демонстрирует, как действует симметричное шифрование.

Симметричное шифрование и управление ключами

Симметричное шифрование имеет ряд преимуществ. Первое – скорость криптографических операций. Оно особенно полезно для шифрования данных, которые остаются у вас. Однако, симметричное шифрование, применяемое само по себе как средство защиты пересылаемых ценных данных, может оказаться весьма затратным просто из-за сложности передачи тайного ключа.

Вспомните персонажа из вашего любимого шпионского фильма: человек с запечатанным кейсом, пристёгнутым наручником к руке. Как вы считаете, что в этом кейсе? Едва ли в нём коды запуска ракет / формула химического оружия / планы вторжения, как таковые. Вероятнее, там – ключ, который расшифрует секретную информацию.

Для установления криптографированной связи с помощью симметричного алгоритма, отправителю и получателю нужно предварительно согласовать ключ и держать его в тайне. Если они находятся в географически удалённых местах, то должны прибегнуть к помощи доверенного посредника, например, надёжного курьера, чтобы избежать компрометации ключа в ходе транспортировки. Злоумышленник, перехвативший ключ в пути, сможет позднее читать, изменять и подделывать любую информацию, зашифрованную или заверенную этим ключом. Глобальная проблема симметричных шифров (от Кольца-декодера капитана Миднайта до DES и AES) состоит в сложности управления ключами: как вы доставите ключ получателю без риска, что его перехватят?

Криптография с открытым ключом

Проблема управления ключами была решена криптографией с открытым, или асимметричным, ключом, концепция которой была предложена Уитфилдом Диффи и Мартином Хеллманом в 1975 году 3.

Криптография с открытым ключом – это асимметричная схема, в которой применяются пары ключей: открытый (public key), который зашифровывает данные, и соответствующий ему закрытый (private key), который их расшифровывает. Вы распространяете свой открытый ключ по всему свету, в то время как закрытый держите в тайне. Любой человек с копией вашего открытого ключа может зашифровать информацию, которую только вы сможете прочитать. Кто угодно. Даже люди, с которыми вы прежде никогда не встречались.

Хотя ключевая пара математически связана, вычисление закрытого ключа из открытого в практическом плане невыполнимо. Каждый, у кого есть ваш открытый ключ, сможет зашифровать данные, но не сможет их расшифровать. Только человек, обладающим соответствующим закрытым ключом может расшифровать информацию.



Главное достижение асимметричного шифрования в том, что оно позволяет людям, не имеющим существующей договорённости о безопасности, обмениваться секретными сообщениями. Необходимость отправителю и получателю согласовывать тайный ключ по специальному защищённому каналу полностью отпала. Все коммуникации затрагивают только открытые ключи, тогда как закрытые хранятся в безопасности. Примерами криптосистем с открытым ключом являются Elgamal (названная в честь автора, Тахира Эльгамаля), RSA (названная в честь изобретателей: Рона Ривеста, Ади Шамира и Леонарда Адлмана), Diffie-Hellman (названная, правильно, в честь её создателей) и DSA, Digital Signature Algorithm (изобретённый Дэвидом Кравицом).

Поскольку симметричная криптография была некогда единственным способом пересылки секретной информации, цена надёжных каналов для обмена ключами ограничивала её применение только узким кругом организаций, которые могли её себе позволить, в частности, правительствами и крупными банковскими учреждениями (или маленькими детьми с Секретными кольцами-декодерами). Появление шифрования с открытым ключом стало технологической революцией, предоставившей стойкую криптографию массам. Помните курьера с кейсом, пристёгнутым к руке? Шифрование с открытым ключом отправило его на покой (к его же благу, вероятно).

Как действует PGP

PGP объединяет в себе лучшие стороны симметричной криптографии и криптографии с открытым ключом. PGP – это гибридная криптосистема.

Когда пользователь зашифровывает данные с помощью PGP, программа для начала их сжимает. Сжатие сокращает время модемной передачи и экономит дисковое пространство, а также, что более важно, повышает криптографическую стойкость. Большинство криптоаналитических техник основано на статистическом анализе шифртекста в поисках признаков открытого текста. Сжатие уменьшает число таких признаков (снижает избыточность данных), чем существенно усиливает сопротивляемость криптоанализу. (Слишком короткие файлы и файлы, которые не сжимаются достаточно хорошо, не сжимаются вовсе.)

Затем, PGP создаёт сеансовый ключ, т.е. одноразовый симметричный ключ, применяемый только для одной операции. Этот сеансовый ключ представляет собой псевдослучайное число, сгенерированное от случайных движений мышки и нажатий клавиш. Сеансовый ключ работает на основе очень надёжного, быстрого симметричного алгоритма, которым PGP зашифровывает сжатое сообщение; в результате получается шифртекст. Как только данные зашифрованы, сеансовый ключ также шифруется, но уже открытым ключом получателя. Этот зашифрованный открытым ключом сеансовый ключ прикрепляется к шифртексту и передаётся вместе с ним получателю.



Расшифрование происходит в обратном порядке. PGP получателя использует его закрытый ключ для извлечения сеансового ключа из сообщения, которым шифртекст исходного послания восстанавливается в открытый текст.



Таким образом, комбинация этих двух криптографических методов объединяет удобство шифрования открытым ключом со скоростью работы симметричного алгоритма. Симметричное шифрование в тысячи раз быстрее асимметричного. Шифрование открытым ключом, в свою очередь, предоставляет простое решение проблемы управления ключами и передачи данных. Используемые совместно, скорость исполнения и управление ключами взаимно дополняются и улучшаются без какого-либо ущерба безопасности.

Ключи

Ключ – это некоторая величина, которая, работая в сочетании с криптоалгоритмом, производит определённый шифртекст. Ключи, как правило, – это очень-очень-очень большие числа. Размер ключа измеряется в битах; число, представляющее 2048-битовый ключ, чертовски большое. В асимметричной криптографии, чем больше ключ, тем защищённей полученный шифртекст.

Однако, размер асимметричного ключа и размер симметричного тайного ключа, абсолютно несопоставимы. Симметричный 80-битовый ключ эквивалентен в стойкости 1024-битовому открытому ключу. Симметричный 128-битовый ключ примерно равен 3000-битовому открытому. Опять же, больше ключ – выше надёжность, но механизмы, лежащие в основе каждого из типов криптографии совершенно различны, и сравнивать их ключи в абсолютных величинах недопустимо.

Несмотря на то, что ключевая пара математически связана, практически невозможно из открытого вычислить закрытый; в то же время, вычисление закрытого ключа всегда остаётся возможным, если располагать достаточным временем и вычислительными мощностями. Вот почему критически важно создавать ключ верной длины: достаточно крупный, чтобы был надёжным, но достаточно малый, чтобы оставался быстрым в работе. Для этого подумайте и оцените, кто может попытаться «прочитать ваши файлы», насколько они могут быть упорны, скольким временем располагают, каковы их ресурсы.

Более крупные ключи будут криптографически защищены больший промежуток времени. Если то, что вы хотите зашифровать, должно храниться в тайне многие-многие годы, вам, возможно, следует воспользоваться очень большим ключом. Кто знает, сколько потребуется времени, чтобы вскрыть ваш ключ, используя завтрашние более быстрые, более эффективные компьютеры? Было время, когда 56-битовый симметричный ключ DES считался крайне надёжным.

По современным представлениям 128-битовые симметричные ключи совершенно надёжны и не подвержены взлому, по крайней мере до тех пор, пока кто-то не построит функционирующий квантовый суперкомпьютер. 256-битовые ключи по оценкам криптологов не могут быть взломаны даже теоретически и даже на гипотетическом квантовом компьютере. Именно по этой причине алгоритм AES поддерживает ключи длиной 128 и 256 бит. Однако история учит нас тому, что все эти заверения спустя пару десятилетий могут оказаться пустой болтовнёй.

PGP хранит ключи в зашифрованном виде. Они содержатся в двух файлах на жёстком диске; один файл для открытых ключей, другой – для закрытых. Эти файлы называются связками (keyrings). Используя PGP, вы, время от времени, будете добавлять открытые ключи своих корреспондентов на связку открытых. Ваши закрытые ключи находятся на связке закрытых. Если вы потеряете (удалите) связку закрытых ключей, то уже никаким образом не сможете расшифровать информацию, зашифрованную для ключей с этой связки. Следовательно, сохранение пары резервных копий этого файла является полезной практикой.

Цифровые подписи

Дополнительное преимущество от использования криптосистем с открытым ключом состоит в том, что они предоставляют возможность создания электронных цифровых подписей (ЭЦП). Цифровая подпись позволяет получателю сообщения убедиться в аутентичности источника информации (иными словами, в том, кто является автором информации), а также проверить, была ли информация изменена (искажена), пока находилась в пути. Таким образом, цифровая подпись является средством авторизации и контроля целостности данных. Кроме того, ЭЦП несёт принцип неотречения, который означает, что отправитель не может отказаться от от факта своего авторства подписанной им информации. Эти возможности столь же важны для криптографии, как и секретность.

ЭЦП служит той же цели, что печать или собственноручный автограф на бумажном листе. Однако вследствие своей цифровой природы ЭЦП превосходит ручную подпись и печать в ряде очень важных аспектов. Цифровая подпись не только подтверждает личность подписавшего, но также помогает определить, было ли содержание подписанной информации изменено. Собственноручная подпись и печать не обладают подобным качеством, кроме того, их гораздо легче подделать. В то же время, ЭЦП аналогична физической печати в том плане, что, как печать может быть проставлена любым человеком, получившим в распоряжение печатку, так и цифровая подпись может быть сгенерирована кем угодно с копией нужного закрытого ключа 4.

Некоторые люди используют цифровую подпись гораздо чаще шифрования. Например, вы можете не волноваться, если кто-то узнает, что вы только что поместили $1000 на свой банковский счёт, но вы должны быть абсолютно уверены, что производили транзакцию через банковского кассира.

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



Хэш-функция

Однако описанная выше схема имеет ряд существенных недостатков. Она крайне медлительна и производит слишком большой объём данных – по меньшей мере вдвое больше объёма исходной информации. Улучшением такой схемы становится введение в процесс преобразования нового компонента – односторонней хэш-функции. Одностороняя хэш-функция берёт ввод произвольной длины, называемый прообразом, – в данном случае, сообщение любого размера, хоть тысячи или миллионы бит – и генерирует строго зависящий от прообраза вывод фиксированной длины, допустим, 160 бит. Хэш-функция гарантирует, что если информация будет любым образом изменена – даже на один бит, – в результате получится совершенно иное хэш-значение.

В процессе цифрового подписания PGP обрабатывает сообщение криптографически стойким односторонним хэш-алгоритмом. Эта операция приводит к генерации строки ограниченной длины, называемой дайджестом сообщения (message digest) 5. (Опять же, любое изменение прообраза приведёт к абсолютно иному дайджесту.)

Затем PGP зашифровывает полученный дайджест закрытым ключом отправителя, создавая «электронную подпись», и прикрепляет её к прообразу. PGP передаёт ЭЦП вместе с исходным сообщением. По получении сообщения, адресат при помощи PGP заново вычисляет дайджест подписанных данных, расшифровывает ЭЦП открытым ключом отправителя, тем самым сверяя, соответственно, целостность данных и их источник; если вычисленный адресатом и полученный с сообщением дайджесты совпадают, значит информация после подписания не была изменена. PGP может как зашифровать само подписываемое сообщение, так и не делать этого; подписание открытого текста без зашифрования полезно в том случае, если кто-либо из получателей не заинтересован или не имеет возможности сверить подпись (допустим, не имеет PGP).

Если в механизме формирования ЭЦП применяется стойкая односторонняя хэш-функция, нет никакого способа взять чью-либо подпись с одного документа и прикрепить её к другому, или же любым образом изменить подписанное сообщение. Малейшее изменение в подписанном документе будет обнаружено в процессе сверки ЭЦП.



ЭЦП играют важнейшую роль в удостоверении и заверении ключей других пользователей PGP.

Цифровые сертификаты

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

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

Цифровые сертификаты ключей упрощают задачу определения принадлежности открытых ключей предполагаемым владельцам.

Сертификат есть форма удостоверения. Иные виды удостоверений включают ваши водительские права, государственный паспорт, свидетельство о рождении, и т.п. Каждое из них несёт на себе некоторую идентифицирующую вас информацию и определённую неподделываемую запись, что кто-то другой (госструктура, частное лицо) установил вашу личность. Некоторые сертификаты, такие как паспорт, – самодостаточное подтверждение вашей личности; будет довольно скверно, если кто-то похитит его, чтобы выдать себя за вас.

Цифровой сертификат в своём предназначении аналогичен физическому. Цифровой сертификат ключа – это информация, прикреплённая к открытому ключу пользователя, помогающая другим установить, является ли ключ подлинным и верным. Цифровые сертификаты нужны для того, чтобы сделать невозможной попытку выдать ключ одного человека за ключ другого.

Цифровой сертификат состоит из трёх компонентов:

открытого ключа, к которому он приложен;
данных, или записей, сертификата (сведения о личности пользователя, как то, имя, электронная почта и т.п., а также, по необходимости, дополнительные ограничителельные сведения: права допуска, рабочие лимиты и прочее);
одной или нескольких цифровых подписей, «связывающих» ключ с сертификатом.
Цель ЭЦП на сертификате – указать, что сведения сертификата были заверены доверенным третьим лицом или организацией. В то же время цифровая подпись не подтверждает достоверность сертификата как целого; она является поручительством только того, что подписанная запись сертификата (идентифицирующая информация) связаны с данным открытым ключом.

Таким образом, сертификат, обычно, – это открытый ключ с прикреплёнными к нему одной или несколькими формами ID плюс отметка подтверждения от доверенного лица, «связывающая» ID и открытый ключ.



Распространение сертификатов

Сертификаты применяются, когда нужно обменяться с кем-нибудь ключами. Небольшим группам людей, нуждающимся в защищённой связи, не составит труда просто передать друг другу дискеты или отправить электронные письма, содержащие копии их ключей.

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

Такая система может реализоваться в форме простого хранилища-депозитария, называемого сервером сертификатов, или сервером-депозитарием открытых ключей, или иметь более сложную и комплексную структуру, предполагающую дополнительные возможности администрирования ключей, и называемую инфраструктурой открытых ключей (Public Key Infrastructure, PKI).

Серверы-депозитарии

Сервер-депозитарий, также называемый сервером сертификатов, или сервером ключей, – это сетевая база данных, позволяющая пользователям оставлять и извлекать из неё цифровые сертификаты. Сервер ключей также может иметь некоторые функции администрирования, помогающие организации поддерживать свою политику безопасности. Например, на хранение могут оставляться только ключи, удовлетворяющие определённым критериям.

Инфраструктуры открытых ключей (PKI)

PKI, как и простой сервер-депозитарий, имеет базу данных для хранения сертификатов, но, в то же время, предоставляет сервисы и протоколы по управлению открытыми ключами. В них входят возможности выпуска (издания), отзыва (аннулирования) и системы доверия сертификатов. Главной же особенностью PKI является наличие компонентов, известных как Центр сертификации (Certification Authority, CA) и Центр регистрации (Registration Authority, RA).

Центр сертификации (ЦС) издаёт цифровые сертификаты и подписывает их своим закрытым ключом. Из-за важности своей роли, ЦС является главным компонентом инфраструктуры PKI. Используя открытый ключ ЦС, любой пользователь, желающий проверить подлинность конкретного сертификата, сверяет подпись Центра сертификации и, следовательно, удостоверяется в целостности содержащейся в сертификате информации и, что более важно, во взаимосвязности сведений сертификата и открытого ключа.

Как правило, Центром регистрации (ЦР) называется система людей, механизмов и процессов, служащая целям зачисления новых пользователей в структуру PKI и дальнейшего администрирования постоянных пользователей системы. Также ЦР может производить «веттинг» – процедуру проверки того, принадлежит ли конкретный открытый ключ предполагаемому владельцу.

ЦР – это человеческое сообщество: лицо, группа, департамент, компания или иная ассоциация. С другой стороны, ЦС – обычно, программа, выдающая сертификаты своим зарегистрированным пользователям. Существуют и защищённые от взлома аппаратные реализации ЦС, сооружённые из пуленепробиваемых материалов и снабжённые «красной кнопкой», аннулирующей в критической ситуации все выданные ключи.

Роль ЦР-ЦС аналогична той, что выполняет государственный паспортный отдел: одни его сотрудники проверяют, требуется ли выдача паспорта (работа ЦР), а другие изготовляют сам документ и передают его владельцу (работа ЦС). Наличие ЦР для ЦС не обязательно, но оно обеспечивает разделение функций, которое иногда необходимо.

Формат сертификатов

Цифровой сертификат – это набор идентифицирующих сведений, связанных с открытым ключом и подписанных доверенным третьим лицом, дабы доказать их подлинность и взаимосвязность. Сертификат может быть представлен множеством различных форматов.

PGP поддерживает два формата сертификатов:

Сертификаты OpenPGP (чаще называемые просто ключами PGP)
Сертификаты X.509
Формат сертификата PGP

Сертификат PGP содержит, в частности, следующие сведения:

Открытый ключ владельца сертификата – открытая часть ключевой пары и её алгоритм: RSA v4, RSA Legacy v3, DH или DSA.
Сведения о владельце сертификата – информация, идентифицирующая личность пользователя: его имя, адрес электронной почты, номер ICQ, фотография и т.д.
ЭЦП владельца сертификата – подпись ключевой пары, связанной с сертификатом (т.н. автоподпись).
Период действия сертификата – дата начала действия сертификата и дата окончания его действия; указывает на то, когда сертификат станет недействительным (аналогично сроку действия водительских прав). Если ключевая пара содержит дополнительные подключи шифрования, то здесь будет указан период действия каждого из них.
Предпочтительный алгоритм шифрования – указывает на то, зашифрованную каким алгоритмом информацию предпочитает получать владелец сертификата. Поддерживаются следующие: CAST, AES, IDEA, Triple-DES и Twofish.
Вы можете представить сертификат PGP в виде открытого ключа с одной или несколькими привязанными к нему «бирками» (рис. 9). На этих «бирках» указана информация, идентифицирующая владельца ключа, а также подпись этого ключа, подтверждающая, что ключ и идентификационные сведения взаимосвязаны. (Этот вид подписи называется автоподписью (self-signature); её содержит каждый PGP-сертификат.)



Уникальный аспект формата сертификатов PGP в том, что каждый сертификат может содержать множество подписей. Любой человек может подписать идентификационно-ключевую пару, чтобы заверить, полагаясь на своё личное убеждение, что открытый ключ принадлежит именно указанному в ID пользователю. Если поищите на общественных серверах-депозитариях, то можете обнаружить некоторые ключи, как, например, принадлежащий автору PGP Филу Циммерману, содержащие огромное количество подписей.

Некоторые PGP-сертификаты состоят из открытого ключа с несколькими «бирками», каждая из которых содержит собственные сведения, идентифицирующие владельца ключа (например, имя владельца и его рабочий e-mail, прозвище владельца и его домашний e-mail, фотография владельца – всё на одном сертификате). Список подписей на каждой из «бирок» может быть различным; подписи указывают на достоверность определённой «бирки» и её принадлежность открытому ключу, а не на то, что все «бирки» достоверны. (Учтите, что «достоверность» зависит от установившего её: подписи – это мнения, и разные люди уделяют разную степень внимания проверке подлинности перед подписанием ключа.)

Формат сертификата Х.509

Х.509 – это другой очень распространённый формат. Все сертификаты Х.509 соответствуют международному стандарту ITU-T X.509; таким образом (теоретически), сертификат Х.509, созданный для одного приложения, может быть использован в любом другом, поддерживающим этот стандарт. На практике, однако, сложилась ситуация, что разные компании создают собственные расширения для Х.509, не все из которых между собой совместимы.

Всякий сертификат требует, чтобы кто-то заверил взаимосвязность открытого ключа и идентифицирующей владельца ключа информации. Имея дело с PGP-сертификатом, каждый может выступать в качестве заверителя содержащихся в нём сведений (за исключением случаев, когда эта возможность намеренно ограничена политикой безопасности). Но в случае сертификатов Х.509 заверителем может быть только Центр сертификации или некто, специально уполномоченный им на эту роль. (Имейте в виду, что PGP-сертификаты также в полной мере поддерживают иерархическое структурирование системы доверия, использующее ЦС для удостоверения сертификатов.)

Сертификат Х.509 – это набор стандартных полей, содержащих сведения о пользователе или устройстве, и их соответствующий открытый ключ. Стардарт Х.509 определяет, какие сведения входят в сертификат и как они кодируются (формат данных).

Сертификат Х.509 содержит следующие сведения:

Версия Х.509 – указывает, на основе какой версии стандарта Х.509 построен данный сертификат, что определяет, какая информация может в нём содержаться.
Открытый ключ владельца сертификата – открытый ключ наряду с идентификатором используемого алгоритма (указывающим криптосистему, к которой принадлежит данный ключ) и прочая информация о параметрах ключа.
Серийный номер сертификата – организация-издатель сертификата обязана присвоить ему уникальный серийным (порядковый) номер для его опознавания среди прочих сертификатов, выданных данной организацией. Эта информация применяется в ряде случаев; например, при аннулировании сертификата, его серийный номер помещается в реестр аннулированных сертификатов (Certificate Revocation List, CRL).
Уникальный опознаватель владельца ключа (или DN, distinguished name – уникальное имя) – это имя должно быть уникальным и единственным во всём Интернете. DN состоит из нескольких подпунктов и может выглядеть примерно так:
CN=Bob Davis, EMAIL=bdavis@pgp.com, OU=PGP Engineering,
O=PGP Corporation, C=US
(Что обозначает Понятное имя субъекта, Электронную почту, Подразделение организации, Органицию и Страну соответственно.)

Период действия сертификата – дата начала действия сертификата и дата окончания его действия; указывает на то, когда сертификат станет недействителен.
Уникальное имя издателя – уникальное имя организации, подписавшей сертификат. Обычно, это наименование Центра сертификации. Использование сертификата подразумевает доверие организации, его подписавшей. (В случаях с корневыми сертификатами выдавшая организация – этот же ЦС – подписывает его сама.)
ЭЦП издателя – электронная подпись, созданная закрытым ключом организации, выдавшей сертификат.
Идентификатор алгоритма подписи – указывает алгоритм, использованный ЦС для подписания сертификата.
Существует ряд фундаментальных различий между форматами сертификатов Х.509 и PGP:

вы можете лично создать собственный сертификат PGP; вы должны запросить и получить сертификат Х.509 от Центра сертификации;
сертификаты Х.509 содержат только одно имя владельца сертификата;
сертификаты Х.509 содержат только одну ЭЦП, подтверждающую подлинность сертификата.
Чтобы получить сертификат Х.509, вы должны попросить ЦС выдать его вам. Вы предоставляете системе свой открытый ключ, чем доказываете, что обладаете соответствующим закрытым, а также некоторые идентифицирующие вас сведения. Затем вы электронно подписываете эти сведения и отправляете весь пакет – запрос сертификата – в Центр сертификации. ЦС выполняет определённый процесс по проверке подлинности предоставленной информации и, если всё сходится, создаёт сертификат, подписывает и возвращает вам.

Вы можете представить сертификат Х.509, как обычный бумажный сертификат или аттестат с приклеенным к нему открытым ключом. На нём указано ваше имя, а также некоторые сведения о вас, плюс подпись издателя сертификата.



Вероятно, наибольшая польза от сертификатов Х.509, это их применение в Веб-браузерах.

Подлинность и доверие

Любой пользователь в среде криптосистем с открытым ключом рискует рано или поздно принять по неострожности поддельный ключ (сертификат) за настоящий. Достоверность (подлинность) есть убеждённость в том, что конкретный открытый ключ принадлежит предполагаемому владельцу, чья идентификационная информация указана в сертификате ключа. Подлинность является одним из важнейших критериев в среде системы открытых ключей, где вы должны определять аутентичность каждого конкретного сертификата.

Убедившись, что чужой открытй ключ достоверен (т.е. действительно принадлежит именно предполагаемому владельцу), вы можете подписать копию этого ключа на своей связке, чем засвидетельствуете факт, что вы его проверили и нашли достоверным. Если захотите, чтобы другие знали вашу степень доверия этому сертификату, вы можете экспортировать свою подтверждающую подпись на сервер-депозитарий с тем, чтобы другие могли её видеть и могли на неё положиться при определении подлинности этого ключа.

Как было описано в параграфе «Инфраструктуры открытых ключей (PKIs)», некоторые компании уполномочивают один или несколько Центров сертификации (ЦС) на проверку подлинности сертификатов. В организации, использующей PKI с сертификатами Х.509, задача Центров регистрации состоит в приёме запросов на сертификаты, а задача Центров сертификации – в выдаче сертификатов конечным пользователям: процесс ответа на запрос пользователя на получение сертификата. В организации, использующей сертификаты PGP без PKI, задача ЦС – в проверке достоверности всех PGP-сертификатов и подписании подлинных. Как правило, основная цель ЦС – собственной подписью «связать» открытый ключ с идентификационной информацией, содержащейся в сертификате, чем заверить третьих лиц, что были приняты определённые меры по установлению связи между ключом и идентификационными сведениями.

Центр сертификации в организации – это краеугольный камень системы подлинности и доверия; в некоторых организациях, как, например, в тех, которые используют PKI, ни один сертификат не считается подлинным, пока не будет подписан доверенным ЦС.

Проверка подлинности

Один из способов определения подлинности сертификата – некоторая механическая процедура. Существует несколько методик её проведения. Например, вы можете попросить своего корреспондента передать копию его открытого ключа «физически», т.е. вручить на жёстком носителе – магнитном или оптическом диске и т.п. Но зачастую это бывает неудобно и неэффективно.

Другой вариант – сверить отпечаток (fingerprints) сертификата. Насколько уникальны отпечатки пальцев людей, настолько же уникальны и отпечатки каждого сертификата PGP. Отпечаток – это хэш-значение сертификата пользователя, которое показано как одно из его свойств. В PGP отпечаток может быть представлен или как шестнадцатеричное число, или как набор т.н. биометрических слов, фонетически чётких и применяемых для упрощения вербальной идентификации отпечатка.

Вы можете определить подлинность сертификата позвонив владельцу ключа (таким образом, что вы начнёте коммуникацию) и попросив его прочитать отпечаток с его ключа; вам же нужно сверить этот отпечаток против того, который находится на полученной вами копии. Такой способ допустим, если вам знаком голос корреспондента, но как вы установите личность того, с кем даже незнакомы? Некоторые с этой целью помещают отпечатки ключей на свои визитные карточки.

Ещё один метод определения подлинности чужого сертификата – положиться на мнение третьей стороны, уже установившей его подлинность.

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

Параллельный аспект проверки подлинности и достоверности состоит в том, чтобы убедиться, что сертификат не был аннулирован (отозван). За дополнительной информацией по этому вопросу обращайтесь к параграфу «Аннулирование сертификата».

Установление доверия

Вы сами удостоверяете сертификаты. Но вы также доверяете людям. Поэтому вы можете доверить людям и право удостоверять сертификаты. Как правило, если только владелец сам не вручил вам копию ключа, вы должны положиться на чьё-то чужое мнение о его подлинности.

Мета-поручители и доверенные поручители

В большинстве случаев пользователи полностью полагаются на ЦС в проверке подлинности сертификатов. Иными словами, пользователи убеждены, что ЦС провёл всю механическую процедуру проверки за них, и уверены в его поручительствах за подлинность заверенных им сертификатов. Такая схема работает только до некоторого предела в количестве пользователей PKI, перейдя который ЦС не сможет придерживаться прежнего уровня тщательности процедуры проверки. В этом случае становится необходимым добавление в систему дополнительных «поручителей».

ЦС также может быть мета-поручителем (мета-представителем). Мета-поручитель не только сам заверяет ключи, но предоставляет и другим лицам (организациям) полномочия заверения. По аналогии с тем, как король передаёт свою личную печать или факсимиле приближённым советникам, чтобы те могли действовать от его имени, так и мета-поручитель уполномочивает других действовать в качестве доверенных поручителей (доверенных представителей). Эти доверенные поручители могут удостоверять ключи с тем же результатом, что и мета-поручитель. Однако, они не могут создавать новых доверенных поручителей.

«Мета-поручитель» и «доверенный поручитель» – это термины PGP. В среде Х.509 мета-поручитель называется корневым Центром сертификации (root CA), а доверенные поручители – подчинёнными, или промежуточными, Центрами сертификации (subordinate CAs, intermediate CAs).

Корневой ЦС для подписания ключей использует закрытый ключ, связанный с особым типом сертификата, называемым корневым сертификатом ЦС. Любой сертификат, подписанный корневым ключом ЦС, становится достоверным любому другому сертификату, подписанному корневым. Такой процесс удостоверения действует даже для сертификатов, подписанных другим ЦС в [связанной] системе – если ключ промежуточного ЦС подписан ключом корневого ЦС, любой сертификат подписанный первым расценивается верным в пределах иерархии. Этот процесс отслеживания вдоль ветвей иерархии того, кто подписал какие сертификаты, называется отслеживанием пути, или цепи, сертификатов.

Модели отношений доверия

В относительно закрытых системах, таких как небольшие организации и фирмы, можно без труда отследить путь сертификата назад к корневому ЦС. Однако, пользователям зачастую приходится связываться с людьми за пределами их корпоративной среды, включая и таких, с которыми они прежде никогда не встречались, например, с поставщиками, потребителями, клиентами и др. Установление линии доверия с теми, кто не был явно удостоверен ЦС, становится непростой задачей.

Организации следуют одной из нескольких моделей отношений доверия, которые диктуют пользователям их действия по определению подлинности сертификатов. Существуют три различные модели:

Прямое доверие
Иерархическое доверие
Сеть доверия (Web of Trust)
Прямое доверие

Прямое доверие – это простейшая из моделей отношений доверия. В этой схеме пользователь убеждён, что ключ подлинный, поскольку точно знает, от кого получил этот ключ. Все криптосистемы в той или иной мере используют эту форму доверия. Например, в веб-браузерах корневые ключи Центров сертификации доверяются напрямую, т.к. находились в дистрибутиве данного программного продукта. Если и существует какой-либо вид иерархии, то он распространяется из этих напрямую доверяемых сертификатов.

В PGP пользователь, заверяющий ключи самостоятельно, не прибегая к помощи доверенных поручителей, использует схему прямого доверия.



Иерархическое доверие

В иерархической системе существует ряд корневых сертификатов, от которых распросраняется доверие. Эти сертификаты могут либо сами заверять сертификаты конечных пользователей, либо они могут уполномочивать другие сертификаты, которые будут заверять сертификаты пользователей по некоторой цепи. Представьте, что это большое «дерево» доверия. Подлинность сертификатов-«листьев» (сертификатов конечных пользователей) определяется отслеживанием цепочки к их удостоверителям, а от них уже к удостоверителям этих удостоверителей, и так до тех пор, пока не будет найден напрямую доверяемый корневой сертификат.



Сеть доверия

Сеть доверия объединяет обе предыдущие модели, также привнося принцип, что доверие есть понятие субъективное (что соотносится с житейским представлением), и идею о том, что чем больше информации, тем лучше. Таким образом, это накопительная модель доверия. Сертификат может быть доверяем напрямую или доверяем по некоторой цепочке, уходящей к напрямую доверяемому корневому сертификату (мета-поручителю), или может быть заверен группой доверенных поручителей.

Возможно, вам знакомо понятие «шесть степеней разделения», означающее, что любой индивид может установить некоторую цепочку к любому другому индивиду на планете, используя шесть или менее человек в качестве посредников. Это – сеть представителей.

Таково же и представление PGP о доверии. PGP использует цифровые подписи как собственный вид поручительства. Когда один пользователь подписывает ключ другого, он становиться поручителем этого ключа (поручительствует за подлинность ключа и его принадлежность предполагаемому владельцу). Этот процесс, расширяясь, и образует сеть доверия.

В среде PGP любой пользователь может выступать в качестве центра сертификации. Каждый пользователь может заверить открытый ключ другого пользователя. Однако, такой сертификат будет расценен подлинным иным пользователем только тогда, когда последний признаёт заверителя своим доверенным поручителем. (Иными словами, вы доверяете моему мнению о подлинности других ключей, только если считаете меня своим доверенного поручителем. В противном случае, моя субъективная оценка подлинности чужих ключей для вас по меньшей мере неоднозначна.)

На связке открытых ключей каждого пользователя содержатся следующие показатели:

считает ли пользователь определённый ключ подлинным;
уровень доверия, предоставленный пользователем определённому ключу, с которым его владелец будет выступать поручителем в подлинности других ключей.
Вы указываете на своей копии моего ключа, насколько весомым считаете моё мнение о подлинности подписанных мною ключей. Это исключительно система репутации: некоторые пользователи известны тем, что тщательно проверяют ключи и дают хорошие подписи, которым люди доверяют как безоговорочному показателю подлинности.

Степени доверия в PGP

Наивысший уровень доверия – безусловное доверие (Implicit Trust) – это доверие вашей собственной ключевой паре. PGP полагает, что если вы владеете закрытым ключом, то должны доверять и действиям соотвествующего открытого. Все ключи, подписанные вашим безусловно доверяемым, для вас верны и подлинны.

Существует три степени доверия, которые вы можете присвоить чужому открытому ключу:

Полное доверие
Частичное доверие
Нет доверия
Чтобы ещё более всё запутать, существует также три уровня подлинности:

Подлинный
Возможно подлинный
Неопределённый
Чтобы дать другому ключу полномочия поручительства, вы:

Берёте подлинный ключ, который
либо подписан вами,
либо иным доверенным поручителем, и затем

Устанавливаете уровень доверия, которого, как вам кажется, заслуживает владелец.
Для примера представим, что на вашей связке есть ключ Алисы. Вы определили подлинность её ключа и, подписывая его, указываете на это. Вам известно, что Алиса – активный сторонник тщательной проверки чужих ключей. Поэтому вы наделяете её Полным доверием, что, фактически, превращает её в Центр сертификации: если Алиса подпишет чужой ключ, он будет верным на вашей связке априори.

PGP требует одну Полностью доверяемую или две Частично доверяемых подписи, чтобы установить ключ как подлинный. Метод PGP приравнивания двух Частичных к одной Полной аналогичен тому, как иногда от вас требуют два вида документов, удостоверяющих личность. Вы можете посчитать Алису частично надёжной, также посчитать Боба частично заслуживающим доверия. Есть риск, что каждый из них в отдельности может случайно подписать липовый ключ, так что вы, вероятно, не станете предоставлять Полного доверия ни одному. Однако, вероятность того, что оба они подпишут один и тот же липовый ключ, довольно мала.

Аннулирование сертификата

Применение сертификата допустимо только пока он достоверен. Опасно полагаться на то, что сертификат будет защищён и надёжен вечно. В большинстве организаций и во всех PKI сертификат имеет ограниченный срок «жизни». Это сужает период, в который система может оказаться под угрозой, если сертификат будет взломан.

Таким образом, сертификат создаётся с определённым заданным периодом достоверности, начинающимся с даты создания и заканчивающимся датой истечения (аналогично сроку годности пищевых продуктов или действию водительских прав). Сертификат может быть использован в течение всего периода действия, по истечении которого перестаёт быть верным, поскольку достоверность его идентификационно-ключевой пары более не может быть гарантирована. (Тем не менее, сертификат по-прежнему может применяться для подтверждения информации, зашифрованной или подписанной им ранее в течение периода жизни; однако он становится неприменим для будущих криптографических нужд.)

Но иногда появляется потребность сделать сертификат недействительным до истечения срока его жизни, например, в случае увольнения владельца сертификата с настоящего места работы или когда у владельца возникает подозрение, что закрытый ключ данного сертификата был скомпрометиран. Такой процесс называется отзывом или аннулированием. Аннулированный сертификат гораздо более подозрителен, нежели истекший. Истекший сертификат более непригоден к использованию, однако, не несёт такой угрозы скомпрометированности, как аннулированный.

Любой пользователь, заверивший сертификат (поручившийся за взаимосвязность ключа и сведений сертификата), в любой момент может отозвать с него свою подпись, используя тот же закрытый ключ, которым её создавал. Отозванная подпись указывает на то, что заверитель счёл, что открытый ключ и идентификационная информация более не связаны друг с другом, или что открытый ключ сертификата (или соотвествующий закрытый) был скомпрометирован. Отозванная подпись имеет практически такое же значение, как и аннулированный сертификат.

В случае сертификатов Х.509 отозванная подпись фактически представляет то же самое, что и аннулированный сертификат, поскольку вообще лишь одна подпись была поручительством подлинности сертификата – подпись Центра сертификации. PGP предоставляет дополнительную возможность аннулирования всего сертификата (а не только подписей на нём), если вы вдруг посчитаете, что он был каким-либо образом скомпрометирован.

Только владелец сертификата (обладатель соотвествующего закрытого ключа) или некто, специально уполномоченный владельцем (т.н. «доверенный отменитель», designated revoker), может аннулировать PGP-сертификат. (Доверение третьему лицу функции аннулирования весьма полезно, т.к. потеря пароля к закрытому ключу, которая зачастую и служит поводом к аннулированию, делает исполнение этой процедуры самим владельцем сертификата невозможной.) Сертификат Х.509 может быть отозван только его издателем – ЦС – по запросу владельца.

Уведомление об аннулировании сертификата

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

В среде PKI уведомление об аннулировании сертификатов осуществляется посредством специального механизма, называемого реестром аннулированных сертификатов (Certificate Revocation List, CRL), публикуемого Центром сертификации. CRL содержит датируемый, заверенный список всех аннулированных непросроченных сертификатов системы. Аннулированные сертификаты остаются в списке только до момента своего фактического истечения, после чего удаляются оттуда – это предотвращает бесконечное разрастание списка.

ЦС обновляет CRL через регулярные промежутки времени. Теоретически, это должно свести к минимуму риск непреднамеренного использования аннулированного сертификата. Хотя, всё же остаётся вероятность случайного применения скомпрометированного сертификата во временном промежутке между публикациями CRL.

Что такое ключевая фраза

Большинству пользователей знаком метод ограничения доступа к компьютеру или компьютерным ресурсам при помощи пароля, который представляет собой уникальную последовательность символов, вводимую как идентификационный код.

Ключевая фраза – это более длинный, сложный и, теоретически, более надёжный вариант пароля. Обычно состоящая из нескольких слов, ключевая фраза гораздо надёжней против стандартных атак «по словарю», в ходе которых взломщик перебирает все слова из словаря в попытке угадать ваш пароль. Наилучшие ключевые фразы довольно длинны и комплексны, содержат как заглавные, так и строчные буквы, а также цифры, знаки препинания и прочие символы.

PGP использует ключевую фразу чтобы зашифровать ваш закрытый ключ. Закрытый ключ хранится на диске, зашифрованный хэшем-значением ключевой фразы как симметричным тайным ключом. Вы же используете ключевую фразу, чтобы расшифровать и применять закрытый ключ. Ключевая фраза должна быть такой, чтобы вам её было трудно забыть, а другим – догадаться. Она должна быть чем-то, уже давно и надёжно хранящимся в долгосрочной памяти вашего мозга, а не придуманным с нуля. Почему? Потому что если вы забудете ключевую фразу – вы в большой беде. Закрытый ключ абсолютно и совершенно бесполезен без его ключевой фразы, и с этим ничего нельзя поделать. Помните цитату в начале этой главы? PGP – это криптография, которая не позволит правительствам могучих держав читать ваши файлы. И уж тем более она не позволит читать их вам. Учтите это, если вдруг решите изменить ключевую фразу на отрывок из анекдота, который никогда не могли толком запомнить.

Разделение ключа

Говорят, что секрет – это уже не секрет, когда его знают два человека. Разделение закрытого ключа опровергает такое мнение. Хотя это и не рекомендуемая практика, разделение закрытого ключа в определённых ситуациях бывает необходимо. Например, корпоративные ключи подписания (Corporate Signing Keys, CSK) – это особо важные закрытые ключи, используемые организацией, например, для заверения правовых документов, личной информации сотрудников или пресс-релизов для удостоверения авторства. В данном случае будет полезно, чтобы несколько членов компании имело доступ к закрытому ключу. Но это равно будет значить, что каждый из членов команды сможет свободно и в полной мере выступать от имени компании.

Решением подобной проблемы является разделение и распределение закрытого ключа между несколькими лицами таким образом, что для восстановления его в рабочее состояние нужно присутствие более одного или двух хранителей частей (долей) ключа. Если собрано слишком мало долей – ключ бесполезен.

Например, можно разделить ключ на три доли с требованием любых двух из них для реконструкции или разделить его на две доли с необходимостью использования обеих. Если для процедуры реконструкции применяется защищённое сетевое соединение, хранителям долей ключа не нужно присутствовать вместе в одной географической точке.



Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1