Похоже, что оба алгоритма шифрования требуют открытого и закрытого ключей. Почему я должен выбрать одно вместо другого, чтобы обеспечить шифрование в моем клиент-серверном приложении?
Похоже, что оба алгоритма шифрования требуют открытого и закрытого ключей. Почему я должен выбрать одно вместо другого, чтобы обеспечить шифрование в моем клиент-серверном приложении?
Ответы:
RSA
RSA шифрование и дешифрование являются коммутативными,
поэтому его можно использовать непосредственно в качестве схемы цифровой подписи с
учетом схемы RSA {(e, R), (d, p, q)}
для подписи сообщения M, вычислить:
S = M power d (mod R)
для проверки подписи вычислить:
M = S power e (mod R) = M power ed (mod R) = M (mod R)
RSA можно использовать как для шифрования, так и для цифровых подписей,
просто изменив порядок, в котором используются экспоненты: секретный показатель (d) для создания подписи, публичный показатель (e) для проверки подписи любым лицом. В остальном все идентично.
DSA (алгоритм цифровой подписи)
DSA - это вариант алгоритмов Эль-Гамаля и Шнорра, который создает 320-битную подпись, но с безопасностью 512-1024 бит безопасность снова опирается на сложность вычисления дискретных логарифмов, что широко распространено.
DSA Key Generation
во - первых , общий глобальный общественный ключевые значения (p, q, g) выбраны:
выберите большое простое число p = 2, мощность L,
где L = от 512 до 1024 бит и кратно 64,
выберите q, 160-битный простой коэффициент p-1
выберите g = h power (p-1) / q
для любого h1,
тогда каждый пользователь выбирает закрытый ключ и вычисляет свой открытый ключ:
выберите x вычислить y = g power x (mod p)
Генерация ключей DSA связана с Эль-Гамалем, но несколько сложнее. В основном из-за использования вторичного 160-битного модуля q, который помогает ускорить вычисления и уменьшить размер результирующей подписи.
Создание и проверка подписи DSA
для подписи сообщения M
сгенерировать случайный ключ подписи k, k вычислить
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. Он подчеркивает необходимость «безопасности системы», а не просто хорошего алгоритма.
Проверьте ответ AVA ниже .
Мой старый ответ кажется неправильным
Что касается man ssh-keygen
, длина ключа DSA ограничена точно 1024 бит, чтобы оставаться совместимым с FIPS 186-2 NIST. Тем не менее теоретически возможны более длинные ключи DSA; FIPS 186-3 явно разрешает их. Более того, безопасность больше не гарантируется с ключами RSA или DSA длиной 1024 бита.
В заключение, 2048-битный ключ RSA в настоящее время является лучшим выбором.
Установление безопасного SSH-соединения требует большего, чем выбор технологии безопасной пары ключей шифрования. Принимая во внимание разоблачения Эдварда Сноудена из АНБ, нужно быть еще более бдительным, чем считалось ранее достаточным.
Приведу лишь один пример: использование безопасного алгоритма обмена ключами не менее важно. Вот хороший обзор текущих лучших практик защиты SSH .
ssh-keygen
позволяют использовать ключи другого размера в битах (я сам использую 2048-битный ключ DSA, сгенерированный с помощью ssh-keygen
RHEL).