PDA

Просмотр полной версии : Принципы ассиметричного шифрования



stayer
26.01.2012, 18:14
Симметричное шифрование предполагает наличие шифрующего и расшифровывающего алгоритмов, которые должны быть у каждой стороны, ведущей шифрованное общение по открытому, наблюдаемому каналу связи. Такой вид криптозащиты требует предварительного обмена этими алгоритмами по надежно-скрытому каналу.

Ассиметричное шифрование позволяет обойтись* без скрытого канала, что является важным для удаленного сетевого общения. Пусть есть, без ограничения общности, два пользователя - Алиса и Боб, желающие общаться приватно. Алиса и Боб вырабатывают по паре ключей: открытый (публичный) ключ для зашифровки сообщений и закрытый (секретный) для их расшифровки. Алиса посылает* Бобу свой публичный ключ. Боб с помощью полученного публичного Алисиного ключа шифрует свой собственный публичный ключ и передает его Алисе. Алиса расшифровывает полученный Бобовский публичный ключ. Короче говоря, Алиса и Боб обмениваются публичными ключами, а секретные прячут у себя. Далее возможен обмен зашифрованными сообщениями: Алиса шифрует публичным ключом Боба, а Боб - публичным ключом Алисы.

http://ftp.comp.hkbu.edu.hk/.1/packages/pgpi/6.0/docs/french/html/Image38.gif

Общее математическое обоснование

Идея криптографии с публичным ключом связана с идеей односторонних функций, то есть таких функций f(x), что по известному x довольно просто найти значение f(x), тогда как определение x из f(x) сложно в смысле теории. Но сама односторонняя функция бесполезна в применении: ею можно зашифровать сообщение, но расшифровать нельзя. Поэтому криптография с открытым ключом использует односторонние функции с лазейкой. Лазейка — это некий секрет, который помогает расшифровать. То есть существует такой y, что зная f(x) и y, можно вычислить x. К примеру, если разобрать часы на множество составных частей, то очень сложно собрать вновь работающие часы. Но если есть инструкция по сборке (лазейка), то можно легко решить эту проблему.

Простейший пример открытого ассиметричного алгоритма шифровки. Пусть есть некий телефонный справочник, упорядоченный по именам, но не по телефонам. Пусть известно, что для зашифровки каждой буквы текста используется телефонный номер, соответствующий фамилии на ту же букву. Так, для шифровки слова "кал" подойдут последовательности "кац - 123", "абрамович - 456", "ленин - 666" или "киреенко - 000", "андропов - 007", "лужков - 740". Таким образом получим 2 шифрованных кала: 123456666 и 000007740. Зашифровать подобный текст очень легко может каждый, пользуясь алфавитным упорядочинием фамилий, сложность всего Log(N) операций перебора записей, где N общее число записей справочника. А вот расшифровать - крайне трудоемкая задача, требующая перебора N*M записей, где M - число букв шифруемого текста. Теперь предположим, что у Алисы есть секретное специздание справочника, в котором все отсортировано по телефонам, а не по фамилиям (составить его можно из публичного справочника за N*N операций, что сверхтрудоемко). Тогда Алиса может очень быстро все расшифровывать за Log(N) переборов. Одностороння функция здесь - поиск пар <фамилия - телефон> по публичному справочнику (публичному ключу), лазейка (секретный ключ) - секретный справочник. На практике используются гораздо более эффективные алгоритмы, чем вышеприведенный. Генерация ключевой пары может составлять несколько секунд, а для подбора секретного ключа могут потребоваться тысячи лет рабооты современных ЭВМ.

Наиболее известные алгоритмы ассиметричного шифрования входят в открытый международный стандарт криптозащиты OpenPGP. Открытой реализацией OpenPGP является проект GNU Privacy Guard (сокращенно GnuPG или GPG). Удачной прикладной программой на основе GnuPG является gpg4usb (http://forum.dpni.org/showthread.php?t=42239). Стойкость ко взлому шифра определяется как алгоритмом, так и длинной используемого ключа, например, для ключей типа RSA на сегодняшний момент рекомендуется выбирать длину не менее 2048 бит.

* При отправке Алисой публичного ключа Бобу по открытому каналу потенциально возможна следующая неприятность, называемая человеком-по-середине (MITM): третья сторона (ЖОП) может перехватить Алисин публичный ключ, подменить на свой подставной и послать Бобу, затем перехватить публичный ключ Боба (зашифрованный уже подставным ЖОПным ключом), опять подменить на свой и отправить Алисе. В итоге и Алиса и Боб будут, ничего не подозревая, шифровать все ЖОПным ключом. Для предотвращения этого используются слепки ключа. Смысл слепка. Пусть отправителю требуется передать документ, а принимающей стороне - убедиться в его подлинности и сохранности при передаче. Для этого создается слепок - уникальный идентификатор документа, сгенерированный из него же при помощи одной из общеизвестных односторонних функций. Объём слепка относительно мал, а создать другой документ с таким же слепком практически невозможно. Для подтверждения подлинности этот слепок передается Алисой Бобу по параллельным защищенным каналам или шифруется по схеме с сертифицированной ЭЦП и сверяется с тем, что получен из принятого документа при помощи той же самой односторонней функциии. Если оба слепка совпали, то документ подлинный. Подробнее по работе со слепками ... (http://forum.dpni.org/showthread.php?t=42238)