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
64
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
31
Hacking OAuth 2.0
marcinhoppe
0
53
JSON Web Tokens. Problemy i rozwiązania
marcinhoppe
0
130
Other Decks in Technology
See All in Technology
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
0
110
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
170
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
210
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
100
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
130
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
110
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
Agent Skils
dip_tech
PRO
0
130
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
150
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
180
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Design in an AI World
tapps
0
150
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
Tell your own story through comics
letsgokoyo
1
810
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
What does AI have to do with Human Rights?
axbom
PRO
0
2k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
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