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.

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!