Wygląda na to, że oba są algorytmami szyfrowania, które wymagają klucza publicznego i prywatnego. Dlaczego miałbym wybierać jedną z opcji, aby zapewnić szyfrowanie w mojej aplikacji klienckiej?
Wygląda na to, że oba są algorytmami szyfrowania, które wymagają klucza publicznego i prywatnego. Dlaczego miałbym wybierać jedną z opcji, aby zapewnić szyfrowanie w mojej aplikacji klienckiej?
Odpowiedzi:
Odnosząc się, https://web.archive.org/web/20140212143556/http://courses.cs.tamu.edu:80/pooch/665_spring2008/Australian-sec-2006/less19.html
Szyfrowanie i deszyfrowanie RSA RSA są przemienne,
dlatego mogą być używane bezpośrednio jako schemat podpisu cyfrowego,
biorąc pod uwagę schemat RSA {(e, R), (d, p, q)}
do podpisania wiadomości M, oblicz:
S = M potęga d (mod R),
aby zweryfikować podpis, oblicz:
M = S moc e (mod R) = M moc ed (mod R) = M (mod R)
RSA może być używany zarówno do szyfrowania, jak i podpisów cyfrowych,
po prostu odwracając kolejność, w jakiej są używane wykładniki: tajny wykładnik (d) do tworzenia podpisu, wykładnik publiczny (e) dla każdego, kto weryfikuje podpis. Wszystko inne jest identyczne.
DSA (Digital Signature Algorithm)
DSA jest wariantem algorytmów ElGamala i Schnorra, który tworzy 320-bitowy podpis, ale z bezpieczeństwem 512-1024-bitowym ponownie opiera się na trudności w obliczaniu logarytmów dyskretnych. Generacja klucza DSA jest dość powszechnie akceptowana
pierwsze wspólne globalne publiczne Kluczowe wartości (p, q, g) są wybierane:
wybierz dużą
liczbę pierwszą p = 2 potęgę L, gdzie L = 512 do 1024 bitów i jest wielokrotnością 64
wybierz q, 160 bitowy czynnik pierwszy z p-1
wybierz g = h power (p-1) / q
dla dowolnego h1,
wtedy każdy użytkownik wybiera klucz prywatny i oblicza swój klucz publiczny:
wybierz x oblicz y = g moc x (mod p)
Generowanie kluczy DSA jest powiązane, ale nieco bardziej złożone niż El Gamal. Głównie z powodu zastosowania dodatkowego 160-bitowego modułu q używanego do przyspieszenia obliczeń i zmniejszenia rozmiaru wynikowej sygnatury.
Tworzenie i weryfikacja podpisu DSA w
celu podpisania wiadomości M
generuje losowy klucz podpisu k, k oblicz
r = (moc g k (mod p)) (mod q)
s = k-1.SHA (M) + xr (mod q)
send podpis (r, s) z wiadomością
do weryfikacji podpisu, oblicz:
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)
jeśli v = r to podpis jest weryfikowany
Tworzenie podpisu jest ponownie podobne do ElGamala z użyciem tymczasowego klucza podpisu dla wiadomości k, ale najpierw wykonuje się obliczenie mod p, a następnie mod q, aby zmniejszyć rozmiar wyniku. Zauważ, że użycie funkcji skrótu SHA jest tutaj jawne. Weryfikacja obejmuje również porównanie dwóch obliczeń, które są nieco bardziej złożone niż El Gamal, ale są związane.
Zauważ, że prawie wszystkie obliczenia są mod q, a zatem są znacznie szybsze.
Ale w przeciwieństwie do RSA, DSA może być używane tylko do podpisów cyfrowych
Bezpieczeństwo DSA
Kanał podprogowy istnieje w wielu schematach (takich, które wymagają losowego wyboru), nie tylko w DSA. Podkreśla potrzebę „bezpieczeństwa systemu”, a nie tylko dobrego algorytmu.
Sprawdź odpowiedź AVA poniżej .
Moja stara odpowiedź wydaje się błędna
W odniesieniu do man ssh-keygen
, długość klucza DSA jest ograniczona do dokładnie 1024 bitów, aby zachować zgodność ze standardem NIST FIPS 186-2. Niemniej jednak teoretycznie możliwe są dłuższe klucze DSA; Standard FIPS 186-3 wyraźnie na to zezwala. Co więcej, bezpieczeństwo nie jest już gwarantowane w przypadku kluczy RSA lub DSA o długości 1024 bitów.
Podsumowując, klucz RSA 2048-bitowy jest obecnie najlepszym wyborem.
Ustanowienie bezpiecznego połączenia SSH to coś więcej niż wybranie technologii bezpiecznych par kluczy szyfrowania. W świetle rewelacji Edwarda Snowdena NSA trzeba być jeszcze bardziej czujnym niż to, co wcześniej uznano za wystarczające.
Aby wymienić tylko jeden przykład, równie ważne jest użycie bezpiecznego algorytmu wymiany kluczy . Oto ładny przegląd aktualnych najlepszych praktyk hartowania SSH .
ssh-keygen
pozwalają również na klucze o innych rozmiarach bitowych (ja sam używam 2048-bitowego klucza DSA wygenerowanego przy użyciu ssh-keygen
RHEL).