Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Problemy z JSON Web Tokens ... i garść rozwiązań
Search
Marcin Hoppe
October 14, 2018
Technology
0
62
Problemy z JSON Web Tokens ... i garść rozwiązań
Marcin Hoppe
October 14, 2018
Tweet
Share
More Decks by Marcin Hoppe
See All by Marcin Hoppe
Przepraszam, czy można?
marcinhoppe
0
30
Hacking OAuth 2.0
marcinhoppe
0
52
JSON Web Tokens. Problemy i rozwiązania
marcinhoppe
0
130
Other Decks in Technology
See All in Technology
OSSで50の競合と戦うためにやったこと
yamadashy
3
910
Findy Team+ QAチーム これからのチャレンジ!
findy_eventslides
0
490
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
初めてのDatabricks Apps開発
taka_aki
1
230
ソースを読むプロセスの例
sat
PRO
15
9.7k
HonoとJSXを使って管理画面をサクッと型安全に作ろう
diggymo
0
160
今この時代に技術とどう向き合うべきか
gree_tech
PRO
2
2.1k
OpenTelemetry が拡げる Gemini CLI の可観測性
phaya72
2
1.4k
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
3
130
「REALITY」3Dアバターシステムの7年分の拡張の歴史について
gree_tech
PRO
0
120
物体検出モデルでシイタケの収穫時期を自動判定してみた。 #devio2025
lamaglama39
0
260
Introdução a Service Mesh usando o Istio
aeciopires
1
270
Featured
See All Featured
Practical Orchestrator
shlominoach
190
11k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
560
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Thoughts on Productivity
jonyablonski
70
4.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Music & Morning Musume
bryan
46
6.9k
Transcript
Problemy z JSON Web Tokens … i garść rozwiązań @marcin_hoppe
wym. dżot @marcin_hoppe RFC 7519
JSON Web Tokens @marcin_hoppe
JSON Object Signing and Encryption JSON Web Signature JSON Web
Encryption JSON Web Keys JSON Web Algorithms JSON Web Tokens @marcin_hoppe
@marcin_hoppe Bezpieczne ciasteczka cookie
@marcin_hoppe OpenID Connect IdP API id_token access_token
@marcin_hoppe FORMAT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ zdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4 gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJ SMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
@marcin_hoppe FORMAT {"alg": "HS256", "typ": "JWT" } {"sub": "1234567890", "iss":
"https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis (HMAC)
https://jwt.io @marcin_hoppe NARZĘDZIE
@marcin_hoppe CRYPTO
@marcin_hoppe SZYFROWANIE
@marcin_hoppe Dystrybucja kluczy
@marcin_hoppe Dystrybucja kluczy IdP API id_token access_token
Jak sfałszować token? @marcin_hoppe
„alg”: „none” @marcin_hoppe PROBLEM 1
@marcin_hoppe PROBLEM 1 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ zdWIiOiJtaTZ8MDA3IiwibmFtZSI6IkphbWVzIEJ vbmQiLCJsaWNlbnNlX3RvX2tpbGwiOnRydWV9.0w wpvqdLFxhio2zCXObMXDFX1NRZNT3A7_n0uRKdCJ Yw404KYpO4bvIX2IKag8aJZ25690xo54ekcqlvKK PnFoLqjjtZJdo43npESp9XaLDoEHXU8nZlDLEg2W pHSZQXe4tLEy677eIULzze2OJhGSsKYPpKdjcS4c
Zc1fWvqA8
@marcin_hoppe PROBLEM 1 eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJz dWIiOiJtaTZ8MDA3IiwibmFtZSI6IkphbWVzIEJv bmQiLCJsaWNlbnNlX3RvX2tpbGwiOnRydWV9.
@marcin_hoppe PROBLEM 1 eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJz dWIiOiJzcGVjdHJlfDAwMSIsIm5hbWUiOiJFcm5z dCBTdGF2cm8gQmxvZmVsZCJ9.
RS256 ⇒ HS256 @marcin_hoppe PROBLEM 2
@marcin_hoppe PROBLEM 2 {"alg": ”RS256", "typ": "JWT" } {"sub": "1234567890",
"iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis RSA (klucz publiczny)
@marcin_hoppe PROBLEM 2 {"alg": ”HS256", "typ": "JWT" } {"sub": "1234567890",
"iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis HMAC (klucz publiczny)
@marcin_hoppe PROBLEM 2 {"alg": ”HS256", "typ": "JWT" } {"sub": ”0000000001",
"iss": "https://issuer.com", "aud": "https://myapi.com", "exp": 1516239022 } + podpis HMAC (klucz publiczny)
Słabe klucze HMAC @marcin_hoppe PROBLEM 3
Klucze HMAC H4sł4 to nie klucze hashcat i słowniki Ten
sam klucz dla wszystkich Brak KDFów @marcin_hoppe PROBLEM 3
@marcin_hoppe Podmiana tokenów IdP #1 API #1 PROBLEM 4
@marcin_hoppe Podmiana tokenów IdP #1 API #2 PROBLEM 4
@marcin_hoppe PROBLEM 4 {"alg": ”RS256", "typ": "JWT" } {"sub": "1234567890",
"exp": 1516239022 } + podpis RSA (klucz publiczny)
@marcin_hoppe PROBLEM 4 {"alg": ”RS256", "typ": "JWT" } {"sub": "1234567890",
"iss": "https://idp1.com", "aud": "https://api1.com", "exp": 1516239022 } + podpis RSA (klucz publiczny)
Co robić? „alg”: „none” Wymuszać algorytm i klucz Ostrożnie z
HMAC Weryfikować claimy @marcin_hoppe
A może są inne formaty? @marcin_hoppe
Tokenowy zawrót głowy @marcin_hoppe
Platofrm Agnostic SEcurity TOkens Ciastka i tokeny Local: poufność i
integralność z kluczem symetrycznym Public: integralność z kluczem publicznym @marcin_hoppe
@marcin_hoppe CRYPTO
@marcin_hoppe FORMAT v2.local.97TTOvgwIxNGvV80XKiGZg_kD3tsXM_ -qB4dZGHOeN1cTkgQ4PnW8888l802W8d9AvEGnoN BY3BnqHORy8a5cC8aKpbA0En8XELw2yDk2f1sVOD yfnDbi6rEGMY3pSfCbLWMM2oHJxvlEl2XbQ
@marcin_hoppe FORMAT {"alg” : ”XChaCha20-Poly1305", ”nonce": 0000...0} {”data": ”this is
a signed message", ”exp” : "2019-01-01T00:00:00+00:00”} Stopka (AEAD): (pusty)
PASETO vs JWT Problem #1 Problem #2 Problem #3 Problem
#4 @marcin_hoppe
Wnioski wym. dżot Zastosowanie kryptografii jest trudne Są alternatywy @marcin_hoppe
Marcin Hoppe Engineering Manager Product Security Auth0 Security Working Group
Node.js Foundation marcin.hoppe @ acm.org twitter.com/Marcin_Hoppe
Ask me anything! @marcin_hoppe