Jak działa szyfrowanie SSH?


34

Przeczytałem o generowaniu 2 kluczy (prywatnym i publicznym) na hoście klienta i kopiowaniu klucza publicznego na hosta serwera.

W moim rozumieniu (popraw mnie, jeśli się mylę): Serwer szyfruje dane za pomocą klucza publicznego i wysyła je do klienta, klient deszyfruje je za pomocą klucza prywatnego.

Ale jeśli muszę zaszyfrować dane na kliencie w celu wysłania na serwer, jak to się dzieje?

Klucz publiczny szyfruje dane na kliencie? Ale w jaki sposób serwer może go odszyfrować, jeśli ma tylko klucz publiczny?

Jak działa szyfrowanie SSH?

Odpowiedzi:


35

Po pierwsze, po ustanowieniu połączenia TCP oba systemy uzgadniają klucz sesji , używając takich protokołów jak wymiana klucza DH , ECDH lub GSSAPI. Ten klucz jest symetryczny i tymczasowy - obie strony używają tego samego klucza do szyfrowania i deszyfrowania danych przy użyciu takich algorytmów, jak AES lub RC4 .

Para kluczy klienta nigdy nie jest używana do szyfrowania danych, tylko do uwierzytelniania - „publickey” jest jedną z kilku dostępnych metod, w których klient przedstawia swój własny klucz publiczny wraz z dowodem własności klucza prywatnego. Podobnie, para kluczy serwera służy tylko do uwierzytelnienia serwera podczas wymiany kluczy DH lub ECDH; żadne dane nie są szyfrowane przy użyciu tego.

Protokół SSH2 jest udokumentowany w kilku dokumentach RFC , w tym:

  • RFC 4253 - Protokół warstwy transportowej Secure Shell (SSH)
    • sekcja 7 - „Wymiana kluczy”
    • sekcja 8 - „Wymiana kluczy Diffie-Hellman”
  • RFC 4419 - Diffie-Hellman Group Exchange
  • RFC 4432 - Wymiana klucza RSA
  • RFC 4462 - Uwierzytelnianie GSSAPI i wymiana kluczy

13

Po pierwsze, myślę, że musisz zrozumieć, że podczas gdy wiele protokołów szyfrowania, takich jak SSH i SSL, używa PKI do celów uwierzytelniania, prawie żaden z tych systemów nie używa PKI do przesyłania danych.

PKI jest zdecydowanie zbyt intensywny pod względem procesora, aby można go było wykorzystać do przesyłania rzeczywistych danych ładunku. Tak się dzieje, że PKI służy do negocjowania losowo generowanego klucza, który ma być używany z protokołem szyfrowania symetrycznego. Protokół, który ma być używany, jest również negocjowany i powinien być najsilniejszym protokołem, na jaki oba systemy mogą się zgodzić. Tak więc po zakończeniu wstępnego uzgadniania i negocjacji prawie wszystko jest tylko standardową kryptografią symetryczną.


2
Do dalszej lektury jest to zasadniczo wyjaśnione w RFC4253 , strona 15.
slhck 29.01.12

12

Oto kilka praktycznych przykładów: Załóżmy, że klucz A był trzymany w tajemnicy i dlatego jest kluczem prywatnym, a klucz B został opublikowany w publicznie dostępnym miejscu, a zatem klucz publiczny.

Jeśli więc chcesz wysłać wiadomość do wszystkich i chcesz, aby zweryfikowała, że ​​pochodzi ona od Ciebie i nie została zmieniona podczas jej dostarczania, wyślij wiadomość i dołącz do niej skrót zaszyfrowany kluczem A. Wtedy każdy, kto ma klucz B, który może odszyfrować skrót, porównać go z otrzymaną wiadomością i zweryfikować, czy wiadomość pochodzi od Ciebie (ze względu na fakt, że tylko osoba z kluczem A mogła wygenerować zaszyfrowany ładunek, który pomyślnie odszyfrował skrót, oraz ponieważ są jedynymi osobami posiadającymi klucz A, który może pochodzić tylko od Ciebie). To się nazywa podpisywanie .

Teraz powiedzmy, że ktoś chce wysłać ci tajną wiadomość, ale nie chce ujawnić, kim jest. Mogą zaszyfrować wiadomość za pomocą klucza symetrycznego (ponieważ Zoredache wspomniał, że symetryczny jest znacznie tańszy), a następnie weź ten klucz i zaszyfruj go za pomocą klucza B i wyślij go do Ciebie. Ponieważ tylko klucz A może odszyfrować coś, co zostało zaszyfrowane kluczem B, żadna inna osoba nie może zobaczyć, co jest w wiadomości, która została do Ciebie wysłana. Tak działa normalne szyfrowanie i wymiana danych przez SSH.


3

Oto stosunkowo przystępny opis matematyki kryjącej się za szyfrowaniem klucza prywatnego i publicznego.

Jeszcze bardziej podstawowy opis z BBC znajduje się tutaj .


Dodałem nowy link do BBC wyjaśniający ten proces i część historii.
Chogg

1

ty piszesz

„Klucz publiczny szyfruje dane na kliencie? Ale jak serwer może je odszyfrować, jeśli ma tylko klucz publiczny?”

Nie wiem zbyt wiele na ten temat, ale myślę, że mogę odpowiedzieć na to dość jasno.

Jeśli A chce wysłać wiadomość do B, A używa klucza publicznego B. W ten sposób B jest w stanie go odszyfrować.

Jeśli A użyłby własnego klucza publicznego do zaszyfrowania wiadomości, to rzeczywiście B nie byłby w stanie go odszyfrować.

To jest wyjaśnione tutaj

http://www.comodo.com/resources/small-business/digital-certificates2.php

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.