Architektura PrivMX – komunikacja klient-serwer

Adresy PrivMX

Architektura PrivMX zakłada, iż serwery identyfikowane są poprzez hostname – nazwę domeny, a użytkownicy poszczególnych serwerów – poprzez adresy postaci user#hostname.

Procedura Service Discovery

Wywoływanie metod API serwera PrivMX możliwe jest po uzyskaniu dokładnego adresu do wysyłania żądań (API endpoint) dla danego hostname. Zajmuje się tym Procedura Service Discovery (SD), która próbuje nawiązać połączenie z serwerem docelowym hostname i odpytuje go o konfigurację dla wybranego protokołu transportowego. Przykładowo, host "simplito.com" dla protokołu "http" może zaraportować konfigurację:

defaultEndpoint=http://s1.simplito.com:3333/pmx/server

Konfiguracja taka, oprócz defaultEndpoint, zawierać może również inne pola, np TTL (time-to-live, czyli maksymalny czas przechowywania adresu endpointa w pamięci podręcznej), czy Redirect (nakaz szukania adresu endpointa na innym serwerze).

Procedura SD poszukując konfiguracji sprawdza na docelowym serwerze ustalone miejsca – odpytuje określone adresy URL (np. http://hostname/privmx/privmx-configuration.json) oraz sprawdza rekordy TXT we wpisie DNS dla domeny hostname. Przykładowy wpis w DNS może mieć postać:

V=privmx;t=http;defaultEndpoint=http://hostname/privmx/server/api;ttl=20000

Po wykonaniu procedury SD i uzyskaniu adresu "defaultEndpoint", moduł kliencki jest gotowy do nawiązania z serwerem połączenia przy pomocy protokołu PrivMX TLS.

Protokół PrivMX TLS

Wywołania API realizowane są przy pomocy bezpiecznego protokołu komunikacyjnego PrivMX TLS będącego zmodyfikowanym i uproszczonym wariantem protokołu TLS 1.2.

PrivMX TLS dziedziczy po TLS ogólny sposób realizacji protokołu w tym m.in. standardowy podział na ramki (CHANGE_CIPHER_SPEC, ALERT, HANDSHAKE, APPLICATION_DATA) oraz procedury handshake.

Protokół PrivMX TLS, oprócz tworzenia i utrzymywania sesji połączenia oraz szyfrowania danych przesyłanych w obie strony, dostarcza również mechanizmu logowania użytkowników i kontroli sesji zalogowanych użytkowników. Cechy charakterystyczne protokołu PrivMX TLS, to:

  • działanie na dowolnym transporcie (również non-duplex), w schemacie request-response.
  • Kontrola sesji i ich wznawianie oparte na wykorzystaniu list ticketów używanych jako nonce – oznacza to brak przesyłania ustalonego identyfikatora sesji i uniemożliwienie obserwatorom grupowania ramek. Jest to inne wykorzystanie ticketów niż to opisano w RFC 5077.
  • Uproszczone procedury handshake, które m.in. nie przeprowadzają negocjacji algorytmów szyfrowania.
  • Dwa poziomy zabezpieczeń połączenia:
    • standardowy – dostępny dla wszystkich klientów. Zabezpieczenie połączenia następuje poprzez wykorzystanie wspólnego sekretu otrzymanego z procedury handshake wykorzystującej ECDHE (lub ECDH, gdy klient posiada autoryzowany klucz publiczny serwera).
    • zalogowany – poziom dostępny dla posiadaczy konta na danym serwerze. Logowanie w PrivMX to procedura, w której klient po wstępnym nawiązaniu „połączenia standardowego” wymusza przeprowadzenie dodatkowej procedury handshake opartej na protokole SRP. Moduł PrivMX TLS ma tutaj dostęp do danych zapisanych na serwerze podczas tworzenia konta użytkownika.
  • Po ustanowieniu połączenia każda ze stron może w dowolnym momencie wymuszać zmianę kluczy szyfrowania połączenia.

Serwer PrivMX udostępnia klientom różne zestawy metod API w zależności od wykorzystywanego poziomu połączenia PrivMX TLS. Temat ten zaznaczany jest często w kolejnych rozdziałach, przy opisach metod API.

PrivMX Proxy

Serwer PrivMX udostępnia metodę API.proxy, która pozwala programom klienckim wykorzystać „ich własny” moduł serwerowy jako pośrednika w połączeniach z innymi serwerami PrivMX. Działanie tej usługi może być konfigurowane w zależności od potrzeb. W szczególności, od sposobu implementacji aplikacji klienckiej zależy czy i jak korzysta ona z tej możliwości.

Nawiązywanie połączeń PrivMX TLS z „obcym” serwerem poprzez usługę PrivMX Proxy nie zaburza bezpieczeństwa połączeń. Klucze szyfrowania ustalane są (handshake) z docelowym serwerem w taki sposób, że serwer pośredniczący nie ma do nich dostępu.


Następny rozdział: Serwer PrivMX – klucze ECC jako identyfikatory i prawa dostępu, bloki danych, deskryptory, skrzynki pocztowe, wiadomości, publiczne i prywatne dane użytkowników.
Spis treści: Architektura PrivMX
Wersja PDF: Architektura PrivMX – opis techniczny (pdf, PL)english version