В чем разница между DSA и RSA?

похоже, что они оба алгоритма шифрования, которые требуют открытых и закрытых ключей. Почему я должен выбирать один против другого, чтобы обеспечить шифрование в моем клиентском серверном приложении?

5 ответов


ссылаясь, https://web.archive.org/web/20140212143556/http://courses.cs.tamu.edu:80/pooch/665_spring2008/Australian-sec-2006/less19.html

RSA
Шифрование и дешифрование RSA являются коммутативными
следовательно, он может использоваться непосредственно как схема цифровой подписи
учитывая схему RSA {(e,R), (d,p,q)}
чтобы подписать сообщение M, вычисляет:
S = M мощность d (mod R)
чтобы проверить подпись, вычислите:
M = S сила e(мод р) = м мощность Эл.д(мод Р) = М(мод Р)

RSA может использоваться как для шифрования, так и для цифровых подписей, просто изменив порядок, в котором используются экспоненты: секретный показатель (d) для создания подписи, публичный показатель (e) для любого, кто проверит подпись. Все остальное идентично.

DSA (алгоритм цифровой подписи)
DSA является вариантом ElGamal и Schnorr алгоритмы создает 320-битную подпись, но с 512-1024-битной безопасностью безопасность опять же зависит от сложности вычисления дискретных логарифмов было довольно широко принято

генерация ключей DSA
сначала выбираются общие значения глобального открытого ключа (p,q,g):
выберите большое простое число p = 2 мощность L
где L= 512 до 1024 бит и кратно 64
выберите q, 160-битный простой коэффициент p-1
выберите G = H power (p-1)/q
для любого Н1
затем каждый пользователь выбирает секретный ключ и вычисляет открытый ключ:
выберите x вычислить y = G мощность x (mod p)

Генерация ключей DSA связана, но несколько сложнее, чем El Gamal. В основном из-за использования вторичного 160-битного модуля q, используемого для помощи ускорить вычисления и уменьшить размер результирующей подписи.

создание и проверка подписи DSA

подписать сообщение M
генерировать случайный ключ подписи к к вычислить
r = (G power k (mod p)) (mod q)
s = k-1.SHA (M)+ x.r (mod q)
отправить подпись (r,s) с сообщением

чтобы проверить подпись, расчета:
w = s-1 (mod q)
u1= (SHA (M).w) (mod q)
u2= r.w (mod q)
v = (g мощность u1.y power u2 (mod p)) (mod q)
если v=R, то подпись проверяется

создание подписи снова похоже на ElGamal с использованием за сообщение временный ключ подписи k, но выполнение calc first mod p, затем mod q, чтобы уменьшить размер результата. Обратите внимание, что использование здесь явна хэш-функция SHA. Проверка также состоит из сравнение двух вычислений, опять же немного сложнее, чем, но связан с Эль Гамалем.
обратите внимание, что почти все вычисления mod q, и следовательно, намного быстрее.
но, в отличие от RSA, DSA можно использовать только для цифрового подписи

безопасность DSA
Наличие подсознательного канала существует во многих схемах (любых, для которых необходимо выбрать случайное число), а не только DSA. Он подчеркивает необходимость "безопасности системы", а не только хорошего алгоритма.


Регистрация ответ Авы ниже.

мой старый ответ кажется неправильным


Кстати, вы не можете зашифровать с помощью DSA, только знак. Хотя они математически эквивалентны (более или менее), вы не можете использовать DSA на практике как схему шифрования, только как схему цифровой подписи.


со ссылкой на man ssh-keygen, длина ключа DSA ограничена ровно 1024 битами, чтобы оставаться совместимой с FIPS 186-2 NIST. Тем не менее, более длинные ключи DSA теоретически возможны; FIPS 186-3 явно разрешает их. Кроме того, безопасность больше не гарантируется 1024-битными ключами RSA или DSA.

В заключение ключ 2048 бит RSA в настоящее время является лучшим выбором.

ДОПОЛНИТЕЛЬНЫЕ МЕРЫ ПРЕДОСТОРОЖНОСТИ

создание защищенного SSH связи влечет за собой больше чем выбор безопасной технологии пары ключей шифрования. Учитывая откровения Эдварда Сноудена из АНБ, нужно быть еще более бдительным, чем то, что ранее считалось достаточным.

чтобы назвать только один пример, используя safe алгоритм обмена ключами не менее важно. Вот хороший обзор текущего лучшие практики SSH упрочнения.


и в дополнение к вышеуказанным хорошим ответам.

  • DSA использует дискретный логарифм.
  • RSA использует целочисленную факторизацию.

RSA означает Рон Rivest, Adi Sхамир и Леонард Adleman.