Асимметричная криптография. Проблемы и идеи
Проблемы, связанные с использованием симметричных шифров Симметричные алгоритмы обеспечивают эффективное решение многих задач. Однако в определенных ситуациях симметричные алгоритмы наталкиваются на свои внутренние ограничения. Мы рассмотрим эти проблемы и узнаем, как они решаются при помощи асимметричных алгоритмов.
Она проистекает из того факта, что обе общающиеся стороны должны получить секретный ключ, прежде чем смогут обмениваться сообщениями. Но в некоторых ситуациях обмен ключами невозможен, например, когда обмен происходит между сторонами, ранее не знавшими о существовании друг друга. Проблема распределения ключей
Проблема доверия Даже если секретные ключи распределены заранее, возникает еще одна проблема. Суть ее состоит в том, что невозможно различить двух корреспондентов, обладающих одинаковыми ключами. При отсутствии доверия между сторонами схема бесполезна. Также может возникнуть проблема, если корреспондент «поделится» с кем-то ключом, не ставя вас в известность. К счастью, асимметричная криптография решает эти проблемы.
Идеи асимметричной криптографии Идея состоит в замене секретного ключа парой математически связанных ключей, один из которых будет открытым, а второй – закрытым, доступным только тому, кто сгенерировал пару. Преимущества: Нет необходимости в заблаговременном распределении ключей Тайну ключа обеспечивает только одна сторона Не встает проблема доверия к другой стороне
Использование асимметричной криптографии Боб генерирует пару ключей. Он предоставляет открытый ключ всем желающим, включая Алису. Когда Алисе потребуется отправить Бобу секретную информацию, она зашифрует данные его открытым ключом. Боб расшифрует его закрытым ключом.
Односторонняя функция с «черным ходом» В основе алгоритмов, основанных на такой идее, лежит односторонняя функция – математическая функция, которая обладает сильной асимметрией с вычислительной точки зрения. Односторонняя функция, обратная функция которой вычисляется легко при наличии дополнительной информации, называется «односторонней функцией с черным ходом».
Преимущества асимметричного подхода: Секретный ключ хранится только у одной стороны => он никогда не передается по сети => асимметричная пара ключей может использоваться долгие годы Асимметричную схему можно использовать для электронной подписи Общее число потребных ключей в сети гораздо меньше, чем в случае симметричной схемы Преимущества симметричного подхода: Криптостойкость Скорость работы
Известные асимметричные алгоритмы RSA (назван в честь изобретателей – Rivest, Shamir, Adelman). Основывается на задаче разложения большого числа на простые сомножители. Можно использовать для шифрования и реализации электронной подписи. DSA (Digital Signature Algorithm) – может применяться только для реализации электронной подписи.
ElGamal (изобретатель – Taher El- Gamal). Основывается на задаче вычисления дискретного логарифма над конечным полем. ECC (Elliptic Curve Cryptography) – альтернативная алгебраическая система, предназначенная для реализации алгоритмов, основанная на особенных математических объектах, называемых эллиптическими кривыми над конечными полями. Эти 2 алгоритма в настоящее время не поддержаны в.NET.
Алгоритм RSA Схема работы: Вначале мы генерируем случайную пару ключей. Затем шифруем данные открытым ключом при помощи RSA. Наконец, дешифруем сообщение при помощи секретного ключа и убеждаемся в совпадении результата с исходным сообщением.
Последовательность шагов, необходимая для создания пары ключей RSA: 1. Выберем случайно два простых больших не равных друг другу числа p и q 2. Вычислим их произведение: n=p*q 3. Вычислим функцию Эйлера: φ=(p-1)*(q-1) 4. Уничтожаем числа р и q 5. Выбираем число е: е>1, e
Теперь зашифруем сообщение при помощи открытого ключа, предприняв следующее: 1. Возьмем положительное число m, представляющее собой фрагмент открытого текста, m
Наконец, расшифровать сообщение мы можем при помощи следующих действий: 1. Вычисляем открытый текст при помощи шифрованного текста, а также секретного ключа, по формуле: m = c^d(mod n) 2. Сравниваем полученное m с исходным и убеджаемся, что они равны.
Пример Пусть мы выбрали два простых числа p = 47, q = 73. Находим для них значения: n = 3431, φ = Выберем е = 425. Вычислим d = Полученное d сохраняем в секрете, а числа e и n делаем общедоступными. Теперь мы можем заниматься шифрованием и дешифрованием данных. Предположим, открытый текст = 707. Тогда шифрованный текст (по формуле) = 2142, при дешифровке мы опять получим 707.
int m = 707; //открытый текст int e = 425; //показатель шифрования int n = 3431; //модуль int c = 1; //шифрованный текст //шифрование: c = m^e(mod n) for(int i=0; i