UNIX a Internet

SSL & TLS

Autor: Jiří Hnídek / jiri.hnidek@tul.cz

Knihovny aplikující TLS, SSL, DTLS, ...

  • Existuje mnoho knihoven implemnutjící bezpečnostní protokoly
  • Nejznámnější OpenSource knihovny jsou následující:
    • OpenSSL
    • NSS
    • GnuTLS

OpenSSL

  • Multiplatformní knihovna implementující nejen bezpečnostní protokoly a algoritmy
  • Licence: Apache, BSD
  • Nástroj pro manipulaci s certifikáty, řetězci certifikátů, klíči, atd.
  • Závisí na tom bezpečnost poloviny internetu: Apache, Nginx, atd.
  • Naprosto tragickým způsobem naprogramovaná. Chyby: Odhadnutelné tajné klíče, Heartbleed, atd.
    • Několik forků: LibreSSL, BoringSSL

NSS

  • It stands for: Network Security Service
  • Obdoba (konkurent) OpenSSL
  • Licence: Mozilla Public License
  • Používá to druhá půlka internetu: Firefox, Thunderbird, Google Chrome, atd.

GnuTLS

  • Obdoba (konkurent) OpenSSL a NSS
  • Licence: GPL
  • Používá ho třetí půlka internetu: Gnome, Wireshark, atd

TLS

  • Transport Layer Security
  • Nástupce SSL (Security Socket Layer)
  • Komplexní protokol pro zabezpečení transportního protokolu
  • Standardizovaný v RFC 5246 a RFC 6176
  • Protokol prezenční vrstvy
  • Umožňuje zabezpečit transportní protokoly: TCP, SCTP
  • Existuje varianta i pro datagramové protokoly (UDP, DCCP), která se jmenuje DTLS

Vlastnosti TLS

  • Zamezuje odposlechnutí a falšování zpráv
  • Umožňuje autentizovat server i klienta (autentizace klienta se skoro nepoužívá) pomocí certifikátů a CA.
  • TLS protokol má tři základní fáze:
    • TLS Handshake
    • Šifrování přenosu symetrickou šifrou
    • Ukončení přenosu
  • Několik verzí: TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3 (draft)

Kryptografické algoritmy

  • Během TLS handshaku si klient se serverem dohodnou používané kryptografické algorimty.
  • Seznam podporovaných algoritmů se u jednotlivých verzí liší.
  • Asymetrické šifry: Diffie-Hellmann, RSA, DSA
  • Symetrické šifry: RC-2, RC-4, IDEA, DES, Triple DES, AES, Camellia
  • Hash funkce: MD-2, MD-4, MD-5, SHA-1, SHA-2

TLS Handshake


        client                                             server
          o                                                  o
          |                                                  |
          |                   ClientHello                    |
          +-Version,RandomNumber,CypherList,CompressionList->+----+
          |                                                  |    |
          |                   ServerHello                    |    |
     +----+<-Version,RandomNumber,CypherMeth,CompressionMeth-+<---+
     |    |           Certificate,ServerHelloDone            |
     |    |                                                  |
     |    |                ClientKeyExchange                 |
     +--->+---------PreMasterSecret/PublicKey/None---------->+----+
          |            ChangeCipherSpec,Finished             |    |
          |                                                  |    |
          |                ChangeCipherSpec                  |    |
          +<-------------------Finished----------------------+<---+
          |                                                  |
          .                                                  .

Popis TLS Handshaku - 1.

  • Klient nejprve pošle: nejvyšší podporovanou verzi TLS, náhodné číslo, seznam podporovaných šifrovacích a kompresních algoritmů.
  • Server v odpovědi pošle: vybranou verzi protokolu, náhodné číslo, vybrané varianty šifrovacích a kompresních algoritmů, svůj certifikát.
  • Server zde může po klientovi požadovat jeho vlastní certifikát.

Popis TLS Handshaku - 2.

  • Klient odpoví zprávou obsahující: PreMasterSecret, který obsahuje tajemství zašifrované veřejným klíčem (certifikát).
  • Klient i server si z PreMasterSecret a náhodných čísel dohodnutým způsobem (hash funkce) vygenerují tajný klíč použitý pro zvolenou symetrickou šifru.
  • Zprávy ChangeCipherSpec oznamují, že následující komunikace bude šifrovaná.

OpenSSL API - Reference

Děkuji za pozornost. Nějaké otázky?