SlideShare a Scribd company logo
Cracking JWT tokens: a tale of magic,
Node.js and parallel computing
CODEMOTION MILAN - SPECIAL EDITION 10 - 11 NOVEMBER 2017
Luciano Mammino ( )@loige
loige.link/cracking-jwt-codemotion 1
loige.link/cracking-jwt-codemotion
2
About Luciano
Let's connect:
- -Twitter GitHub Linkedin
https://loige.co
Principal Application Engineer
3
Based on prior work
Chapters 10 & 11 in (book)
2-parts article on RisingStack:
" "
Node.js design patterns
ZeroMQ & Node.js Tutorial - Cracking JWT Tokens
github.com/lmammino/jwt-cracker
github.com/lmammino/distributed-jwt-cracker
4
Agenda
What's JWT
How it works
Testing JWT tokens
Brute-forcing a token!
5
RFC 7519
JSON Web Token (JWT)
is a compact, URL-safe means of representing claims to be transferred between
two parties. The claims in a JWT are encoded as a JSON object that is used as the
payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON
Web Encryption (JWE) structure, enabling the claims to be digitally signed or
integrity protected with a Message Authentication Code (MAC) and/or
encrypted.
6
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVC
J9.eyJtZXNzYWdlIjoiaGVsbG8gY29kZ
W1vdGlvbiJ9.LfQ4AOIjQPeAotn237m
5yiMgJacC_00ePvlFC4fyRXE
7
OK
Let's try to make it
simpler...
8
JWT is...
An URL safe, stateless protocol
for transferring claims
9
URL safe?
stateless?
claims?
10
URL Safe...
It's a string that can be safely used as part of a URL
(it doesn't contain URL separators like "=", "/", "#" or "?")
11
Stateless?
Token validity can be verified without having to
interrogate a third-party service
12
What is a claim?
13
some certified information
identity (login session)
authorisation to perform actions (api key)
ownership (a ticket belongs to somebody)
14
also...
validity constraints
token time constraints (dont' use before/after)
audience (a ticket only for a specific concert)
issuer identity (a ticket issued by a specific reseller)
15
also...
protocol information
Type of token
Algorithm
16
In general
All the bits of information transferred through the token
17
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ
9.eyJtZXNzYWdlIjoiaGVsbG8gY29kZW1
vdGlvbiJ9.LfQ4AOIjQPeAotn237m5yiM
gJacC_00ePvlFC4fyRXE
18
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ
9.eyJtZXNzYWdlIjoiaGVsbG8gY29kZW1
vdGlvbiJ9.LfQ4AOIjQPeAotn237m5yiM
gJacC_00ePvlFC4fyRXE
19
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ
9.eyJtZXNzYWdlIjoiaGVsbG8gY29kZW1
vdGlvbiJ9.LfQ4AOIjQPeAotn237m5yiM
gJacC_00ePvlFC4fyRXE
3 parts
separated by "."
20
HEADER:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
PAYLOAD:
eyJtZXNzYWdlIjoiaGVsbG8gY29kZW1vd
GlvbiJ9
SIGNATURE:
LfQ4AOIjQPeAotn237m5yiMgJacC_00e
PvlFC4fyRXE 21
Header and Payload are
encoded
let's decode them!
Base64Url
22
HEADER:
{"alg":"HS256","typ":"JWT"}
The decoded info is JSON!
PAYLOAD:
{"message":"hello codemotion"}
23
HEADER:
{"alg":"HS256","typ":"JWT"}
alg: the kind of algorithm used
"HS256" HMACSHA256 Signature
(secret based hashing)
"RS256" RSASHA256 Signature
(public/private key hashing)
24
PAYLOAD:
{"message":"hello codemotion"}
Payload can be anything you can
express in JSON
25
PAYLOAD:
registered (or standard) claims
iss: issuer ID ("auth0")
sub: subject ID ("johndoe@gmail.com")
aud: audience ID ("https://someapp.com")
exp: expiration time ("1510047437793")
nbf: not before ("1510046471284")
iat: issue time ("1510045471284")
jti: Unique identifier ("36c56616-2125-4a6e-b333-bc8327bd39d6")
26
So far it's just metadata...
What makes it safe?
27
SIGNATURE:
LfQ4AOIjQPeAotn237m5yiMgJacC_00e
PvlFC4fyRXE
A Base64URL encoded cryptographic
signature of the header and the payload
28
With HS256
signature = HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
password
)
header payload secret SIGNATURE+ + =
29
If a system knows the secret
It can verify the authenticity
of the token
30
Playground for JWT
JWT.io
31
An example
Session token
32
Classic implementation
Without JWT
33
Browser
1. POST /login
2. generate session
id:"Y4sHySEPWAjc"
user:"luciano"
user:"luciano"
pass:"mariobros"
3. session cookie
SID:"Y4sHySEPWAjc"
4. GET /profile
5. query
id:"Y4sHySEPWAjc"
6. record
id:"Y4sHySEPWAjc"
user:"luciano"
7. (page)
<h1>hello luciano</h1>
Server
34
Sessions
Database
id:"Y4sHySEPWAjc"
user:"luciano"SID:"Y4sHySEPWAjc"
JWT implementation
(NO session database)
35
Browser
1. POST /login
3. JWT Token
{"sub":"luciano"}
user:"luciano"
pass:"mariobros"
6. (page)
<h1>hello luciano</h1>
Server
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ
zdWIiOiJsdWNpYW5vIn0.V92iQaqMrBUhkgEAyRa
CY7pezgH-Kls85DY8wHnFrk4
4. GET /profile
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ
zdWIiOiJsdWNpYW5vIn0.V92iQaqMrBUhkgEAyRa
CY7pezgH-Kls85DY8wHnFrk4
Token says this is "luciano"
Signature looks OK
5. verify
Create Token for "luciano"
Add signature
2. create
JWT
36
JWT LOOKS GREAT!
But there are pitfalls...
37
Data is public
If you have a token,
you can easily read the claims!
You only have to Base64Url-decode the token header and payload
and you have a readable JSON
38
No token database...
...maybe I can forge a token and
nobody will know it's not authentic!
39
DEMO
JWT based web app
github.com/lmammino/sample-jwt-webapp
40
Given an HS256 signed JWT
We can try to "guess" the password!
41
How difficult can it be?
42
Let's build a distributed JWT
token cracker!
npm.im/distributed-jwt-cracker
43
The idea...
Take a valid JWT token
try to "guess" the secret and validate the token against it
if the token is validated, then you found the secret!
YOU CAN NOW CREATE AND SIGN ANY JWT TOKEN FOR THIS APPLICATION!
44
Tools of the trade
Node.js
module
ZeroMQ
jsonwebtoken
45
ZeroMQ
an open source embeddable
networking library and a
concurrency framework
46
The brute force problem
"virtually infinite" solutions space
all the strings (of any length) that can be generated within a given alphabet
(empty string), a, b, c, 1, aa, ab, ac, a1, ba, bb, bc, b1, ca, cb, cc, c1, 1a, 1b, 1c, 11,
aaa, aab, aac, aa1, aba, ...
47
bijection (int) (string)
if we sort all the possible strings over an alphabet
Alphabet = [a,b]
0 ⟶ (empty string)
1 ⟶ a
2 ⟶ b
3 ⟶ aa
4 ⟶ ab
5 ⟶ ba
6 ⟶ bb
7 ⟶ aaa
8 ⟶ aab
9 ⟶ aba
10 ⟶ abb
11 ⟶ baa
12 ⟶ bab
13 ⟶ bba
14 ⟶ bbb
15 ⟶ aaaa
16 ⟶ aaab
17 ⟶ aaba
18 ⟶ aabb
...
48
Architecture
Server
Initialised with a valid JWT token
and an alphabet
coordinates the brute force
attempts among connected
clients
Client
knows how to verify a token
against a given secret
receives ranges of secrets to
check
49
Networking patterns
Router channels:
dispatch jobs
receive results
Pub/Sub channel:
termination
signal
50
Server state
the solution space can be sliced into
chunks of fixed length (batch size)
51
Initial server state
{
"cursor": 0,
"clients": {}
}
52
The first client connects
{
"cursor": 3,
"clients": {
"client1": [0,2]
}
}
53
Other clients connect
{
"cursor": 9,
"clients": {
"client1": [0,2],
"client2": [3,5],
"client3": [6,8]
}
} 54
Client 2 finishes its job
{
"cursor": 12,
"clients": {
"client1": [0,2],
"client2": [9,11],
"client3": [6,8]
}
} 55
let cursor = 0
const clients = new Map()
const assignNextBatch = client => {
const from = cursor
const to = cursor + batchSize - 1
const batch = [from, to]
cursor = cursor + batchSize
client.currentBatch = batch
client.currentBatchStartedAt = new Date()
return batch
}
const addClient = channel => {
const id = channel.toString('hex')
const client = {id, channel, joinedAt: new Date()}
assignNextBatch(client)
clients.set(id, client)
return client
} Server
56
Messages flow
JWT Cracker
Server
JWT Cracker
Client
1. JOIN
2. START
{token, alphabet, firstBatch}
3. NEXT
4. BATCH
{nextBatch}
5. SUCCESS
{secret}
57
const router = (channel, rawMessage) => {
const msg = JSON.parse(rawMessage.toString())
switch (msg.type) {
case 'join': {
const client = addClient(channel)
const response = {
type: 'start',
id: client.id,
batch: client.currentBatch,
alphabet,
token
}
batchSocket.send([channel, JSON.stringify(response)])
break
}
case 'next': {
const batch = assignNextBatch(clients.get(channel.toString('hex')))
batchSocket.send([channel, JSON.stringify({type: 'batch', batch})])
break
}
case 'success': {
const pwd = msg.password
// publish exit signal and closes the app
signalSocket.send(['exit', JSON.stringify({password: pwd, client: channel.toString('hex')})], 0, () => {
batchSocket.close()
signalSocket.close()
exit(0)
})
break
}
}
}
Server
58
let id, variations, token
const dealer = rawMessage => {
const msg = JSON.parse(rawMessage.toString())
const start = msg => {
id = msg.id
variations = generator(msg.alphabet)
token = msg.token
}
const batch = msg => {
processBatch(token, variations, msg.batch, (pwd, index) => {
if (typeof pwd === 'undefined') {
// request next batch
batchSocket.send(JSON.stringify({type: 'next'}))
} else {
// propagate success
batchSocket.send(JSON.stringify({type: 'success', password: pwd, index}))
exit(0)
}
})
}
switch (msg.type) {
case 'start':
start(msg)
batch(msg)
break
case 'batch':
batch(msg)
break
}
}
Client
59
How a chunk is processed
Given chunk [3,6] over alphabet "ab"
[3,6]
3 ⟶ aa
4 ⟶ ab
5 ⟶ ba
6 ⟶ bb
⇠ check if one of
the strings is the
secret that validates
the current token
60
const jwt = require('jsonwebtoken')
const generator = require('indexed-string-variation').generator;
const variations = generator('someAlphabet')
const processChunk = (token, from, to) => {
let pwd
for (let i = from; i < to; i++) {
pwd = variations(i)
jwt.verify(token, pwd, {
ignoreExpiration: true,
ignoreNotBefore: true
})
// finished, password found
return ({found: i})
}
// finished, password not found
return null
} Client
61
Demo
62
Closing off
63
Is JWT safe to use?
64
Definitely
YES!
65
but...
66
Use strong (≃long) passwords and
keep them SAFE!
Or, even better
Use RS256 (RSA public/private key
pair) signature
Use it wisely!
67
Should I be worried about
brute force?
68
Not really
... As long as you know the basic rules
(and the priorities) to defend yourself
69
A challenge for you:
Can you crack this one?
eyJhbGciOiJIUzI1NiIsInR5cCI6I
kpXVCJ9.eyJjcmFjayI6Im1lIiwia
WYiOiJ5b3UgY2FuIn0.tI8zO0gj6W
BgaVoKNeHwCKOxOlr3Jo7OqKHwMgr
qJJE
If you can, tweet the secret to
I have a prize for the first one!
@loige
70
{"THANK":"YOU"}
@loige
https://loige.co
loige.link/cracking-jwt-codemotion
71

More Related Content

ODP
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
PPTX
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
PDF
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
PPTX
Code generation with javac plugin
PPTX
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
PDF
Mobile Open Day: React Native: Crossplatform fast dive
PPTX
Node.js System: The Approach
PDF
Introduction to Node.js Platform
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Code generation with javac plugin
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Mobile Open Day: React Native: Crossplatform fast dive
Node.js System: The Approach
Introduction to Node.js Platform

What's hot (20)

PDF
Introduction to Asynchronous scala
PDF
Javascript Promises/Q Library
PDF
Gradle in a Polyglot World
PDF
Nio
PDF
"Real-time Collaborative Text Editing on Grammarly’s Front-End Team" Oleksii...
PDF
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
PPT
JavaScript - An Introduction
PPTX
Javascript session 01 - Introduction to Javascript
PPTX
Real world functional reactive programming
PPTX
Avoiding Callback Hell with Async.js
PDF
Midiendo la calidad de código en WTF/Min (Revisado EUI Abril 2014)
PDF
We Are All Testers Now: The Testing Pyramid and Front-End Development
PDF
The Parenscript Common Lisp to JavaScript compiler
PDF
vienna.js - Automatic testing of (RESTful) API documentation
ODP
Asynchronous I/O in NodeJS - new standard or challenges?
PPTX
Java7 - Top 10 Features
PPT
PPTX
Hybrid Applications
PPSX
Writing code that writes code - Nguyen Luong
Introduction to Asynchronous scala
Javascript Promises/Q Library
Gradle in a Polyglot World
Nio
"Real-time Collaborative Text Editing on Grammarly’s Front-End Team" Oleksii...
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
JavaScript - An Introduction
Javascript session 01 - Introduction to Javascript
Real world functional reactive programming
Avoiding Callback Hell with Async.js
Midiendo la calidad de código en WTF/Min (Revisado EUI Abril 2014)
We Are All Testers Now: The Testing Pyramid and Front-End Development
The Parenscript Common Lisp to JavaScript compiler
vienna.js - Automatic testing of (RESTful) API documentation
Asynchronous I/O in NodeJS - new standard or challenges?
Java7 - Top 10 Features
Hybrid Applications
Writing code that writes code - Nguyen Luong
Ad

Viewers also liked (20)

PDF
Lorenzo Barbieri - Serverless computing in Azure: Functions, Logic Apps and m...
PDF
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
PDF
Alison B Lowndes - Fueling the Artificial Intelligence Revolution with Gaming...
PDF
Lorna Mitchell - Becoming Polyglot - Codemotion Milan 2017
PDF
Valentina Mazzoni - GDG Italia Meetup - Codemotion Milan 2017
PDF
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
PDF
Fabrizio Cornelli - Antropologia di un Dev(Sec)Ops secondo il modello Hunter ...
PDF
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
PDF
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
PDF
Downtime is not an option - day 2 operations - Jörg Schad
PDF
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
PPTX
How to build an HA container orchestrator infrastructure for production – Giu...
PDF
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
PDF
From Doctor to Coder: A Whole New World? - Aisha Sie - Codemotion Amsterdam 2017
PDF
Roberto Clapis/Stefano Zanero - Night of the living vulnerabilities: forever-...
PPTX
Dark patterns and mobile UX design - Emilia Ciardi - Codemotion Amsterdam 2017
PPTX
Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
PDF
Nicola Corti/Valentina Mazzoni - GDG Italia Meetup - Codemotion Milan 2017
PDF
Mobile UX for user engagement and monetization - Emilia Ciardi - Codemotion R...
PDF
Diego Viganò - Milano Chatbots Meetup - Codemotion Milan 2017
Lorenzo Barbieri - Serverless computing in Azure: Functions, Logic Apps and m...
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
Alison B Lowndes - Fueling the Artificial Intelligence Revolution with Gaming...
Lorna Mitchell - Becoming Polyglot - Codemotion Milan 2017
Valentina Mazzoni - GDG Italia Meetup - Codemotion Milan 2017
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
Fabrizio Cornelli - Antropologia di un Dev(Sec)Ops secondo il modello Hunter ...
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
Downtime is not an option - day 2 operations - Jörg Schad
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
How to build an HA container orchestrator infrastructure for production – Giu...
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
From Doctor to Coder: A Whole New World? - Aisha Sie - Codemotion Amsterdam 2017
Roberto Clapis/Stefano Zanero - Night of the living vulnerabilities: forever-...
Dark patterns and mobile UX design - Emilia Ciardi - Codemotion Amsterdam 2017
Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
Nicola Corti/Valentina Mazzoni - GDG Italia Meetup - Codemotion Milan 2017
Mobile UX for user engagement and monetization - Emilia Ciardi - Codemotion R...
Diego Viganò - Milano Chatbots Meetup - Codemotion Milan 2017
Ad

Similar to Luciano Mammino - Cracking JWT tokens: a tale of magic, Node.JS and parallel computing - Codemotion Milan 2017 (20)

PDF
Cracking JWT tokens: a tale of magic, Node.js and parallel computing - Code E...
PDF
Cracking JWT tokens: a tale of magic, Node.JS and parallel computing - Node.j...
PDF
Cracking JWT tokens: a tale of magic, Node.js and parallel computing - WebReb...
PDF
Cracking JWT tokens: a tale of magic, Node.js and parallel computing - FullSt...
PDF
Landscape
PDF
Landscape
PDF
5 easy steps to understanding json web tokens (jwt)
PDF
Modern API Security with JSON Web Tokens
PPTX
Json Web Token - JWT
PDF
JWT(JSON WEB TOKEN) hand book for beginner
PDF
Building Web APIs that Scale
PDF
Jwt Security
PDF
Are You Properly Using JWTs?
PPTX
Micro Web Service - Slim and JWT
PDF
JSON Web Tokens Will Improve Your Life
PDF
Matthew Eernisse, NodeJs, .toster {webdev}
PDF
Oauth Nightmares Abstract OAuth Nightmares
PDF
[WTMC 2019] Detecting malicious campaigns in obfuscated JavaScript with scala...
PDF
Introduction to JWT and How to integrate with Spring Security
PDF
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)
Cracking JWT tokens: a tale of magic, Node.js and parallel computing - Code E...
Cracking JWT tokens: a tale of magic, Node.JS and parallel computing - Node.j...
Cracking JWT tokens: a tale of magic, Node.js and parallel computing - WebReb...
Cracking JWT tokens: a tale of magic, Node.js and parallel computing - FullSt...
Landscape
Landscape
5 easy steps to understanding json web tokens (jwt)
Modern API Security with JSON Web Tokens
Json Web Token - JWT
JWT(JSON WEB TOKEN) hand book for beginner
Building Web APIs that Scale
Jwt Security
Are You Properly Using JWTs?
Micro Web Service - Slim and JWT
JSON Web Tokens Will Improve Your Life
Matthew Eernisse, NodeJs, .toster {webdev}
Oauth Nightmares Abstract OAuth Nightmares
[WTMC 2019] Detecting malicious campaigns in obfuscated JavaScript with scala...
Introduction to JWT and How to integrate with Spring Security
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)

More from Codemotion (20)

PDF
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
PDF
Pompili - From hero to_zero: The FatalNoise neverending story
PPTX
Pastore - Commodore 65 - La storia
PPTX
Pennisi - Essere Richard Altwasser
PPTX
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
PPTX
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
PPTX
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
PPTX
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
PDF
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
PDF
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
PDF
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
PDF
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
PDF
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
PDF
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
PPTX
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
PPTX
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
PDF
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
PDF
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
PDF
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
PDF
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Pompili - From hero to_zero: The FatalNoise neverending story
Pastore - Commodore 65 - La storia
Pennisi - Essere Richard Altwasser
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Encapsulation theory and applications.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
20250228 LYD VKU AI Blended-Learning.pptx
Programs and apps: productivity, graphics, security and other tools
Review of recent advances in non-invasive hemoglobin estimation
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Empathic Computing: Creating Shared Understanding
Encapsulation theory and applications.pdf
cuic standard and advanced reporting.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Encapsulation_ Review paper, used for researhc scholars
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectroscopy.pptx food analysis technology
Assigned Numbers - 2025 - Bluetooth® Document
MIND Revenue Release Quarter 2 2025 Press Release
Advanced methodologies resolving dimensionality complications for autism neur...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
The AUB Centre for AI in Media Proposal.docx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

Luciano Mammino - Cracking JWT tokens: a tale of magic, Node.JS and parallel computing - Codemotion Milan 2017