Асимметричная криптография

Download Report

Transcript Асимметричная криптография

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