Po pierwsze, kwestia terminologii: to, co opisujesz, to szyfrowanie symetryczne , a klucz współdzielony przez uczestników jest zwykle znany jako klucz tajny; „Klucz prywatny” zazwyczaj oznacza tę część klucza w kryptografii klucza publicznego, którą zna tylko jeden uczestnik.
Istnieją dwa sposoby rozpowszechniania tajnego klucza: można go przetransportować w jakiś fizycznie bezpieczny sposób lub można go przetransportować przy użyciu innej formy szyfrowania, zwykle kryptografii klucza publicznego.
Istnieją sposoby wymiany tajnego klucza, które nie wymagają tajnego kanału komunikacji. Najpopularniejszy jest protokół wymiany kluczy Diffie-Hellmana. Zasada Diffie-Hellmana polega na tym, że każdy uczestnik generuje własną parę kluczy, a operacja matematyczna konstruuje dużą liczbę z jednego klucza publicznego i jednego klucza prywatnego. Ta operacja matematyczna ma bardzo interesującą właściwość: dużą liczbę można zbudować z klucza prywatnego Alicji i klucza publicznego Boba lub z klucza prywatnego Boba i klucza publicznego Alicji; i tak otrzymujesz ten sam numer. Więc Alice i Bob wymieniają swoje klucze publiczne, a obie strony znają dużą liczbę, którą można następnie wykorzystać jako tajny klucz. Podsłuchujący może znaleźć oba klucze publiczne, ale niemożliwe jest znalezienie dużej liczby z samych kluczy publicznych.
Wymiana kluczy Diffie-Hellmana pozwala dwóm stronom na wymianę tajemnicy, bez względu na to, kto nasłuchuje. Jednak nie uwierzytelnia Alicji z Bobem i odwrotnie. Dlatego jest podatny na atak człowieka w środku : Mallory dokonuje wymiany klucza z Alice (która uważa, że rozmawia z Bobem) i oddzielnie z Bobem (który wierzy, że rozmawia z Alice), a zatem może zdecydować lub najmniej znam sekret.
Gdy atakujący może przechwytywać i wstrzykiwać wiadomości, potrzeba więcej kryptografii, aby uczestnicy mogli się uwierzytelnić. (Pasywny atakujący skutecznie oznacza, że bazowy protokół transportowy zapewnia uwierzytelnianie.) Każdy uczestnik może łatwo poznać swój klucz publiczny. Jeśli Alice zna klucz publiczny Boba:
- Alice może uwierzytelnić Boba, wysyłając mu wyzwanie: losową wartość ( nonce ) zaszyfrowaną kluczem publicznym Boba. Jeśli Bob może odszyfrować tę wartość i odesłać ją z powrotem, Alice wie, że naprawdę rozmawia z Bobem.
- Bob może uwierzytelnić się z Alice, wysyłając jej wiadomość podpisaną jego kluczem publicznym. Alice weryfikuje podpis, aby sprawdzić, czy naprawdę rozmawia z Bobem.
Istnieje wiele wariantów, które wykorzystują jedną z tych metod (lub jeszcze inny wariant) w jednym kierunku i tę samą lub inną metodę w drugim kierunku lub które uwierzytelniają się tylko w jednym kierunku. Na przykład SSL / TLS (warstwa kryptograficzna dla wielu protokołów, takich jak HTTPS, SMTPS, IMAPS itp.) Może używać kilku różnych kombinacji szyfrów i zwykle uwierzytelnia serwer na kliencie, ale opcjonalnie może również uwierzytelniać klienta. Diffie-Hellman jest powolny i uciążliwy dla tej aplikacji; najszerszym algorytmem z dystrybucją klucza publicznego jest RSA .
Oczywiście Alice i Bob mogą nie znać wcześniej swojego klucza publicznego. Zamiast tego polegają na łańcuchu zaufania: Bob wysyła Alice swój klucz publiczny wraz z podpisanym oświadczeniem strony trzeciej, które potwierdza, że ten klucz jest tak naprawdę kluczem publicznym Boba. To podpisane oświadczenie nazywa się certyfikatem, a trzecią stroną jest urząd certyfikacji . Strona trzecia może być znana Bobowi lub jej tożsamość może zostać potwierdzona przez stronę czwartą i tak dalej. W końcu ten łańcuch zaufania (… kupony za Dominique kupony za Charliego, który kupuje za Boba) musi dotrzeć do partii Rona, któremu Bob już ufa, co oznacza, że Bob ma klucz publiczny Rona i ufa Ronowi, że podpisuje tylko ważne certyfikaty.
Istnieją protokoły, które nie opierają się na kryptografii klucza publicznego. W szczególności protokół Kerberos jest używany zarówno w sieciach opartych na systemie Unix, jak i Windows, w celu ustanowienia połączeń między klientem a serwerem. Kerberos korzysta z centralnego serwera uwierzytelniania zwanego centrum dystrybucji kluczy (KDC). KDC musi mieć hasło użytkownika przechowywane w bazie danych, a klient zwykle pyta użytkownika o hasło. Aby uniknąć ujawnienia hasła, protokół nie używa hasła bezpośrednio, ale hasłem kryptograficznym lub, bardziej ogólnie , funkcją uzyskiwania klucza .
Dzięki temu wspólnemu kluczowi tajnemu klient i KDC ustanawiają bezpieczny kanał, a KDC wysyła klientowi „bilet”. Bilet zawiera klucz sesji (tj. Nowo wygenerowany tajny klucz), a także kopię klucza, który jest zaszyfrowany innym kluczem symetrycznym współdzielonym między centrum dystrybucji kluczy i serwerem, z którym klient chce się skontaktować. Klient przesyła następnie zaszyfrowaną kopię na serwer. Serwer odszyfrowuje tę wiadomość, aby uzyskać klucz sesji, i generuje kod, który szyfruje za pomocą klucza sesji i odsyła do klienta. Następnie klient inicjuje bezpieczny serwer z serwerem, zaszyfrowany kluczem sesji, i zaczyna od pokazania, że może odszyfrować kod jednorazowy: uwierzytelnia to klienta na serwerze. Ustanowienie sesji Kerberos jest wariantem protokołu Needham-Schroeder .
¹ W tym sensie, że kryptografowie bardzo się starali, ale najlepszy sposób, jaki znaleźli, wymaga niewiarygodnej mocy obliczeniowej.