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
70
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Problemy z JSON Web Tokens ... i garść rozwiązań
Marcin Hoppe
October 14, 2018
More Decks by Marcin Hoppe
See All by Marcin Hoppe
Przepraszam, czy można?
marcinhoppe
0
35
Hacking OAuth 2.0
marcinhoppe
0
62
JSON Web Tokens. Problemy i rozwiązania
marcinhoppe
0
140
Other Decks in Technology
See All in Technology
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
1.4k
plamo-3-translateの開発
pfn
PRO
0
220
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
410
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
180
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
180
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
140
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
0
150
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
32
26k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
LLMリーダーボードアップデートに向けたAgentic Math_SWEのトレースについて
nejumi
0
170
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
270
なぜ、あなたのエージェントは言うことを聞かないのか
segavvy
1
590
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
650
30 Presentation Tips
portentint
PRO
1
360
HDC tutorial
michielstock
2
760
エンジニアに許された特別な時間の終わり
watany
108
250k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
400
Bash Introduction
62gerente
615
220k
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