Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Knock! Knock! Who's There?
Search
Markus H
September 10, 2021
Programming
0
68
Knock! Knock! Who's There?
My talk from the Snakeoil Acadamy / PyCon AU 2021
Markus H
September 10, 2021
Tweet
Share
More Decks by Markus H
See All by Markus H
🐍 ❤️ 🦀 — Python loves Rust
markush
0
250
An Introduction To Kubernetes ☸
markush
0
110
Writing Safe Database Migrations (DjangoCon Europe 2021)
markush
0
14k
A Pony On The Move: How Migrations Work In Django 🐎
markush
0
13k
All Hands on Deck — Handling Security Issues
markush
0
14k
Logging Rethought 2: The Actions of Frank Taylor Jr. (PyCon UK 2019)
markush
0
64
Logging Rethought 2: The Actions of Frank Taylor Jr. (PyCon Australia 2019)
markush
1
210
Logging Rethought 2: The Actions of Frank Taylor Jr. (DjangoCon Europe 2019)
markush
0
13k
Less Obvious Things To Do With Django's ORM (PyCon SK 2019)
markush
0
13k
Other Decks in Programming
See All in Programming
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
120
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
150
chocoZAPサービス予約システムをNuxtで内製化した話
rizap_tech
0
160
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.3k
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
720
AWS CDKの推しポイントN選
akihisaikeda
1
240
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.2k
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
120
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
420
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
320
認証・認可の基本を学ぼう前編
kouyuume
0
250
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
How GitHub (no longer) Works
holman
316
140k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
730
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
Code Reviewing Like a Champion
maltzj
527
40k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Music & Morning Musume
bryan
46
7k
Side Projects
sachag
455
43k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Facilitating Awesome Meetings
lara
57
6.7k
Transcript
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Knock! Knock!
Who’s There?
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Hi, I’m
Markus Holtermann
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Hi, I’m
Markus Holtermann W e're hiring
Snakeoil Academy 2021 • PyCon AU • @m_holtermann The Beginning
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Marian Vanhaeren/Francesco
d'Errico
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Sketch by
Sydney Parkinson (1784) Portrait by Louis John Steele (1891)
Snakeoil Academy 2021 • PyCon AU • @m_holtermann
Snakeoil Academy 2021 • PyCon AU • @m_holtermann
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Snakeoil Academy
2021 • PyCon AU • @m_holtermann # scrypt >>> import base64, hashlib, secrets >>> salt = secrets.token_bytes(16) >>> password = b"my p4ssw0rd!"0 >>> hash = hashlib.scrypt(password, salt=salt, n=2**14, r=8, p=1, maxmem=0, dklen=64).hex() >>> base64.b64encode(hash).decode('ascii').strip() '8ln2EySYjOZRSLaIzjvaOaQQfGshxdH7vxptMyWo9zWJbM1glu0K8LbZf56QH+GefdiCP079IErDhVw UmPsRzQ==' # argon2 >>> from argon2 import PasswordHasher >>> hasher = PasswordHasher() >>> hasher.hash(password) '$argon2id$v=19$m=102400,t=2,p=8$d85wm2Zga0oSPiK6Uxm4zA$03Kc+n7lf3SpL+VYSbMnfA'
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Basic &
Digest Authentication RFC 2069, RFC 2617, RFC 7617
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Snakeoil Academy
2021 • PyCon AU • @m_holtermann WWW-Authenticate: Basic realm="PyConAU 2021", charset="UTF-8" Authorization: Basic Y3VybHlib2k6c25ha2VvaWwuYWNhZGVteQ== Server replies with: Client sends:
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Token Authentication
Authorization: Token soM3r4nDOmByt3s
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Bearer Authentication
RFC 6750 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIy MDIxIiwibmFtZSI6ImN1cmx5Ym9pIn0.W8-ixoAkGMe5Gs7c5 DLXFO0fCLypn2xhNExulY5iSEY
Snakeoil Academy 2021 • PyCon AU • @m_holtermann JWT https://groups.google.com/g/django-developers
/c/6oS9R2GwO4k/m/Rep92xfsAwAJ
Snakeoil Academy 2021 • PyCon AU • @m_holtermann JWT
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Snakeoil Academy
2021 • PyCon AU • @m_holtermann >>> import base64, json, hmac >>> key = b"snakeoil.academy" >>> data = {"uid": 123, "name": "curlyboi"} >>> payload = base64.b64encode(json.dumps(data).encode()) >>> mac = hmac.new(key, payload, digestmod="sha256") >>> payload + b"." + base64.b64encode(mac.digest()) >>> ret b'eyJ1aWQiOiAxMjMsICJuYW1lIjogImN1cmx5Ym9pIn0=.oJPUWmHZGJIXPCna082U8/SMseX+hZ5av Kjgt1TKovg=' >>> signed, signature = ret.split(b".", 1) >>> hmac.compare_digest(signature, ... base64.b64encode(hmac.new(key, signed, digestmod="sha256").digest())) True >>> json.loads(base64.b64decode(signed)) {'uid': 123, 'name': 'curlyboi'}
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Mutual Authentication
Snakeoil Academy 2021 • PyCon AU • @m_holtermann FIDO2 /
WebAuthn https://www.w3.org/TR/webauthn-2/
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Snakeoil Academy
2021 • PyCon AU • @m_holtermann
Snakeoil Academy 2021 • PyCon AU • @m_holtermann I! I
who? Identification and Authentication!
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Thank you!
Snakeoil Academy 2021 • PyCon AU • @m_holtermann Sources •
https://www.newscientist.com/article/dn9392-ancient-beads-imply-culture-older-than-we-thought/ • https://rss.onlinelibrary.wiley.com/doi/pdf/10.1111/j.1740-9713.2013.00706.x • https://www.smithsonianmag.com/history/tattoos-144038580/ • https://www.trulioo.com/blog/infographic-the-history-of-id-verification • https://github.blog/2021-04-05-behind-githubs-new-authentication-token-formats/