Sembra che siano entrambi algoritmi di crittografia che richiedono chiavi pubbliche e private. Perché dovrei sceglierne uno rispetto all'altro per fornire la crittografia nella mia applicazione server client?
Sembra che siano entrambi algoritmi di crittografia che richiedono chiavi pubbliche e private. Perché dovrei sceglierne uno rispetto all'altro per fornire la crittografia nella mia applicazione server client?
Risposte:
La
crittografia e la decrittografia RSA RSA sono commutative,
quindi possono essere utilizzate direttamente come schema di firma digitale
dato uno schema RSA {(e, R), (d, p, q)}
per firmare un messaggio M, calcolare:
S = M power d (mod R)
per verificare una firma, calcolare:
M = S power e (mod R) = M power ed (mod R) = M (mod R)
RSA può essere utilizzato sia per la crittografia che per le firme digitali,
semplicemente invertendo l'ordine in cui vengono utilizzati gli esponenti: l'esponente segreto (d) per creare la firma, l'esponente pubblico (e) per chiunque possa verificare la firma. Tutto il resto è identico.
DSA (Digital Signature Algorithm)
DSA è una variante degli algoritmi ElGamal e Schnorr crea una firma a 320 bit, ma con la sicurezza di 512-1024 bit la sicurezza si basa ancora una volta sulla difficoltà di calcolare logaritmi discreti è stata ampiamente accettata
Generazione di chiavi DSA
condivisa in primo luogo pubblico globale vengono scelti i valori chiave (p, q, g):
scegli un primo grande p = 2 potenza L
dove L = da 512 a 1024 bit ed è un multiplo di 64
scegli q, un fattore primo di 160 bit di p-1
scegli g = h power (p-1) / q
per ogni h1
quindi ogni utente sceglie una chiave privata e calcola la propria chiave pubblica:
scegli x calcola y = g power x (mod p)
La generazione di chiavi DSA è correlata, ma in qualche modo più complessa di El Gamal. Principalmente a causa dell'uso del modulo secondario a 160 bit q utilizzato per velocizzare i calcoli e ridurre la dimensione della firma risultante.
Creazione e verifica della firma DSA
per firmare un messaggio M
generare una chiave di firma casuale k, k calcolare
r = (g power k (mod p)) (mod q)
s = k-1.SHA (M) + xr (mod q)
inviare firma (r, s) con messaggio
per verificare una firma, calcolare:
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)
se v = r allora la firma è verificata
La creazione della firma è di nuovo simile a ElGamal con l'uso di una chiave di firma temporanea per messaggio k, ma facendo calc prima mod p, poi mod q per ridurre la dimensione del risultato. Nota che l'uso della funzione hash SHA è esplicito qui. La verifica consiste anche nel confrontare due calcoli, ancora una volta un po 'più complessi di, ma relativi a El Gamal.
Notare che quasi tutti i calcoli sono mod q e quindi sono molto più veloci.
Ma, a differenza di RSA, DSA può essere utilizzato solo per le firme digitali
Sicurezza DSA
La presenza di un canale subliminale esiste in molti schemi (ognuno che necessita di un numero casuale per essere scelto), non solo DSA. Sottolinea la necessità di "sicurezza del sistema", non solo un buon algoritmo.
Controlla la risposta di AVA di seguito .
La mia vecchia risposta sembra sbagliata
Con riferimento a man ssh-keygen
, la lunghezza di una chiave DSA è limitata esattamente a 1024 bit per rimanere conforme a FIPS 186-2 del NIST. Tuttavia, sono teoricamente possibili chiavi DSA più lunghe; FIPS 186-3 li consente esplicitamente. Inoltre, la sicurezza non è più garantita con chiavi RSA o DSA lunghe 1024 bit.
In conclusione, una chiave RSA a 2048 bit è attualmente la scelta migliore.
Stabilire una connessione SSH sicura implica molto di più che selezionare una tecnologia di coppia di chiavi di crittografia sicura. Alla luce delle rivelazioni alla NSA di Edward Snowden, bisogna essere ancora più vigili di quanto precedentemente ritenuto sufficiente.
Per citare solo un esempio, è altrettanto importante utilizzare un algoritmo di scambio di chiavi sicuro . Ecco una bella panoramica delle attuali migliori pratiche di hardening SSH .
ssh-keygen
consentono anche altre chiavi di dimensioni di bit (io stesso uso una chiave DSA a 2048 bit generata utilizzando ssh-keygen
RHEL).