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

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


person WilliamKF    schedule 15.05.2010    source источник
comment
Как упоминалось henri, DSA не для шифрования, а только для подписи.   -  person Samveen    schedule 21.08.2013
comment
Возможный дубликат В чем разница между id_rsa.pub и id_dsa.pub?   -  person Adam Katz    schedule 05.01.2017


Ответы (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 power d (mod R)
проверить подпись, вычислить:
M = S power e (mod R) = M мощность ed (mod R) = M (mod R)

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

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

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

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

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

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

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

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

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

person AVA    schedule 25.02.2014
comment
ссылка на вашу ссылку не работает - person Paul Wintz; 22.05.2017

Проверьте ответ AVA ниже.

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

person SDReyes    schedule 15.05.2010
comment
Значит ли это, что если объем данных для шифрования велик, он будет работать быстрее при использовании RSA? - person WilliamKF; 15.05.2010
comment
Нет, наоборот. DSA быстрее подписывается (что математически более или менее равно шифрованию), поэтому, если вам нужно много шифровать и часто расшифровывать, DSA работает быстрее. - person Henri; 15.05.2010
comment
На стороне клиента нужно зашифровать много данных, но на сервере они дешифруются только один раз, так что DSA по-прежнему выигрывает? - person WilliamKF; 15.05.2010
comment
DSA не шифрует. Повторяю, DSA не шифрует. Вот тест: что означает S в DSA? - person President James K. Polk; 16.05.2010
comment
@GregS Возможность шифрования RSA по сравнению с невозможностью шифрования DSA - это в основном вопрос терминологии. Мы называем несколько разных алгоритмов RSA, некоторые из которых подписываются (например, RSA-PSS), некоторые из них шифруют (например, RSA-OAEP). Но мы дали каждому алгоритму в групповой криптографии другое имя, назвав один из алгоритмов шифрования шифрованием Эль-Гамаля и назвав один из алгоритмов подписи DSA. - person CodesInChaos; 23.10.2013
comment
Пожалуйста, цитируйте ссылки из списков рассылки, а не сами списки рассылки. «Кто-то в Интернете» - не лучший источник. - person mikemaccana; 08.05.2015

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

person Henri    schedule 15.05.2010

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

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

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

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

Приведу лишь один пример. Не менее важно использовать безопасный алгоритм обмена ключами. Вот хороший обзор текущих лучших практик защиты SSH < / strong>.

person Serge Stroobandt    schedule 05.06.2013
comment
Некоторые старые версии ssh-keygen также позволяют использовать ключи другого размера в битах (я сам использую 2048-битный ключ DSA, сгенерированный с помощью ssh-keygen на RHEL). - person Samveen; 21.08.2013

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

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

RSA означает Рон Р Ивест, Ади С Хамир и Леонард А Длеман.

person Premraj    schedule 29.04.2016