Ассиметричное шифрование
Один из трёх способов шифрования, заключающийся в использовании нескольких ( как правило, открытого и закрытого ) ключей для шифрования и дешифрования сообщений.
Начало ассиметричному шифрованию было положено в работе криптографов Уитфилда Диффи и Мартина Хеллмана " Новые направления в современной криптографии", опубликованной в 1976 году, где был предложен метод получения секретных ключей с использованием открытого ( незащищённого, доступного для наблюдения ) канала, который по сей день известен как протокол Диффи - Хеллмана.
В отличие от разобранных нами симметричных криптосистем, системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности в TLS и SSL ( лежат в основе HTML ), SSH, а также для подписи файлов в PGP и шифрования электронных сообщений S/MIME.
Как же работает ассиметричное шифрование ? Рассмотрим на примере двух собеседников - Алисе и Бобе, собирающихся обменяться сообщениями. Боб генерирует у себя два ключа - открытый ( О ) и закрытый ( З ). Ключ в данном случае - алгоритм, некий набор математических операций, позволяющий видоизменять шифруемое сообщение. Открытый ключ он посылает по открытому каналу, закрытый же оставляет у себя. Получив открытый ключ, Алиса шифрует им сообщение, которое хочет передать, и отправляет его по открытому каналу Бобу. Боб, в свою очередь, расшифровывает это сообщение своим закрытым ключом.
Вообще, выглядит странно. Как это, используя два разных ключа, собеседники понимают друг друга ? Что вообще происходит ?
Вся изюминка процесса в использовании идеи односторонних функций. Односторонняя функция предполагает, что по известному x довольно легко найти f(x), но вот из f(x) найти x - практически нереальная задача. Простым ( очень простым ) примером может служить возведение числа в квадрат и нахождение квадратного корня. Например, число 372 очень просто возвести в квадрат даже вручную, перемножив столбиком. Но вот чтобы найти квадратный корень числа 138 384, придётся изрядно попотеть, перебрав множество вариантов. Вот и в шифровании принцип совершенно тот же, только разрыв в сложности гораздо больше.
Но сама по себе односторонняя функция бесполезна в применении : ею можно зашифровать сообщение ( возведение в квадрат в примере ), но расшифровать нельзя ( извлечение квадратного корня ). Поэтому ассиметричное шифрование предполагает наличие в односторонней функции лазейки - некоего секрета, который помогает расшифровать. То есть, наличие такого y, что зная f(x) и y, можно вычислить x.
Касательно примера с Бобом и Алисой это выглядит так : Боб создаёт у себя f() с лазейкой y, затем f() передаёт Алисе. Алиса с помощью f() формирует f(x) и отправляет обратно Бобу, который с получает x из f(x), зная y.
Ещё одним примером, помогающим понять идеи и методы криптографии с открытым ключом, является хранение паролей в удалённом компьютере, к которому должны подключаться пользователи. Понятно дело, что хранить пароли пользователей в памяти удалённого компьютера, то их смогут похитить заинтересованные лица. Поэтому, в целях безопасности, при создании пользователем пароля, на сервере сохраняется не он сам, а результат вычислений над ним. К примеру, Боб придумал пароль "кабачок", результатом преобразований над которым пусть будет "петрушка". Вот он то и сохраняется в памяти компьютера. Когда Боб вводит свой секретный пароль "кабачок", компьютер проверяет, дают ли вычисления над ним результат "петрушка". Саму "петрушку" хранить на сервере безопасно, так как из неё получить обратно "кабачок" практически невозможно.
Вот так вот.