Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JSON Web Tokens. Problemy i rozwiązania

JSON Web Tokens. Problemy i rozwiązania

Jeżeli logowaliście się niedawno w Internecie, to jest spora szansa, że informacje o waszej tożsamości były przesyłane między serwerami w zakodowane w formacie JSON Web Tokens. Takie tokeny są wykorzystywane w protokole OpenID Connect, stosuje się je także do kontroli dostępu do API opartych o HTTP. Czy ich bezpieczeństwo idzie w parze z prostotą i popularnością?

Marcin pokaże wam szereg problemów, które w ostatnich latach trapiły programistów korzystających z JWT oraz poda garść wskazówek jak sobie z tymi problemami poradzić. Wisienką na torcie będzie krótka wycieczka w świat mniej popularnych formatów, takich jak PASETO.

Avatar for Marcin Hoppe

Marcin Hoppe

July 03, 2018
Tweet

More Decks by Marcin Hoppe

Other Decks in Programming

Transcript

  1. JSON Web Tokens Image Background • JWT (wym. dżot) •

    URL & cookies • Security claims > OpenID Connect > OAuth 2.0
  2. JavaScript Object Signing and Encryption • JSON Web Signature •

    JSON Web Encryption • JSON Web Keys + JSON Web Algorithms • JSON Web Tokens
  3. Anatomia JWT { "alg": "HS256", "typ": "JWT" } { "sub":

    "1234567890", "iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis (HMAC)
  4. Kryptograficzny zawrót głowy • Podpis • Szyfrowanie • Podpis +

    szyfrowanie • RSA PKCS1v1.5, RSA OAEP, RSA PSS, ECDSA, ECDH-ES, AES-GCM • Szyfrowanie klucza czy wiadomości?
  5. “alg”: “none” { "alg": "HS256" "none", "typ": "JWT" } {

    "sub": "1234567890", "iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis
  6. RS256 → HS256 { "alg": "RS256" "HS256", "typ": "JWT" }

    { "sub": "1234567890", "iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis RSA HMAC(klucz publiczny)
  7. Weryfikacja claimów { "alg": "HS256", "typ": "JWT" } { "sub":

    "1234567890", "iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis / HMAC
  8. Alternatywne formaty tokenów • Fernet • Macaroons • Iron •

    Platform Agnostic SEcurity TOkens (PASETO)
  9. PASETO • Dwa zastosowania: ciasteczka i tokeny • Local: poufność

    i integralność z kluczem symetrycznym • Public: integralność z kluczem publicznym
  10. PASETO • Dwie wersje • v1: kryptografia klasyczna (RSA, AES,

    SHA) • v2: libsodium (XChaCha20-Poly1305 i EdDSA / Curve25519)
  11. Anatomia PASETO Alg: XChaCha20-Poly1305 Nonce: 0000...0 Payload: { "data":"this is

    a signed message", "exp":"2019-01-01T00:00:00+00:00" } Footer:
  12. PASETO a JWT • ”alg”: “none” • RS256 → HS256

    • Statyczne klucze: to samo! • Podmiana tokenów: weryfikacja claimów!