Parece que ambos son algoritmos de cifrado que requieren claves públicas y privadas. ¿Por qué elegiría uno frente al otro para proporcionar cifrado en mi aplicación de servidor cliente?
Parece que ambos son algoritmos de cifrado que requieren claves públicas y privadas. ¿Por qué elegiría uno frente al otro para proporcionar cifrado en mi aplicación de servidor cliente?
Respuestas:
RSA El
cifrado y descifrado RSA son conmutativos,
por lo que se puede utilizar directamente como un esquema de firma digital
dado un esquema RSA {(e, R), (d, p, q)}
para firmar un mensaje M, calcular:
S = M potencia d (mod R)
para verificar una firma, calcule:
M = S potencia e (mod R) = M potencia ed (mod R) = M (mod R)
RSA se puede utilizar tanto para cifrado como para firmas digitales,
simplemente invirtiendo el orden en el que se utilizan los exponentes: el exponente secreto (d) para crear la firma, el exponente público (e) para que cualquiera verifique la firma. Todo lo demás es idéntico.
DSA (Digital Signature Algorithm)
DSA es una variante de los algoritmos de ElGamal y Schnorr crea una firma de 320 bits, pero con la seguridad de seguridad 512-1024 poco de nuevo se basa en la dificultad de calcular logaritmos discretos ha sido bastante ampliamente aceptado
DSA generación de claves
en primer lugar compartido pública mundial Se eligen los valores clave (p, q, g):
elija un primo grande p = 2 potencia L
donde L = 512 a 1024 bits y es un múltiplo de 64
elija q, un factor primo de 160 bits de p-1
elija g = h power (p-1) / q
para cualquier h1,
luego cada usuario elige una clave privada y calcula su clave pública:
elija x calcular y = g potencia x (mod p)
La generación de claves DSA está relacionada con El Gamal, pero es algo más compleja. Principalmente debido al uso del módulo secundario q de 160 bits que se usa para ayudar a acelerar los cálculos y reducir el tamaño de la firma resultante.
Creación y verificación de firmas DSA
para firmar un mensaje M
generar clave de firma aleatoria k, k calcular
r = (g potencia k (mod p)) (mod q)
s = k-1 SHA (M) + xr (mod q)
enviar firma (r, s) con mensaje
para verificar una firma, calcular:
w = s-1 (mod q)
u1 = (SHA (M) .w) (mod q)
u2 = rw (mod q)
v = (g potencia u1.y potencia u2 (mod p)) (mod q)
si v = r entonces se verifica la firma
La creación de firmas es nuevamente similar a ElGamal con el uso de una clave de firma temporal k por mensaje, pero haciendo calc primero mod p, luego mod q para reducir el tamaño del resultado. Tenga en cuenta que el uso de la función hash SHA es explícito aquí. La verificación también consiste en comparar dos cálculos, nuevamente un poco más complejo que, pero relacionado con El Gamal.
Tenga en cuenta que casi todos los cálculos son mod q y, por lo tanto, son mucho más rápidos.
Pero, a diferencia de RSA, DSA solo se puede utilizar para firmas digitales
Seguridad DSA
La presencia de un canal subliminal existe en muchos esquemas (cualquiera que necesite un número aleatorio para ser elegido), no solo DSA. Enfatiza la necesidad de "seguridad del sistema", no solo un buen algoritmo.
Verifique la respuesta de AVA a continuación .
Mi vieja respuesta parece incorrecta
Con referencia a man ssh-keygen
, la longitud de una clave DSA está restringida a exactamente 1024 bits para seguir siendo compatible con FIPS 186-2 de NIST. No obstante, teóricamente son posibles claves DSA más largas; FIPS 186-3 los permite explícitamente. Además, la seguridad ya no está garantizada con claves RSA o DSA de 1024 bits de longitud.
En conclusión, una clave RSA de 2048 bits es actualmente la mejor opción.
Establecer una conexión SSH segura implica más que seleccionar una tecnología de par de claves de cifrado seguro. En vista de las revelaciones de la NSA de Edward Snowden, uno tiene que estar aún más atento de lo que anteriormente se consideraba suficiente.
Para nombrar solo un ejemplo, el uso de un algoritmo de intercambio de claves seguro es igualmente importante. Aquí hay una buena descripción general de las mejores prácticas actuales de endurecimiento de SSH .
ssh-keygen
permiten otras claves de tamaño de bits (yo mismo uso una clave DSA de 2048 bits generada con ssh-keygen
RHEL).