- •Электронная цифровая подпись
- •Электронная подпись на основе алгоритма rsa
- •Алгоритм rsa Основные сведения
- •Шифрование
- •Пример вычислений по алгоритму
- •Цифровая подпись на основе алгоритма Эль-Гамаля
- •Стандарты на алгоритмы цифровой подписи
- •Симметричная или асимметричная криптография
- •Управление открытыми ключами
Пример вычислений по алгоритму
Пусть пользователь А хочет передать пользователю Б сообщение. В этом случае вначале пользователь Б должен подготовить открытый и закрытый ключи. Пусть им выбраны, например, следующие параметры:
Р = 3, Q = 11, N = 3x11 = 33.
Тогда f = (Р - l)(Q - 1) = (3-1)(11-1) = 20.
Затем пользователь Б выбирает любое число d, не имеющее общих делителей с f (это необходимо для того, чтобы зашифрованное сообщение можно было потом однозначно восстановить). Пусть d = 13. Это число будет одним из компонентов открытого ключа.
Далее необходимо найти число е, которое можно будет использовать в качестве закрытого ключа для расшифрования сообщения. Значение е должно удовлетворять соотношению
еd mod f = 1.
Для малых значений f число е можно найти подбором. В общем случае для поиска е можно использовать обобщенный алгоритм Евклида. В нашем случае подходит е=17. (Проверяем: 13*17 mod 20 = 221 mod 20 = 1.)
Теперь пользователь Б должен запомнить свой закрытый ключ 17, отправить открытый ключ (13, 33) пользователю А и уничтожить числа Р = 3 и Q = 11.
Пользователь А, получивший открытый ключ (13, 33), увидев, что N=33, разбивает исходное сообщение на три блока, причем значение каждого меньше N. Например, пусть имеется три блока m1=8, m2=27, m3,=5. Затем пользователь А шифрует каждый блок:
c1=813 mod 33 = 17
c2 = 2713 mod 33 = 15
c3 = 513 mod 33 = 26
Зашифрованное сообщение, состоящее из трех блоков (17, 15, 26), передается пользователю Б, который, используя свой закрытый ключ е = 17 и N=33, расшифровывает сообщение:
m1 = 1717 mod 33 = 8
m2 = 1517 mod 33 = 27
m3 = 2617 mod 33 = 5
Таким образом, абонент Б расшифровал сообщение от абонента А.
Рассмотренная схема использования алгоритма RSA при большом модуле N практически не позволяет злоумышленнику получить закрытый ключ и прочитать зашифрованное сообщение. Однако она дает возможность злоумышленнику подменить сообщение от абонента А к абоненту Б, так как абонент А шифрует свое сообщение открытым ключом, полученным от Б по открытому каналу связи. А раз открытый ключ передается по открытому каналу, любой может получить его и использовать для подмены сообщения. Избежать этого можно, используя более сложные протоколы, например, следующий.
Пусть, как и раньше, пользователь А хочет передать пользователю В сообщение, состоящее из нескольких блоков mi. Перед началом сеанса связи абоненты генерируют открытые и закрытые ключи, обозначаемые, как указано в следующей таблице:
|
Открытый ключ |
Закрытый ключ |
Пользователь А |
NA, dA |
eA |
Пользователь Б |
NБ, dБ |
eБ |
В результате каждый пользователь имеет свои собственные открытый (состоящий из двух частей) и закрытый ключи. Затем пользователи обмениваются открытыми ключами. Это подготовительный этап протокола.
Основная часть протокола состоит из следующих шагов.
Сначала пользователь А вычисляет числа
,
то есть шифрует сообщение своим закрытым
ключом. В результате этих действий
пользователь А
подписывает сообщение.Затем пользователь А вычисляет числа
,
то есть шифрует то, что получилось на
шаге 1 открытым ключом пользователя Б.
На этом этапе сообщение шифруется,
чтобы никто посторонний не мог его
прочитать.Последовательность чисел gi передается к пользователю Б.
Пользователь Б получает gi и вначале вычисляет последовательно числа
,
используя свой закрытый ключ. При этом
сообщение расшифровывается.Затем Б определяет числа
,
используя открытый ключ пользователя
А.
За счет выполнения этого этапа
производится проверка подписи
пользователя А.
В результате абонент Б получает исходное сообщение и убеждается в том, что его отправил именно абонент А. Данная схема позволяет защититься от нескольких видов возможных нарушений, а именно:
пользователь А не может отказаться от своего сообщения, если он признает, что секретный ключ известен только ему;
нарушитель без знания секретного ключа не может ни сформировать, ни сделать осмысленное изменение сообщения, передаваемого по линии связи.
Данная схема позволяет избежать многих конфликтных ситуаций. Иногда нет необходимости зашифровывать передаваемое сообщение, но нужно его скрепить электронной подписью. В этом случае из приведенного выше протокола исключаются шаги 2 и 4, то есть текст шифруется закрытым ключом отправителя, и полученная последовательность присоединяется к документу. Получатель с помощью открытого ключа отправителя расшифровывает прикрепленную подпись, которая, по сути, является зашифрованным повторением основного сообщения. Если расшифрованная подпись совпадает с основным текстом, значит, подпись верна.
Существуют и другие варианты применения алгоритма RSA для формирования ЭЦП. Например, можно шифровать (то есть подписывать) открытым ключом не само сообщение, а хеш-код от него.
Возможность применения алгоритма RSA для получения электронной подписи связана с тем, что секретный и открытый ключи в этой системе равноправны. Каждый из ключей, d или e, могут использоваться как для шифрования, так и для расшифрования. Это свойство выполняется не во всех криптосистемах с открытым ключом.
Алгоритм RSA можно использовать также и для обмена ключами.
