2025-06-26 12:19:00 +02:00
\documentclass [aspectratio=169, lualatex, handout] { beamer}
\makeatletter \def \input @path{ { theme/} } \makeatother \usetheme { cipher}
\title { Applied Cryptography}
\author { Nadim Kobeissi}
\institute { American University of Beirut}
\instituteimage { images/aub_ white.png}
\date { \today }
\coversubtitle { CMPS 297AD/396AI\\ Fall 2025}
\coverpartname { Part 2: Real-World Cryptography}
\covertopicname { 2.5: High-Assurance Cryptography}
\coverwebsite { https://appliedcryptography.page}
\begin { document}
\begin { frame} [plain]
\titlepage
\end { frame}
2025-07-06 16:37:24 +02:00
\section { Introduction}
\begin { frame} { Securely implementing cryptography}
2025-06-26 12:19:00 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Designing, implementing, and deploying cryptographic mechanisms is notoriously hard
\item Regular discoveries of:
\begin { itemize}
\item High-profile design flaws
\item Devastating implementation bugs
\item Side-channel vulnerabilities
\end { itemize}
\item Even in \textbf { widely deployed} mechanisms!
2025-06-26 12:19:00 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Three levels of complexity}
\begin { center}
\Large
\begin { enumerate}
\item \textbf { Design Level}
\item \textbf { Implementation Level}
\item \textbf { Deployment Level}
\end { enumerate}
\vspace { 1em}
\normalsize
Each level is highly involved and fraught with pitfalls
\end { center}
\end { frame}
\begin { frame} { Design level challenges}
\begin { itemize}
\item Must achieve specific security goals
\item Against well-defined classes of attackers
\item Requires composing sophisticated building blocks:
\begin { itemize}
\item Abstract constructions \rightarrow \ Primitives
\item Primitives \rightarrow \ Protocols
\item Protocols \rightarrow \ Systems
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { Implementation level challenges}
\begin { itemize}
\item High-level designs need concrete functional details:
\begin { itemize}
\item Data formats
\item Session state
\item Programming interfaces
\end { itemize}
\item Must optimize for:
\begin { itemize}
\item Interoperability
\item Performance
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { Deployment level challenges}
\begin { itemize}
\item Must account for low-level threats absent at design level
\item Primary concern: Side-channel attacks
\item Implementations must protect against various leakage channels
\item Ad-hoc constant-time coding recipes are:
\begin { itemize}
\item Tricky to implement
\item May not cover all leakage channels
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { Vast attack surface}
\begin { center}
\Large Attackers can:
\vspace { 1em}
\end { center}
\begin { itemize}
\item Break high-level designs
\item Exploit implementation bugs
\item Recover secrets via side-channels
\item \textbf { Any combination of the above!}
\end { itemize}
\end { frame}
\begin { frame} { Current methods fall short}
\begin { itemize}
\item \textbf { Pen-and-paper proofs} :
\begin { itemize}
\item Consider only pared-down ``cores''
\item Still highly complex and error-prone
\end { itemize}
\item \textbf { Aggressive optimization} :
\begin { itemize}
\item Increases risk of bugs
\item Difficult to catch by testing or auditing
\end { itemize}
\item \textbf { Current modus operandi} : Select few experts with rudimentary tools
\end { itemize}
\end { frame}
\begin { frame} { The problem}
\begin { center}
\Large
The current approach \textbf { cannot keep pace} with the rate of innovation and development in cryptography
\vspace { 2em}
\normalsize
We need a better solution...
\end { center}
\end { frame}
\begin { frame} { Missing: Real-world software complexity}
\begin { itemize}
\item Pen-and-paper proofs consider \textbf { isolated algorithms}
\item Real deployments involve massive software stacks:
\begin { itemize}
\item Operating system layers
\item Network protocol implementations
\item Library dependencies
\item Hardware abstraction layers
\end { itemize}
\item Each layer introduces:
\begin { itemize}
\item New attack surfaces
\item Integration complexities
\item Performance constraints
\item Unexpected interactions
\end { itemize}
\item \textbf { Result} : Security proofs may not hold in practice!
\end { itemize}
\end { frame}
2025-07-02 11:25:02 +02:00
2025-07-06 16:37:24 +02:00
\begin { frame} { Enter: Computer-Aided Cryptography (CAC)}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Active area of research addressing these challenges
\item Encompasses \textbf { formal, machine-checkable} approaches to:
\begin { itemize}
\item Designing cryptography
\item Analyzing cryptography
\item Implementing cryptography
\end { itemize}
\item Different tools address different parts of the problem space
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { CAC at different levels}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item \textbf { Design level} : Tools manage complexity of security proofs
\begin { itemize}
\item Can reveal subtle flaws
\item May discover unknown attacks
\end { itemize}
\item \textbf { Implementation level} : Guarantee correct behavior
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Even for highly optimized code
\item On all possible inputs
2025-06-27 15:46:11 +02:00
\end { itemize}
2025-07-06 16:37:24 +02:00
\item \textbf { Deployment level} : Check side-channel protections
\end { itemize}
\end { frame}
\begin { frame} { Combining the tools}
\begin { center}
\Large
Individual tools may only address \textit { part} of the problem
\vspace { 1em}
But when \textbf { combined} , they provide a \textbf { high degree of assurance}
\end { center}
\end { frame}
\begin { frame} { Success stories: standards}
\begin { itemize}
\item Computer-aided security analyses were influential in \textbf { TLS 1.3} standardization
\item Multiple formal verification efforts contributed
\item Helped identify and fix potential vulnerabilities before deployment
\end { itemize}
\end { frame}
\begin { frame} { Success stories: real-world deployment}
\begin { itemize}
\item \textbf { \haclstar library} : Integrated into Mozilla Firefox's NSS
\item \textbf { Fiat Cryptography} : Elliptic curve code in Google's BoringSSL
\item \textbf { EverCrypt} : Routines used in Linux kernel's Zinc crypto library
2025-06-27 15:46:11 +02:00
\end { itemize}
2025-07-06 16:37:24 +02:00
\begin { center}
\textbf { Formally verified code at Internet scale!}
\end { center}
2025-06-27 15:46:11 +02:00
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Growing enthusiasm}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Rapid emergence of a dynamic community:
\begin { itemize}
\item Theoretical cryptographers
\item Applied cryptographers
\item Cryptography engineers
\item Formal methods practitioners
\end { itemize}
\item Goal: Achieve broader adoption of CAC
\item Blending ideas from many fields
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Risks and challenges}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item CAC risks becoming a \textbf { victim of its own success}
\item \textbf { Trust can be undermined by} :
\begin { itemize}
\item Difficulty understanding guarantees
\item Fine-print caveats of CAC artifacts
\end { itemize}
\item Field is increasingly:
\begin { itemize}
\item Broad
\item Complex
\item Rapidly evolving
\end { itemize}
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Pressing challenges ahead}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item \textbf { Post-quantum transition} : Expected transition to post-quantum cryptography
\item \textbf { Scaling challenges} : Moving from lower-level primitives to whole cryptographic systems
\item No one has complete understanding of every facet
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\section { Design-Level Security}
\begin { frame} { Two flavors of design-level security}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Developed over years in \textbf { two separate communities} :
\vspace { 0.5em}
\item \textbf { Symbolic Security}
\begin { itemize}
\item Formal methods community
\item Abstract model of cryptography
\end { itemize}
\vspace { 0.5em}
\item \textbf { Computational Security}
\begin { itemize}
\item Cryptography community
\item Concrete algorithms and probabilities
\end { itemize}
2025-06-27 15:46:11 +02:00
\end { itemize}
2025-07-06 16:37:24 +02:00
\begin { center}
\textit { Two complementary strands of work}
\end { center}
2025-06-27 15:46:11 +02:00
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Symbolic model: Cryptography as algebra}
\begin { center}
\Large
Treats cryptography as \textbf { perfect black boxes}
\end { center}
\vspace { 1em}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Messages are abstract \textbf { symbols} , not bits
\item Encryption is a symbolic function
\item Can only decrypt with \textbf { exact} key
\item No partial information leakage
\end { itemize}
\vspace { 0.5em}
\textbf { Think of it like:}
\begin { itemize}
\item A locked box that's either fully open or fully closed
\item No way to peek inside without the key
\item Adversary can only manipulate whole messages
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Computational model: Cryptography as algorithms}
\begin { center}
\Large
Models real cryptography with \textbf { concrete algorithms}
\end { center}
\vspace { 1em}
\begin { itemize}
\item Messages are \textbf { bitstrings} of specific length
\item Encryption is a probabilistic algorithm
\item Security holds with \textbf { high probability}
\item Adversaries have \textbf { bounded computational power}
\end { itemize}
\vspace { 0.5em}
\textbf { Think of it like:}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item A safe that takes time to crack
\item Harder safes take more time
\item Given enough time, anything can be broken
\item We just ensure it takes \textit { too long} to be practical
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Symbolic vs. Computational: Key differences}
\begin { center}
\begin { tabular} { |l|l|l|}
\hline
\textbf { Aspect} & \textbf { Symbolic} & \textbf { Computational} \\
\hline
Messages & Abstract terms & Bitstrings \\
\hline
Adversary & Rule-based & Probabilistic algorithm \\
\hline
Security & All-or-nothing & Probabilistic bounds \\
\hline
Analysis & Often decidable & Generally undecidable \\
\hline
Guarantees & ``Cannot break'' & ``Hard to break'' \\
\hline
\end { tabular}
\end { center}
\vspace { 1em}
\textbf { When to use which?}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item \textbf { Symbolic} : Quick protocol flaw detection, automated analysis
\item \textbf { Computational} : Concrete security guarantees, cryptographic proofs
\item \textbf { Both} : Different insights, complementary verification
2025-06-27 15:46:11 +02:00
\end { itemize}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { How protocol models end up, intuitively}
2025-06-27 15:46:11 +02:00
\bigimagewithcaption { cas_ comparison.png} { Source: Cas Cremers}
\end { frame}
2025-07-06 16:37:24 +02:00
\begin { frame} { Why is design-level security important?}
\begin { itemize}
\item Mathematical arguments are the \textbf { only way} to demonstrate security against entire classes of attacks
\item Security proofs are \textbf { necessary} for any new standard
\item Applies at all levels:
\begin { itemize}
\item Primitives
\item Protocols
\item Systems
\end { itemize}
\item Critical to understand:
\begin { itemize}
\item Security notions
\item Adversarial models
\item Deployment environments
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { How can design-level security fail?}
\begin { center}
\Large
Pen-and-paper arguments are \textbf { alarmingly fragile}
\end { center}
\vspace { 1em}
Two main reasons:
\begin { enumerate}
\item \textbf { Erroneous arguments}
\item \textbf { Inappropriate modeling}
\end { enumerate}
\end { frame}
\begin { frame} { Failure mode 1: Erroneous arguments}
\begin { itemize}
\item Writing security arguments is:
\begin { itemize}
\item Tedious
\item Error-prone
\item Difficult even for experts
\end { itemize}
\item Primarily done on pen-and-paper
\item Errors are difficult to catch
\item Can go unnoticed for \textbf { years}
\end { itemize}
\end { frame}
\begin { frame} { Failure mode 2: Inappropriate modeling}
\begin { itemize}
\item Even correct arguments can miss attacks outside the model
\item Known and common pitfall
\item To make analysis tractable:
\begin { itemize}
\item Models are heavily simplified
\item Focus on ``cryptographic core''
\item Elide many details
\end { itemize}
\item \textbf { Result} : Attacks often found outside this core
\end { itemize}
\end { frame}
\begin { frame} { Current approaches (without CAC)}
\textbf { To minimize erroneous arguments:}
\begin { itemize}
\item Methodological frameworks developed:
\begin { itemize}
\item Code-based game playing
\item Universal composability
\end { itemize}
\item Goal: Decompose into simpler arguments
\item Still complex and error-prone!
\end { itemize}
\vspace { 0.5em}
\textbf { To reduce inappropriate modeling:}
\begin { itemize}
\item ``Real-world provable security'' approach
\item More accurate models
\item But: Added realism \rightarrow \ Greater complexity
\end { itemize}
\end { frame}
\begin { frame} { How CAC helps at the design level}
\begin { itemize}
\item \textbf { Detect flaws} in cryptographic designs
\item \textbf { Manage complexity} of security proofs
\item Crystallize benefits of:
\begin { itemize}
\item On-paper methodologies
\item Real-world provable security
\end { itemize}
\item Enable trustworthy analyses for complex designs
\item Go beyond reach of pen-and-paper analysis
\end { itemize}
\end { frame}
\begin { frame} { The fine print}
\begin { center}
\Large
Computer-aided security proofs are only as good as the statements being proven
\end { center}
\vspace { 1em}
\begin { itemize}
\item Understanding these statements can be \textbf { challenging}
\item Most proofs rely on \textbf { implicit assumptions}
\item Reconstructing top-level statements is hard, even for experts
\item Tools may have bugs (like any software)
\end { itemize}
\end { frame}
\begin { frame} { Symbolic security: The basics}
\begin { itemize}
\item Messages represented \textbf { symbolically} as terms
\item Terms are \textbf { atomic data}
\begin { itemize}
\item Cannot be split into bitstrings
\end { itemize}
\item Cryptographic primitives = \textbf { black-box functions}
\item Related by \textbf { equational theories}
\end { itemize}
\vspace { 1em}
\begin { center}
Abstract model for representing and analyzing protocols
\end { center}
\end { frame}
\begin { frame} { Symbolic security: Example}
\textbf { Symmetric encryption modeled by:}
\begin { itemize}
\item Functions: \texttt { Enc} and \texttt { Dec}
\item Equational theory:
\end { itemize}
\begin { center}
\Large
\texttt { Dec(Enc(m,k),k) = m}
\end { center}
\begin { itemize}
\item Decrypting ciphertext \texttt { Enc(m,k)} with key \texttt { k} recovers plaintext \texttt { m}
\item Adversary can only use specified primitives and equations
\item Can decrypt only if it has the \textbf { entire} secret key
\end { itemize}
\end { frame}
\begin { frame} { Symbolic security properties}
Two main flavors:
\vspace { 1em}
\begin { enumerate}
\item \textbf { Trace properties}
\begin { itemize}
\item Bad events never occur on any execution trace
\item Example: Secret data never in adversarial knowledge
\end { itemize}
\vspace { 0.5em}
\item \textbf { Equivalence properties}
\begin { itemize}
\item Adversary cannot distinguish between two protocols
\item Example: Cannot differentiate real secret from random value
\end { itemize}
\end { enumerate}
\vspace { 1em}
\begin { center}
\textit { Equivalence properties cannot be naturally expressed as trace properties}
\end { center}
\end { frame}
\begin { frame} { Computational security: The basics}
\begin { itemize}
\item Messages are \textbf { bitstrings}
\item Primitives are \textbf { probabilistic algorithms}
\item Adversaries are \textbf { probabilistic Turing machines}
\item Security properties are \textbf { probabilistic}
\end { itemize}
\vspace { 1em}
Example: Symmetric encryption = (Gen, Enc, Dec)
\begin { itemize}
\item Gen: Probabilistic key generation
\item Enc/Dec: Encryption/decryption algorithms
\item Correctness: Dec(Enc(m,k),k) = m for all valid k, m
\end { itemize}
\end { frame}
\begin { frame} { Computational security properties}
Characterized along two axes:
\vspace { 1em}
\begin { center}
\begin { tabular} { |c|c|}
\hline
\textbf { Type} & \textbf { Quantification} \\
\hline
Game-based & Concrete \\
Simulation-based & Asymptotic \\
\hline
\end { tabular}
\end { center}
\vspace { 1em}
\begin { itemize}
\item CAC tools primarily focus on \textbf { game-based, concrete security}
\item Simulation-based proofs: More complex, support composition
\item Concrete security implies asymptotic security
\end { itemize}
\end { frame}
\begin { frame} { Game-based security}
\begin { itemize}
\item Probabilistic experiment: ``game'' between challenger and adversary
\item Explicit goal condition for adversary
\item Security statement:
\begin { center}
\textit { ``For all adversaries, probability of achieving goal \leq \ threshold''}
\end { center}
\item Core methodology: \textbf { Game hopping}
\begin { enumerate}
\item Start with original game
\item Transform step-by-step
\item Reach game where success probability is known
\item Bound probability increases at each step
\item Similar to what we saw in Part 1 of this course!
\end { enumerate}
\end { itemize}
\end { frame}
\begin { frame} { Simulation-based security}
Two probabilistic experiments:
\vspace { 0.5em}
\begin { enumerate}
\item \textbf { Real game} : Runs the actual scheme
\item \textbf { Ideal game} : Runs idealized scheme with trusted third-party
\end { enumerate}
\vspace { 0.5em}
Security statement:
\begin { center}
\textit { ``For all real adversaries, exists simulator that translates attacks''}
\end { center}
\vspace { 0.5em}
\begin { itemize}
\item Ideal functionality secure by definition
\item Therefore real scheme must be secure
\item More complex than game-based proofs
\item But: Support composition theorems!
\end { itemize}
\end { frame}
\begin { frame} { Concrete vs. Asymptotic security}
\textbf { Concrete security:}
\begin { itemize}
\item Scheme is $ ( t, \epsilon ) $ -secure
\item Every adversary running time \leq \ $ t $ succeeds with probability \leq \ $ \epsilon $
\item Specific numerical bounds
\end { itemize}
\vspace { 0.5em}
\textbf { Asymptotic security:}
\begin { itemize}
\item Running time and success probability = functions of security parameter
\item Scheme secure if PPT adversaries succeed with negligible probability
\item Prevailing paradigm in cryptography
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Proving concrete security \rightarrow \ Asymptotic security follows}
\end { center}
\end { frame}
\begin { frame} { Symbolic analysis tools overview}
\bigimagewithcaption { verif_ symbolic.png} { Source: Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography, IEEE Symposium on Security and Privacy, 2021.}
\end { frame}
\begin { frame} { Key features of symbolic analysis tools}
\begin { center}
\Large
What distinguishes different symbolic analysis tools?
\end { center}
\vspace { 1em}
\begin { itemize}
\item Different tools have different capabilities
\item Understanding these helps choose the right tool
\item We'll explore the key dimensions of comparison
\end { itemize}
\end { frame}
\begin { frame} { Unbounded sessions: The challenge}
\begin { itemize}
\item Real protocols run \textbf { many concurrent sessions}
\item Some protocols are secure for $ N $ sessions...
\item ...but become \textbf { insecure} with $ N + 1 $ sessions!
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
How many sessions should we analyze?
\end { center}
\end { frame}
\begin { frame} { Bounded vs. Unbounded analysis}
\textbf { Bounded tools:}
\begin { itemize}
\item Explicitly limit analyzed sessions
\item Cannot detect attacks beyond cut-off
\item Simpler but incomplete
\end { itemize}
\vspace { 0.5em}
\textbf { Unbounded tools:}
\begin { itemize}
\item Analyze arbitrary number of sessions
\item Can prove \textbf { absence of attacks} in the model
\item More complex, may not terminate (undecidable)
\end { itemize}
\end { frame}
\begin { frame} { Performance paradox}
\begin { center}
\Large
Modern unbounded tools often \textbf { outperform} bounded tools
\vspace { 0.5em}
\normalsize
Even for small numbers of sessions!
\end { center}
\vspace { 1em}
Why?
\begin { itemize}
\item Bounded tools naively enumerate options
\item Growth is \textbf { exponential} in session count
\item Unbounded tools use clever algorithms
\item When they terminate, analysis is session-independent
\end { itemize}
\end { frame}
\begin { frame} { Trace properties}
\begin { itemize}
\item Verify that \textbf { bad things never happen}
\item Examples:
\begin { itemize}
\item Secret keys never leaked
\item Authentication always succeeds
\item Adversary never learns password
\end { itemize}
\item Most basic form of security property
\item Supported by nearly all tools
\end { itemize}
\end { frame}
\begin { frame} { Equivalence properties: Beyond traces}
\begin { itemize}
\item Some properties \textbf { cannot} be expressed as traces
\item Example: ``Adversary cannot tell if vote was for Alice or Bob''
\item Requires comparing protocol executions
\item Three main notions:
\begin { enumerate}
\item Trace equivalence
\item Open bisimilarity
\item Diff-equivalence
\end { enumerate}
\end { itemize}
\begin { center}
\textit { Each notion has different strengths and use cases}
\end { center}
\end { frame}
\begin { frame} { Trace equivalence}
\begin { itemize}
\item \textbf { Weakest} equivalence notion (most expressive)
\item For each trace in protocol A...
\item ...exists corresponding trace in protocol B...
\item ...with indistinguishable messages
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
Most natural for privacy properties
\end { center}
\end { frame}
\begin { frame} { Open bisimilarity}
\begin { itemize}
\item \textbf { Stronger} than trace equivalence
\item Uses ``bi-traces'' to track adversary knowledge
\item Each action in one protocol...
\item ...can be simulated in the other
\item While maintaining consistency
\end { itemize}
\vspace { 1em}
\begin { center}
Often an intermediate step toward proving trace equivalence
\end { center}
\end { frame}
\begin { frame} { Diff-equivalence}
\begin { itemize}
\item \textbf { Strongest} notion (most restrictive)
\item Protocols must have \textbf { identical structure}
\item Differ only in messages exchanged
\item All tests succeed/fail identically in both
\end { itemize}
\vspace { 1em}
\begin { center}
Preserves protocol structure during execution
\end { center}
\end { frame}
\begin { frame} { Equational theories: Modeling cryptography}
\begin { itemize}
\item Cryptographic operations have algebraic properties
\item Example: XOR satisfies $ x \oplus x = 0 $
\item More properties \rightarrow \ More potential attacks detected
\end { itemize}
\vspace { 0.5em}
\textbf { Three levels of support:}
\begin { enumerate}
\item Fixed/no theories
\item User-defined (without AC axioms)
\item User-defined with associative-commutative (AC)
\end { enumerate}
\vspace { 0.5em}
\begin { center}
AC support enables modeling XOR, abelian groups, DH
\end { center}
\end { frame}
\begin { frame} { Global mutable state}
\begin { itemize}
\item Real protocols often use:
\begin { itemize}
\item Shared databases
\item Key servers
\item Shared memory
\end { itemize}
\item Enables complex stateful attacks
\item Example: Replay attacks on counters
\item Not all tools support this
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
Critical for analyzing real-world protocols
\end { center}
\end { frame}
\begin { frame} { Link to implementation}
\begin { center}
\Large
Can symbolic guarantees translate to real code?
\end { center}
\vspace { 1em}
\begin { itemize}
\item Some tools extract/generate executable code
\item Links abstract model to concrete implementation
\item Bridges design and implementation levels
\item Reduces gap between proof and practice
\end { itemize}
\end { frame}
\begin { frame} { Abstractions: Trading precision for efficiency}
\begin { itemize}
\item Some tools use abstraction techniques
\item Overestimate adversary capabilities
\item Example: Compute superset of adversary knowledge
\end { itemize}
\vspace { 0.5em}
\textbf { Benefits:}
\begin { itemize}
\item More efficient analysis
\item Fully automatic
\item Workaround for undecidability
\end { itemize}
\textbf { Cost:}
\begin { itemize}
\item May find false attacks
\item May return ``don't know''
\end { itemize}
\end { frame}
\begin { frame} { Interactive mode: Human in the loop}
\begin { itemize}
\item Push-button automation isn't always enough
\item Tools may fail opaquely due to:
\begin { itemize}
\item Undecidability barriers
\item Complex protocol structure
\item Resource limits
\end { itemize}
\end { itemize}
\vspace { 0.5em}
\textbf { Interactive modes allow:}
\begin { itemize}
\item Inspecting partial proofs
\item Providing hints
\item Guiding analysis past barriers
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Trade automation for control}
\end { center}
\end { frame}
\begin { frame} { Independent verifiability: Trust but verify}
\begin { itemize}
\item Symbolic tools implement \textbf { complex algorithms}
\item May have bugs and return incorrect results
\item Usually in the trusted computing base
\end { itemize}
\vspace { 0.5em}
\textbf { Some tools provide:}
\begin { itemize}
\item Machine-checkable proof scripts
\item Explicit evidence of claims
\item Can be verified independently
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Examples: Scyther-proof (Isabelle), SPEC (evidence)}
\end { center}
\end { frame}
\begin { frame} { Specification languages}
How do you describe protocols to the tool?
\vspace { 0.5em}
\begin { enumerate}
\item \textbf { Domain-specific languages}
\begin { itemize}
\item Designed for security protocols
\item Natural for cryptographers
\end { itemize}
\item \textbf { Process calculi}
\begin { itemize}
\item Formal concurrent processes
\item Familiar to formal methods experts
\end { itemize}
\item \textbf { Multiset rewriting}
\begin { itemize}
\item Lower-level, more general
\item Natural for state machines
\end { itemize}
\item \textbf { General programming languages}
\begin { itemize}
\item Most familiar to developers
\end { itemize}
\end { enumerate}
\end { frame}
\begin { frame} { Achievements: Real-world symbolic analysis}
\begin { center}
\Large
From theory to practice: Symbolic tools tackle real protocols
\end { center}
\vspace { 1em}
\begin { itemize}
\item Two tools stand out for real-world analysis:
\begin { itemize}
\item \textbf { ProVerif}
\item \textbf { Tamarin}
\end { itemize}
\item Unprecedented combination of:
\begin { itemize}
\item Scalability
\item Expressivity
\end { itemize}
\item Can handle complex systems and properties
\end { itemize}
\end { frame}
\begin { frame} { Why ProVerif and Tamarin succeed}
\begin { itemize}
\item \textbf { Extensive documentation}
\begin { itemize}
\item Detailed tutorials
\item Theory explanations
\end { itemize}
\item \textbf { Library of case studies}
\begin { itemize}
\item Learn from examples
\item Reusable components
\end { itemize}
\item \textbf { Practical usability features}
\begin { itemize}
\item Professional packaging
\item Tamarin: Graphical user interface
\item ProVerif: Attack reconstruction in HTML
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { ProVerif: Real-world success stories}
\textbf { TLS 1.0}
\begin { itemize}
\item Verification time: Seconds to hours
\item Depends on security property
\end { itemize}
\vspace { 0.5em}
\textbf { TLS 1.3} (part of my Ph.D. thesis!)
\begin { itemize}
\item Modern protocol standard
\item Verification time: $ \sim $ 1 hour
\end { itemize}
\vspace { 0.5em}
\textbf { Signal Protocol} (part of my Ph.D. thesis!)
\begin { itemize}
\item End-to-end encrypted messaging
\item Verification time: Minutes to days
\item Complex properties take longer
\end { itemize}
\end { frame}
\begin { frame} { ProVerif: Noise protocol framework}
\begin { itemize}
\item Framework for building secure channels
\item Verification time: Seconds to days
\item Varies by specific protocol variant
\item (Also part of my Ph.D. thesis!)
\item Super accessible and informative demo: \url { https://noiseexplorer.com}
\end { itemize}
\vspace { 0.5em}
\begin { center}
\Large
Key insight: More Diffie-Hellman operations = longer analysis
\end { center}
\vspace { 0.5em}
\begin { itemize}
\item DH operations particularly expensive to analyze
\item Signal and Noise use many DH exchanges
\item Explains wide time variations
\end { itemize}
\end { frame}
\begin { frame} { Tamarin: Tackling massive protocols}
\textbf { 5G Authentication Key Exchange}
\begin { itemize}
\item Critical infrastructure protocol
\item Verification time: $ \sim $ 5 hours
\end { itemize}
\vspace { 0.5em}
\textbf { TLS 1.3}
\begin { itemize}
\item Complete analysis
\item Verification time: $ \sim $ 1 week
\item Resource requirement: 100GB RAM!
\end { itemize}
\vspace { 0.5em}
\textbf { DNP3 SAv5}
\begin { itemize}
\item Power grid security protocol
\item Verification time: Several minutes
\end { itemize}
\end { frame}
\begin { frame} { Tamarin: Noise protocols}
\begin { itemize}
\item Same framework as ProVerif analyzed
\item Verification time: Seconds to hours
\item Depends on protocol complexity
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
Tool comparisons are difficult!
\end { center}
\vspace { 0.5em}
\begin { itemize}
\item Even on similar case studies
\item Different modeling choices
\item Different property formulations
\item \textbf { Take performance numbers with a grain of salt!}
\end { itemize}
\end { frame}
\begin { frame} { Challenge: Equivalence properties}
\begin { center}
\Large
The frontier of symbolic analysis
\end { center}
\vspace { 1em}
\begin { itemize}
\item Many security properties need equivalence
\item Examples:
\begin { itemize}
\item Vote privacy in e-voting
\item Unlinkability in anonymity protocols
\item Indistinguishability of messages
\end { itemize}
\item But they're \textbf { inherently harder} than trace properties
\end { itemize}
\end { frame}
\begin { frame} { Why equivalence is hard}
\textbf { Trace properties:}
\begin { itemize}
\item Analyze single execution traces
\item ``Does bad event X happen?''
\item Local reasoning
\end { itemize}
\vspace { 0.5em}
\textbf { Equivalence properties:}
\begin { itemize}
\item Analyze \textbf { relations between traces}
\item ``Can adversary distinguish scenarios?''
\item Global reasoning across executions
\end { itemize}
\vspace { 1em}
\begin { center}
Tool support is substantially less mature
\end { center}
\end { frame}
\begin { frame} { Two approaches to equivalence}
\begin { center}
\Large
For full automation, must make a choice:
\end { center}
\vspace { 1em}
\begin { enumerate}
\item \textbf { Bounded analysis}
\begin { itemize}
\item Limit number of sessions
\item More expressive properties
\item But incomplete
\end { itemize}
\vspace { 0.5em}
\item \textbf { Unbounded with diff-equivalence}
\begin { itemize}
\item Analyze infinite sessions
\item Very restrictive notion
\item Cannot handle many desired properties
\end { itemize}
\end { enumerate}
\end { frame}
\begin { frame} { Progress in bounded equivalence}
\textbf { Recent developments include:}
\vspace { 0.5em}
\begin { itemize}
\item \textbf { More equational theories}
\begin { itemize}
\item AKISS, DEEPSEC
\end { itemize}
\item \textbf { Protocols with else branches}
\begin { itemize}
\item APTE, AKISS, DEEPSEC
\end { itemize}
\item \textbf { Non-deterministic protocols}
\begin { itemize}
\item Actions not entirely determined by inputs
\item APTE, DEEPSEC
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { Performance improvements}
\textbf { Partial order reduction}
\begin { itemize}
\item Implemented in: APTE, AKISS, DEEPSEC
\item Avoid exploring equivalent interleavings
\item Significant speedups
\end { itemize}
\vspace { 0.5em}
\textbf { Graph planning}
\begin { itemize}
\item Implemented in: SAT-Equiv
\item Convert to planning problem
\item Leverage SAT solver efficiency
\end { itemize}
\vspace { 1em}
\begin { center}
Making bounded analysis more practical
\end { center}
\end { frame}
\begin { frame} { The unbounded equivalence challenge}
\begin { itemize}
\item \textbf { Diff-equivalence} remains the only fully automated approach
\item First introduced in ProVerif
\item Later adopted by:
\begin { itemize}
\item Maude-NPA
\item Tamarin
\end { itemize}
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
But it's too restrictive!
\end { center}
\vspace { 0.5em}
\begin { itemize}
\item Trace equivalence is most natural for privacy
\item Many properties cannot be expressed as diff-equivalence
\item Verifying general equivalence for unbounded sessions remains an open challenge
\end { itemize}
\end { frame}
\begin { frame} { Computational analysis tools overview}
\bigimagewithcaption { verif_ computational.png} { Source: Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography, IEEE Symposium on Security and Privacy, 2021.}
\end { frame}
\begin { frame} { Computational analysis tools: Overview}
\begin { itemize}
\item Wide variety of tools for computational security
\item Different strengths and focuses
\item Understanding their capabilities helps choose the right tool
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
Let's explore what distinguishes these tools
\end { center}
\end { frame}
\begin { frame} { Reasoning focus: Automation vs. Expressivity}
\begin { center}
\Large
Every tool makes a fundamental tradeoff
\end { center}
\vspace { 1em}
\textbf { Automation focus:}
\begin { itemize}
\item Produce proofs automatically
\item Light interaction required
\item Limited to certain proof patterns
\end { itemize}
\vspace { 0.5em}
\textbf { Expressivity focus:}
\begin { itemize}
\item Express arbitrary arguments
\item Handle complex reasoning
\item More manual effort required
\end { itemize}
\end { frame}
\begin { frame} { Automated proof-finding}
\begin { itemize}
\item Some automation-focused tools go further
\item Can find proofs \textbf { completely automatically}
\item But only in restricted settings:
\end { itemize}
\vspace { 0.5em}
\textbf { Examples:}
\begin { itemize}
\item \textbf { AutoG\& P} : Pairing-based schemes
\item \textbf { CryptoVerif} : Key exchange with built-in transformations
\item \textbf { ZooCrypt} : Padding-based public key encryption
\end { itemize}
\vspace { 0.5em}
\begin { center}
Push-button verification for specific domains
\end { center}
\end { frame}
\begin { frame} { Composition support}
\begin { center}
\Large
Can we break down complex systems?
\end { center}
\vspace { 1em}
\begin { itemize}
\item Real cryptographic systems are built from components
\item Need to reason about each piece separately
\item Then combine the results
\end { itemize}
\vspace { 0.5em}
\textbf { Compositional reasoning:}
\begin { itemize}
\item Essential for scalability
\item Not all tools support it
\item Key differentiator
\end { itemize}
\end { frame}
\begin { frame} { Concrete security bounds}
\begin { itemize}
\item Can the tool prove \textbf { specific numerical bounds} ?
\item Not just ``secure'' but ``how secure''
\end { itemize}
\vspace { 0.5em}
\textbf { Three levels of support:}
\begin { enumerate}
\item \textbf { No support} : Only asymptotic security
\item \textbf { Probability only} : Bounds on success probability
\item \textbf { Full support} : Both probability and time bounds
\end { enumerate}
\vspace { 0.5em}
\begin { center}
Concrete bounds crucial for real-world deployment
\end { center}
\end { frame}
\begin { frame} { Linking to implementation}
\begin { center}
\Large
Can computational guarantees reach real code?
\end { center}
\vspace { 1em}
\begin { itemize}
\item Some tools can extract/generate executable code
\item Links abstract specifications to implementations
\item Ensures proved properties hold in practice
\end { itemize}
\vspace { 0.5em}
\textbf { Without this link:}
\begin { itemize}
\item Gap between proof and code
\item Implementation may diverge from spec
\item Security guarantees may not transfer
\end { itemize}
\end { frame}
\begin { frame} { Trusted computing base}
\begin { itemize}
\item What must we trust for the proof to be valid?
\item Critical consideration for high-assurance
\end { itemize}
\vspace { 0.5em}
\textbf { Three common TCB levels:}
\begin { enumerate}
\item \textbf { Theorem prover} : Coq, Isabelle (minimal TCB)
\item \textbf { Tool implementation} : Custom logic implementation
\item \textbf { SMT solvers} : Z3 and similar (for automation)
\end { enumerate}
\vspace { 0.5em}
\begin { center}
Smaller TCB = Higher confidence
\end { center}
\end { frame}
\begin { frame} { Specification languages}
\textbf { How do you write your cryptographic code?}
\vspace { 0.5em}
\begin { itemize}
\item \textbf { Functional core} : Express operation semantics
\begin { itemize}
\item Supported by all tools
\item Natural for algorithms
\end { itemize}
\item \textbf { Imperative language} : Write security games
\begin { itemize}
\item Familiar to programmers
\item Direct game representation
\end { itemize}
\item \textbf { Process calculus} : Protocol communication
\begin { itemize}
\item Natural for message exchange
\item Well-suited for protocols
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { Achievements: Real-world impact}
\begin { center}
\Large
Computational tools have analyzed major cryptographic systems
\end { center}
\vspace { 1em}
\textbf { CryptoVerif successes:}
\begin { itemize}
\item TLS 1.3 (part of my Ph.D. thesis!)
\item Signal Protocol (part of my Ph.D. thesis!)
\item WireGuard VPN
\end { itemize}
\vspace { 0.5em}
\textbf { EasyCrypt successes:}
\begin { itemize}
\item AWS Key Management System
\item SHA-3 standard
\end { itemize}
\end { frame}
\begin { frame} { More achievements}
\textbf { F7 milestone:}
\begin { itemize}
\item miTLS: Reference implementation of TLS 1.2
\item Verified computational security at code level
\item Pioneering work in verified implementations
\end { itemize}
\vspace { 0.5em}
\textbf { \fstar contribution:}
\begin { itemize}
\item Implemented and verified TLS 1.3 record layer
\item Full protocol analysis beyond cryptographic core
\item Discovered new attacks on real protocols
\end { itemize}
\end { frame}
\begin { frame} { CryptoVerif: The protocol analyzer}
\begin { center}
\Large
Best for highly automated protocol analysis
\end { center}
\vspace { 1em}
\textbf { Key strengths:}
\begin { itemize}
\item Both proof-finding and proof-checking
\item Excellent for key exchange protocols
\item Automatic or light-guided proof discovery
\end { itemize}
\vspace { 0.5em}
\textbf { Why it works well:}
\begin { itemize}
\item Applied π-calculus input language
\item Perfect for sequential message exchange
\item Carefully crafted security assumptions
\item Helps automated proof discovery
\end { itemize}
\end { frame}
\begin { frame} { CryptoVerif: Handling complexity}
\begin { itemize}
\item Automation crucial for large games
\item Handles many different cases
\item Common in protocol proofs
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
When protocols get complex, automation saves the day
\end { center}
\vspace { 1em}
\begin { itemize}
\item Manual proof management becomes infeasible
\item Tool tracks all cases systematically
\item Finds proof steps human might miss
\end { itemize}
\end { frame}
\begin { frame} { \fstar : Beyond the cryptographic core}
\begin { center}
\Large
Best for analyzing full protocols and systems
\end { center}
\vspace { 1em}
\begin { itemize}
\item General-purpose verification language
\item Goes beyond just cryptographic primitives
\item Analyzes complete protocol implementations
\end { itemize}
\vspace { 0.5em}
\textbf { Key insight:}
\begin { itemize}
\item Critical issues arise in \textbf { detailed descriptions}
\item Not just in cryptographic cores
\item Need to verify the full system
\end { itemize}
\end { frame}
\begin { frame} { \fstar : Types are proofs!}
\begin { center}
\Large
The magic of dependent types
\end { center}
\vspace { 1em}
\begin { itemize}
\item In \fstar , types can \textbf { depend on values}
\item A well-typed program is a \textbf { proof of its specification}
\item Type checking = Proof checking!
\end { itemize}
\vspace { 0.5em}
\textbf { Example: Array bounds}
\begin { itemize}
\item Type: \texttt { array int \{ n:nat | n < len\} }
\item Accessing with this type \textbf { proves} no buffer overflow
\item Compiler rejects code that might overflow
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Your program literally cannot go wrong if it type-checks!}
\end { center}
\end { frame}
\begin { frame} { \fstar : Z3 does the heavy lifting!}
\begin { center}
\Large
SMT solving during type checking!
\end { center}
\vspace { 0.5em}
\begin { itemize}
\item \fstar doesn't just check types, it \textbf { proves theorems}
\item Every type check = Verification condition sent to Z3
\item Z3 proves your code satisfies its specification
\item If Z3 says ``yes'', your code is mathematically correct!
\end { itemize}
\vspace { 0.5em}
\textbf { Example: Point on elliptic curve}
\begin { itemize}
\item Type: \texttt { point : \{ (x,y) : int * int | y*y = x*x*x + a*x + b\} }
\item This type \textbf { only} accepts valid curve points!
\item Try to create invalid point? \textbf { Type error!}
\item Function accepting this type? \textbf { Guaranteed} valid input!
\end { itemize}
\vspace { 0.1em}
\begin { center}
\textit { Your elliptic curve code literally cannot process invalid points}
\end { center}
\end { frame}
\begin { frame} { \fstar : the approach}
\textbf { How \fstar handles computational proofs:}
\begin { enumerate}
\item Start with detailed protocol description
\item Transform into ideal program
\item Use ideal functionalities for crypto primitives
\item Validate transformation manually
\item Verify final program automatically
\end { enumerate}
\vspace { 0.5em}
\textbf { Success stories:}
\begin { itemize}
\item Discovered new attacks on TLS
\item Verified concrete designs and implementations
\item Bridges theory-practice gap
\end { itemize}
\end { frame}
\begin { frame} { hax: From Rust to verified models}
\begin { center}
\Large
Extract verification models directly from Rust code
\end { center}
\vspace { 1em}
\begin { itemize}
\item Toolchain for verifying cryptographic implementations in Rust
\item Two verification flavors:
\begin { itemize}
\item \textbf { Correctness} : Extract to \fstar (e.g., ML-KEM/Kyber)
\item \textbf { Security} : Extract to ProVerif protocol models
\end { itemize}
\item Revolutionary approach: One codebase, multiple verification targets
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { No more manual modeling – extract from real implementations!}
\end { center}
\end { frame}
\begin { frame} { hax-ProVerif: Protocol analysis from code}
\begin { center}
\Large
Traditional way: Model protocols by hand
\vspace { 0.5em}
\textbf { hax way: Extract models from implementation}
\end { center}
\vspace { 1em}
\textbf { How it works:}
\begin { itemize}
\item Rust structs/enums \rightarrow \ ProVerif types with constructors
\item Rust functions \rightarrow \ ProVerif process macros
\item Run: \texttt { cargo hax into proverif}
\end { itemize}
\vspace { 0.5em}
\textbf { Success story: TLS 1.3}
\begin { itemize}
\item Extracted model from Bertie (minimal TLS 1.3 implementation)
\item 900 lines Rust \rightarrow \ 4500 lines ProVerif model
\item Proved server authentication and session key confidentiality
\end { itemize}
\end { frame}
\begin { frame} { hax playground: Verification in your browser!}
\begin { center}
\Large
Try hax without installing anything!
\vspace { 0.5em}
\url { https://hax-playground.cryspen.com}
\end { center}
\vspace { 1em}
\textbf { What you can do:}
\begin { itemize}
\item Run hax on Rust code \rightarrow \ See \fstar , Coq, or ProVerif output
\item Run \fstar typechecker to verify generated code
\item Inspect Rust ASTs (THIR/MIR) interactively
\item Share snippets with others
\item Submit issues directly to GitHub
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { First glimpse of Cryspen's verification workbench!}
\end { center}
\end { frame}
\begin { frame} { hax playground: Prove Rust code online}
\textbf { Example: Proving overflow safety}
\begin { itemize}
\item Write a simple \texttt { incr} function for \texttt { u8}
\item \fstar complains: might overflow at 255!
\item Add precondition with \texttt { requires} clause
\item Prove function never panics \mycheckmark
\end { itemize}
\vspace { 0.5em}
\textbf { Advanced features:}
\begin { itemize}
\item \textbf { Right-click any code} : Explore enriched THIR/MIR ASTs
\item \textbf { Share button} : Create persistent links with exact hax commit
\item \textbf { One-click export} : Open in Rust playground or file GitHub issue
\end { itemize}
\vspace { 0.5em}
\begin { center}
\Large
Making hax accessible to everyone!
\vspace { 0.5em}
\normalsize
\textit { From newcomers to verification experts}
\end { center}
\end { frame}
\section { Functional Correctness and Efficiency}
\begin { frame} { Building correct and fast cryptographic code}
\begin { center}
\Large
Design-level security is not enough!
\vspace { 1em}
We need implementations that are:
\begin { itemize}
\item \textbf { Functionally correct}
\item \textbf { Performant}
\item \textbf { Memory safe}
\end { itemize}
\end { center}
\end { frame}
\begin { frame} { The implementation challenge}
\begin { itemize}
\item Even perfect designs can fail in implementation
\item Must accurately translate proven designs to code
\item \textbf { Functional correctness} : Same input/output behavior as specification
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
But that's not enough...
\end { center}
\end { frame}
\begin { frame} { The efficiency imperative}
\begin { center}
\Large
Cryptography is on the critical path!
\end { center}
\vspace { 1em}
\begin { itemize}
\item Every TLS packet
\item Every encrypted file operation
\item Every secure communication
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Even a few extra clock cycles matter at scale}
\end { center}
\end { frame}
\begin { frame} { The fundamental tension}
\begin { center}
\Large
Easy path: Use reference implementation
\vspace { 0.5em}
\normalsize
\mycheckmark Straightforward correctness \\
\times Terrible performance
\end { center}
\vspace { 1em}
\begin { center}
\Large
Hard path: Optimize aggressively
\vspace { 0.5em}
\normalsize
\mycheckmark Blazing fast \\
\times Correctness becomes a nightmare
\end { center}
\end { frame}
\begin { frame} { How far will developers go for speed?}
\textbf { OpenSSL's approach:}
\begin { enumerate}
\item Write Perl code...
\item ...that generates strings of text...
\item ...that other Perl scripts interpret...
\item ...to produce C preprocessor input...
\item ...which generates platform-specific assembly!
\end { enumerate}
\vspace { 1em}
\begin { center}
\Large
This is one of the \textit { fastest} crypto libraries
\vspace { 0.5em}
\normalsize
But imagine verifying \textit { that}
\end { center}
\end { frame}
\begin { frame} { The language dilemma}
\begin { center}
\Large
High-level languages? Too slow.
\end { center}
\vspace { 1em}
\textbf { Reality of high-performance crypto:}
\begin { itemize}
\item C for ``portable'' performance
\item Assembly for ultimate speed
\item Platform-specific optimizations everywhere
\end { itemize}
\vspace { 0.5em}
\textbf { The cost:}
\begin { itemize}
\item Memory safety becomes critical concern
\item Bugs can leak secrets (remember Heartbleed?)
\item Verification becomes much harder
\end { itemize}
\end { frame}
\begin { frame} { Beyond compiler optimizations}
\begin { center}
\Large
Why not let compilers handle optimization?
\end { center}
\vspace { 1em}
\textbf { The harsh truth:}
\begin { itemize}
\item Best-in-class crypto needs manual optimization
\item Compilers can't match expert assembly
\item Platform-specific tricks matter
\item Compilers can be problematic (more on this later...)
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { These optimizations are painstakingly repeated for each architecture}
\end { center}
\end { frame}
\begin { frame} { Current approach: Trust the experts}
\begin { center}
\Large
A handful of experts write all high-speed crypto
\end { center}
\vspace { 1em}
\textbf { But even experts make mistakes:}
\begin { itemize}
\item OpenSSL AES-GCM optimization \rightarrow \ message forgeries
\item OpenSSL arithmetic bug \rightarrow \ full key recovery
\item 24 vulnerabilities in libcrypto (2016-2019)
\end { itemize}
\vspace { 0.5em}
\begin { center}
Despite widespread usage and scrutiny!
\end { center}
\end { frame}
\begin { frame} { Traditional quality assurance}
\textbf { Current solutions:}
\vspace { 0.5em}
\begin { enumerate}
\item \textbf { Auditing} (my full-time job when not teaching this course!)
\begin { itemize}
\item Expensive in time and expertise
\item Can miss subtle bugs
\item Not scalable
\end { itemize}
\vspace { 0.5em}
\item \textbf { Testing}
\begin { itemize}
\item Cannot cover all inputs
\item Cryptographic input space is huge
\item Edge cases matter
\end { itemize}
\end { enumerate}
\vspace { 1em}
\begin { center}
\Large
Clearly inadequate for high-assurance crypto!
\end { center}
\end { frame}
\begin { frame} { Enter program verification}
\begin { center}
\Large
Cryptographic code is an \textbf { ideal target} for verification
\end { center}
\vspace { 1em}
\textbf { Why?}
\begin { itemize}
\item Critically important to get right
\item Relatively small codebase
\item Well-defined specifications
\item Clear correctness criteria
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Heavy-weight formal methods are justified here}
\end { center}
\end { frame}
\begin { frame} { The promise of verification}
\begin { center}
\Large
We can have our cake and eat it too!
\end { center}
\vspace { 1em}
\textbf { Program verification enables:}
\begin { itemize}
\item Complex optimizations
\item Guaranteed correctness
\item Memory safety proofs
\item Platform-specific code
\end { itemize}
\vspace { 0.5em}
\begin { center}
All within reach of existing tools and reasonable effort
\end { center}
\end { frame}
\begin { frame} { The fine print: Implicit assumptions}
\begin { center}
\Large
What are we \textit { actually} trusting?
\end { center}
\vspace { 1em}
\textbf { Common implicit assumptions:}
\begin { itemize}
\item Hardware behaves as modeled
\item Verification done on ``friendly'' code representation
\item External libraries are correct
\item Verification tools have no bugs
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Important to understand what guarantees you're getting}
\end { center}
\end { frame}
\begin { frame} { Two approaches to correctness}
\begin { center}
\Large
How do we prove code is correct?
\end { center}
\vspace { 1em}
\begin { enumerate}
\item \textbf { Equivalence to reference}
\begin { itemize}
\item Compare to trusted implementation
\item Same outputs for same inputs
\item Natural for optimizations
\end { itemize}
\vspace { 0.5em}
\item \textbf { Functional specification}
\begin { itemize}
\item Pre-conditions on inputs
\item Post-conditions on outputs
\item More flexible approach
\end { itemize}
\end { enumerate}
\end { frame}
\begin { frame} { The mathematical challenge}
\begin { center}
\Large
Crypto proofs need non-trivial mathematics
\end { center}
\vspace { 1em}
\begin { itemize}
\item Modular arithmetic properties
\item Field operations
\item Group theory
\item Number-theoretic facts
\end { itemize}
\vspace { 0.5em}
\textbf { The balance:}
\begin { itemize}
\item Too much automation \rightarrow \ can't handle the math
\item Too manual \rightarrow \ overwhelming effort
\item SMT solvers help find the sweet spot
\end { itemize}
\end { frame}
\begin { frame} { From source to machine code}
\begin { center}
\Large
The compiler gap
\end { center}
\vspace { 1em}
\begin { itemize}
\item Most verification happens at source level
\item But we execute machine code!
\item Regular compilers can introduce bugs
\end { itemize}
\vspace { 0.5em}
\textbf { Solution: Verified compilers}
\begin { itemize}
\item CompCert: Formally verified C compiler
\item Guarantees preservation of properties
\item Trade-off: Fewer optimizations, fewer platforms
\end { itemize}
\end { frame}
\begin { frame} { Program verification tools landscape}
\begin { center}
\Large
A rich ecosystem of verification tools
\end { center}
\vspace { 1em}
\textbf { Key dimensions to consider:}
\begin { itemize}
\item Memory safety guarantees
\item Level of automation
\item Parametric verification support
\item Input languages
\item Analysis targets
\item Trust requirements
\end { itemize}
\end { frame}
\begin { frame} { Memory safety: Table stakes}
\begin { center}
\Large
Can the tool prove absence of memory errors?
\end { center}
\vspace { 1em}
\textbf { Critical for crypto code:}
\begin { itemize}
\item Buffer overflows can leak secrets
\item Use-after-free exposes sensitive data
\item Null pointer dereferences crash systems
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Most modern verification tools provide this as baseline}
\end { center}
\end { frame}
\begin { frame} { Input languages: Many flavors}
\textbf { Verification-oriented languages:}
\begin { itemize}
\item \textbf { Dafny} : High-level imperative
\item \textbf { \fstar } : Functional with effects
\item \textbf { Gallina} (Coq): Pure functional
\item \textbf { WhyML} (Why3): Functional core
\end { itemize}
\vspace { 0.5em}
\textbf { Assembly-like languages:}
\begin { itemize}
\item \textbf { CryptoLine} : Low-level verification
\item \textbf { Jasmin} : Assembly with high-level features
\item \textbf { Vale} : Structured assembly
\end { itemize}
\vspace { 0.5em}
\textbf { Existing languages:}
\begin { itemize}
\item Some tools verify C, Java directly
\end { itemize}
\end { frame}
\begin { frame} { Analysis targets: Source vs. Assembly}
\begin { center}
\Large
Where does verification happen?
\end { center}
\vspace { 1em}
\textbf { Source-level analysis:}
\begin { itemize}
\item Easier to verify
\item Need verified compiler for guarantees
\item Performance penalty from compiler limitations
\end { itemize}
\vspace { 0.5em}
\textbf { Assembly-level analysis:}
\begin { itemize}
\item Harder to verify
\item Direct machine-code guarantees
\item No compiler performance penalty
\end { itemize}
\end { frame}
\begin { frame} { The trust question}
\begin { center}
\Large
What's in the trusted computing base?
\end { center}
\vspace { 1em}
\textbf { Common trust dependencies:}
\begin { itemize}
\item SMT solvers (Z3, CVC4, etc.)
\item Theorem provers (Coq, Isabelle)
\item Tool implementations themselves
\item Interoperability glue code
\item Specifications of external libraries
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { ``Who verifies the verifiers?''}
\end { center}
\end { frame}
\begin { frame} { Real deployment success stories}
\begin { center}
\Large
Verified crypto is no longer just academic!
\end { center}
\vspace { 1em}
\textbf { Major deployments:}
\begin { itemize}
\item \textbf { \haclstar } : Used in Mozilla Firefox's NSS
\item \textbf { Fiat Cryptography} : Powers Google's BoringSSL
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Billions of users rely on verified crypto every day}
\end { center}
\end { frame}
\begin { frame} { What made these deployments succeed?}
\begin { center}
\Large
Three critical success factors
\end { center}
\vspace { 1em}
\begin { enumerate}
\item \textbf { Performance parity}
\begin { itemize}
\item As fast or faster than existing code
\item No performance penalty for verification
\end { itemize}
\vspace { 0.5em}
\item \textbf { API compatibility}
\begin { itemize}
\item Drop-in replacement
\item Fits existing infrastructure
\end { itemize}
\vspace { 0.5em}
\item \textbf { Industry collaboration}
\begin { itemize}
\item Team members worked with companies
\item Understood real-world needs
\end { itemize}
\end { enumerate}
\end { frame}
\begin { frame} { The \haclstar approach}
\begin { center}
\Large
Going beyond just verification
\end { center}
\vspace { 1em}
\textbf { What \haclstar did right:}
\begin { itemize}
\item Replaced entire ciphersuite
\item Not just individual primitives
\item Comprehensive testing infrastructure
\item Professional packaging
\end { itemize}
\vspace { 1em}
\begin { center}
\textit { Willing to do the ``boring'' work that matters for adoption}
\end { center}
\end { frame}
\begin { frame} { A paradigm shift in verification}
\begin { center}
\Large
Old wisdom: Verified code = Slow code
\vspace { 1em}
\textbf { New reality: Verified code matches or beats unverified!}
\end { center}
\vspace { 1em}
\begin { itemize}
\item Decades of skepticism overcome
\item Proof burden no longer prohibitive
\item Performance penalty eliminated
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { No conceptual barrier to verifying the fastest implementations}
\end { center}
\end { frame}
\begin { frame} { Case study: Curve25519 performance}
\begin { center}
\Large
Let's look at real numbers
\end { center}
\vspace { 1em}
\textbf { Curve25519:}
\begin { itemize}
\item Widely used elliptic curve
\item Speed competition among implementers
\item Verification community joined the race
\end { itemize}
\vspace { 0.5em}
\textbf { The benchmark:}
\begin { itemize}
\item Scalar multiplication operation
\item Measured in CPU cycles
\item Intel i7-8565U @ 1.8 GHz
\item Compared against donna64 (fast unverified C)
\end { itemize}
\end { frame}
\begin { frame} { Curve25519: The results}
\begin { center}
\Large
Verified implementations win!
\end { center}
\vspace { 1em}
\textbf { C implementations:}
\begin { itemize}
\item \textbf { hacl} (verified) \rightarrow \ Beats donna64
\item \textbf { fiat} (verified) \rightarrow \ Beats donna64
\item Multiple verified implementations faster than best unverified C
\end { itemize}
\vspace { 0.5em}
\textbf { Assembly implementations:}
\begin { itemize}
\item \textbf { evercrypt} (verified) \rightarrow \ Matches fastest unverified
\item \textbf { precomp} (unverified) \rightarrow \ The target to beat
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Verification no longer means compromise on speed}
\end { center}
\end { frame}
\begin { frame} { The verification effort spectrum}
\begin { center}
\Large
Higher performance = Higher verification effort
\end { center}
\vspace { 1em}
\begin { center}
\begin { tikzpicture} [scale=0.8]
\draw [->] (0,0) -- (10,0) node[right] { Performance} ;
\draw [->] (0,0) -- (0,4) node[above] { Verification Effort} ;
\node [circle,fill=blue!30] at (2,1) { High-level} ;
\node [circle,fill=orange!30] at (5,2) { C code} ;
\node [circle,fill=red!30] at (8,3.5) { Assembly} ;
\draw [dashed,gray] (2,0) -- (2,1);
\draw [dashed,gray] (5,0) -- (5,2);
\draw [dashed,gray] (8,0) -- (8,3.5);
\end { tikzpicture}
\end { center}
\end { frame}
\begin { frame} { Looking ahead}
\begin { center}
\Large
Verified crypto is becoming the new normal
\end { center}
\vspace { 0.5em}
\textbf { What we've achieved:}
\begin { itemize}
\item Performance parity with unverified code
\item Real-world deployment at scale
\item Growing ecosystem of tools
\end { itemize}
\vspace { 0.5em}
\textbf { What's next:}
\begin { itemize}
\item Better automation
\item Shared infrastructure
\item More platforms
\item Broader adoption
\end { itemize}
\end { frame}
\section { Implementation-Level Security}
\begin { frame} { The gap between theory and practice}
\begin { center}
\Large
Design-level security is not enough!
\end { center}
\vspace { 1em}
\textbf { What we assume at design level:}
\begin { itemize}
\item Attackers choose inputs
\item Attackers observe outputs
\item That's it!
\end { itemize}
\vspace { 0.5em}
\textbf { Reality:}
\begin { itemize}
\item Attackers see much more
\item Implementation details leak information
\item Side-channels everywhere
\end { itemize}
\end { frame}
\begin { frame} { Side channels: The hidden attack surface}
\begin { center}
\Large
What are side channels?
\end { center}
\vspace { 1em}
\textbf { Information leaks through:}
\begin { itemize}
\item \textbf { Timing} : How long operations take
\item \textbf { Memory access} : Which addresses are accessed
\item \textbf { Power consumption} : How much energy is used
\item \textbf { Electromagnetic radiation} : EM emissions
\item \textbf { Acoustic} : Sound of computation
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { These are side-effects of computation, not intended outputs}
\end { center}
\end { frame}
\begin { frame} { The devastating impact}
\begin { center}
\Large
Side channels aren't just theoretical!
\end { center}
\vspace { 1em}
\textbf { Real attacks on real systems:}
\begin { itemize}
\item \textbf { RSA key recovery} : Full private keys extracted
\item \textbf { AES key recovery} : Secret keys leaked
\item \textbf { TLS attacks} : Lucky 13, Lucky Microseconds
\item \textbf { Cloud attacks} : Cross-VM key extraction
\end { itemize}
\vspace { 1em}
\begin { center}
\textit { Even ``secure'' algorithms become vulnerable in practice}
\end { center}
\end { frame}
\begin { frame} { The constant-time solution}
\begin { center}
\Large
Make execution independent of secrets
\end { center}
\vspace { 1em}
\textbf { Constant-time coding guidelines:}
\begin { itemize}
\item No secret-dependent branches
\item No secret-dependent memory access
\item No variable-time operations on secrets
\item Same number of operations regardless of secret values
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Note: ``Constant-time'' is about logical flow, not wall-clock time!}
\end { center}
\end { frame}
\begin { frame} { Why constant-time is hard}
\begin { center}
\Large
Natural code patterns become forbidden
\end { center}
\begin { columns} [t]
\begin { column} { 0.5\textwidth }
\textbf { You can't write:}
\begin { enumerate}
\item \texttt { if (secret\_ bit) \{ ... \} }
\item \texttt { array[secret\_ index]}
\item Return early \texttt { if secret == 0}
\item Use division only when \texttt { secret != 0} \footnote { \url { https://kyberslash.cr.yp.to} }
\end { enumerate}
\end { column}
\begin { column} { 0.5\textwidth }
\textbf { Instead, you must:}
\begin { itemize}
\item Use bit manipulation tricks
\item Process all data uniformly
\item Avoid natural optimizations
\end { itemize}
\end { column}
\end { columns}
\end { frame}
\begin { frame} { Example: Constant-time selection}
\textbf { Insecure (natural) code:}
\begin { flushleft}
\texttt { if (secret\_ bit) \{ } \\
\texttt { ~~~~result = a;} \\
\texttt { \} else \{ } \\
\texttt { ~~~~result = b;} \\
\texttt { \} }
\end { flushleft}
\vspace { 0.5em}
\textbf { Secure (constant-time) code:}
\begin { flushleft}
\texttt { mask = -secret\_ bit;~~// 0x00...0 or 0xFF...F} \\
\texttt { result = (a \& mask) | (b \& \textasciitilde mask);}
\end { flushleft}
\vspace { 0.5em}
\begin { center}
\textit { Same result, no branches, harder to understand!}
\end { center}
\end { frame}
\begin { frame} { The compiler: Friend or foe?}
\begin { center}
\Large
Your carefully written constant-time code...
\vspace { 0.5em}
...may not survive compilation!
\end { center}
\vspace { 1em}
\textbf { Compiler ``optimizations'' can:}
\begin { itemize}
\item Reintroduce branches
\item Use lookup tables
\item Short-circuit operations
\item Use variable-time instructions
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { The compiler doesn't know about your security requirements}
\end { center}
\end { frame}
\begin { frame} { Hardware betrays you too}
\begin { center}
\Large
Even perfect assembly isn't safe
\end { center}
\vspace { 1em}
\textbf { Modern CPUs ``optimize'' behind your back:}
\begin { itemize}
\item Branch prediction
\item Speculative execution
\item Cache hierarchies
\item Variable-latency instructions
\end { itemize}
\vspace { 0.5em}
\textbf { Result:}
\begin { itemize}
\item Timing variations you can't control
\item Spectre/Meltdown-style attacks
\item Cache timing attacks
\end { itemize}
\end { frame}
\begin { frame} { Current practice: Hope and prayer}
\begin { center}
\Large
How do we check constant-time today?
\end { center}
\vspace { 1em}
\textbf { 1. Manual auditing}
\begin { itemize}
\item Expensive
\item Time-consuming
\item Error-prone
\item Doesn't scale
\end { itemize}
\vspace { 0.5em}
\textbf { 2. Testing wall-clock time}
\begin { itemize}
\item Fundamentally flawed approach
\item Misunderstands constant-time
\item Can't test all inputs
\item Misses subtle leaks
\end { itemize}
\end { frame}
\begin { frame} { A history of patches creating vulnerabilities}
\begin { center}
\Large
Even experts get it wrong
\end { center}
\vspace { 1em}
\textbf { The vicious cycle in TLS:}
\begin { enumerate}
\item Original TLS timing vulnerability discovered
\item Developers create a patch to fix it
\item The patch itself is flawed
\item This creates the Lucky 13 vulnerability
\item Lucky 13 gets patched
\item The Lucky 13 patch introduces a new timing vulnerability!
\end { enumerate}
\vspace { 1em}
\begin { center}
\textit { Each ``fix'' introduced new vulnerabilities!}
\end { center}
\end { frame}
\begin { frame} { The assembly escape hatch}
\begin { center}
\Large
Can't trust the compiler? Skip it!
\end { center}
\vspace { 1em}
\textbf { Current practice:}
\begin { itemize}
\item Write critical code in assembly
\item Implement constant-time directly
\item Control every instruction
\end { itemize}
\vspace { 0.5em}
\textbf { The cost:}
\begin { itemize}
\item Platform-specific implementations
\item Harder to audit
\item More error-prone
\item Maintenance nightmare
\end { itemize}
\end { frame}
\begin { frame} { Enter computer-aided cryptography}
\begin { center}
\Large
What if we could \textbf { prove} constant-time?
\end { center}
\vspace { 1em}
\textbf { CAC tools can:}
\begin { itemize}
\item Automatically check constant-time compliance
\item Find subtle violations
\item Even repair non-compliant code!
\item Provide formal guarantees
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Turn informal best practices into verified properties}
\end { center}
\end { frame}
\begin { frame} { Formal leakage models}
\begin { center}
\Large
What exactly does the attacker see?
\end { center}
\vspace { 1em}
\textbf { We must formally model leakage:}
\begin { itemize}
\item Define what operations leak
\item Specify what information is revealed
\item Abstract real-world observations
\end { itemize}
\vspace { 0.5em}
\textbf { Key insight:}
\begin { center}
\textit { Security = Leakage independent of secrets}
\end { center}
\vspace { 0.5em}
This is \textbf { observational non-interference}
\end { frame}
\begin { frame} { Hierarchy of leakage models}
\begin { center}
\Large
Different models for different threats
\end { center}
\vspace { 1em}
\textbf { 1. Program counter (PC) model}
\begin { itemize}
\item Leaks: Control flow only
\item Protects against: Simple timing attacks
\end { itemize}
\vspace { 0.5em}
\textbf { 2. Constant-time model}
\begin { itemize}
\item Leaks: PC + memory addresses
\item Protects against: Cache attacks, timing attacks
\item Most common in practice
\end { itemize}
\vspace { 0.5em}
\textbf { 3. Size-respecting model}
\begin { itemize}
\item Leaks: PC + memory + operand sizes
\item Protects against: Variable-time operations
\end { itemize}
\end { frame}
\begin { frame} { Program counter leakage}
\begin { center}
\Large
The simplest model: Control flow leaks
\end { center}
\vspace { 1em}
\textbf { What leaks:}
\begin { itemize}
\item Which branch was taken
\item How many loop iterations
\item Which functions were called
\end { itemize}
\vspace { 0.5em}
\textbf { Example violation:}
\begin { flushleft}
\texttt { if (password[i] != input[i]) \{ } \\
\texttt { ~~~~return FAIL;~~// Early exit leaks position} \\
\texttt { \} }
\end { flushleft}
\vspace { 0.5em}
\begin { center}
\textit { Timing reveals where passwords differ!}
\end { center}
\end { frame}
\begin { frame} { Constant-time leakage}
\begin { center}
\Large
The standard model: PC + memory access
\end { center}
\vspace { 1em}
\textbf { Additionally leaks:}
\begin { itemize}
\item Which memory addresses are accessed
\item Not the values, just the addresses!
\end { itemize}
\vspace { 0.5em}
\textbf { Example violation:} \texttt { result = lookup\_ table[secret\_ index]}
\vspace { 0.5em}
\begin { center}
\textit { Cache attacks can recover \texttt { secret\_ index} }
\end { center}
\end { frame}
\begin { frame} { The verification promise}
\begin { center}
\Large
Prove once, secure forever
\end { center}
\vspace { 1em}
\textbf { Verification tools can prove:}
\begin { itemize}
\item Code follows constant-time discipline
\item For all possible secret values
\item Through all execution paths
\item Despite complex control flow
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { No more hoping your tests caught everything}
\end { center}
\end { frame}
\begin { frame} { The fine print}
\begin { center}
\Large
What are we actually proving?
\end { center}
\vspace { 1em}
\textbf { Important caveats:}
\begin { itemize}
\item Proofs are relative to the leakage model
\item Hardware may leak more than modeled
\item New attacks may require new models
\item Speculative execution is particularly tricky
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { We prove security in our model, not absolute security}
\end { center}
\end { frame}
\begin { frame} { The gap remains}
\begin { center}
\Large
From verified code to secure execution
\end { center}
\vspace { 1em}
\textbf { Remaining challenges:}
\begin { itemize}
\item Compiler may still break guarantees
\item Hardware may not respect assumptions
\item Micro-architectural attacks (Spectre/Meltdown)
\item Physical side channels
\end { itemize}
\vspace { 0.5em}
\textbf { Partial solutions:}
\begin { itemize}
\item Verify at assembly level
\item Use verified compilers
\item Hardware/software co-design
\end { itemize}
\end { frame}
\begin { frame} { Looking forward}
\begin { center}
\Large
Implementation security is an arms race
\end { center}
\vspace { 1em}
\textbf { The cycle continues:}
\begin { enumerate}
\item New side channels discovered
\item Update leakage models
\item Develop countermeasures
\item Verify implementations
\item Repeat...
\end { enumerate}
\vspace { 0.5em}
\begin { center}
\textit { CAC tools help us stay ahead in this race}
\end { center}
\end { frame}
\begin { frame} { Computational analysis tools overview}
\bigimagewithcaption { verif_ implementations.png} { Source: Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography, IEEE Symposium on Security and Privacy, 2021.}
\end { frame}
\section { Case Study: Lessons Learned from TLS}
\begin { frame} { Case Study: Transport Layer Security (TLS)}
\begin { center}
\Large
One of the most important real-world deployments of cryptography
\end { center}
\vspace { 1em}
\begin { itemize}
\item Powers HTTPS everywhere
\item Secures email, VPNs, messaging
\item Protects billions of connections daily
\end { itemize}
\vspace { 1em}
\begin { center}
\textit { But the road to secure TLS was long and painful...}
\end { center}
\end { frame}
\begin { frame} { The dark ages: TLS before 1.3}
\begin { center}
\Large
A reactive cycle of attacks and patches
\end { center}
\vspace { 1em}
\textbf { The endless loop:}
\begin { enumerate}
\item \textbf { Attack found} -- Security researchers discover vulnerability
\item \textbf { Quick patch} -- Rushed fix deployed to stop bleeding
\item \textbf { Long-term fix} -- More thoughtful solution developed
\item \textbf { Next version} -- Protocol updated with fixes
\item \textbf { Back to step 1} -- New attacks emerge on ``fixed'' version
\end { enumerate}
\vspace { 0.5em}
\begin { center}
\textit { No substantial academic analysis during design}
\end { center}
\end { frame}
\begin { frame} { Early academic analysis: Too simple}
\begin { center}
\Large
Academics studied ``toy'' versions of TLS
\end { center}
\vspace { 1em}
\textbf { Why oversimplified models?}
\begin { itemize}
\item Full protocol too complex
\item Analysis tools couldn't handle it
\item Focused on cryptographic core only
\end { itemize}
\vspace { 0.5em}
\textbf { The consequence:}
\begin { itemize}
\item Missed many real attacks
\item False sense of security
\item Gap between theory and practice
\end { itemize}
\end { frame}
\begin { frame} { The complexity explosion}
\begin { center}
\Large
When academics looked at \textit { real} TLS...
\end { center}
\vspace { 1em}
\begin { center}
\textbf { Many new attacks discovered!}
\end { center}
\vspace { 0.5em}
\begin { itemize}
\item BEAST
\item CRIME
\item Lucky 13
\item POODLE
\item Logjam
\item And many more, as discussed in our TLS session!
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { The devil was in the details we'd been ignoring}
\end { center}
\end { frame}
\begin { frame} { TLS 1.3: A paradigm shift}
\begin { center}
\Large
From reactive patching to proactive design
\end { center}
\vspace { 1em}
\textbf { Revolutionary changes:}
\begin { itemize}
\item Academic community consulted \textbf { during} design
\item Multiple drafts analyzed formally
\item 28 drafts over 4+ years!
\item Unprecedented collaboration
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { First major protocol designed with formal analysis in mind}
\end { center}
\end { frame}
\begin { frame} { Computer-aided cryptography joins the party}
\begin { center}
\Large
Multiple tools, multiple approaches
\end { center}
\vspace { 1em}
\textbf { Verified implementations:}
\begin { itemize}
\item Implementations with cryptographic proofs
\end { itemize}
\vspace { 0.5em}
\textbf { Symbolic analysis:}
\begin { itemize}
\item ProVerif models
\item Tamarin models
\end { itemize}
\vspace { 0.5em}
\textbf { Computational analysis:}
\begin { itemize}
\item CryptoVerif proofs
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { A comprehensive assault on insecurity!}
\end { center}
\end { frame}
\begin { frame} { Lesson 1: Formal methods find real flaws}
\begin { center}
\Large
The process of formally specifying reveals bugs
\end { center}
\vspace { 1em}
\textbf { Just trying to write formal specs uncovers issues:}
\begin { itemize}
\item Ambiguities in the standard
\item Implicit assumptions
\item Corner cases
\item Unclear security goals
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { If you can't specify it clearly, it's probably broken}
\end { center}
\end { frame}
\begin { frame} { Real attacks found by formal analysis}
\begin { center}
\Large
These aren't theoretical problems!
\end { center}
\vspace { 1em}
\textbf { TLS 1.2 analysis (Bhargavan et al.):}
\begin { itemize}
\item Alert fragmentation attacks
\item Fingerprinting attacks
\item Led to Triple Handshake attack discovery
\end { itemize}
\vspace { 0.5em}
\textbf { TLS 1.3 draft 10 (Cremers et al.):}
\begin { itemize}
\item Client impersonation in PSK-resumption
\item Fixed in draft 11
\end { itemize}
\end { frame}
\begin { frame} { More attacks from formal analysis}
\textbf { TLS 1.3 draft 13 (Bhargavan et al.):}
\begin { itemize}
\item New attack on 0-RTT client authentication
\item ProVerif found what humans missed
\end { itemize}
\vspace { 0.5em}
\textbf { TLS 1.3 draft 21 (Cremers et al.):}
\begin { itemize}
\item Unexpected behavior affecting authentication
\item Tamarin revealed subtle issues
\end { itemize}
\vspace { 1em}
\begin { center}
\Large
Nearly all discoveries led to protocol improvements!
\end { center}
\end { frame}
\begin { frame} { Lesson 2: Protocols are moving targets}
\begin { center}
\Large
28 drafts = 28 different protocols!
\end { center}
\vspace { 1em}
\textbf { The challenge:}
\begin { itemize}
\item Significant changes between drafts
\item Previous analyses quickly outdated
\item Manual proofs become stale
\item Months of work invalidated
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { How do you hit a moving target?}
\end { center}
\end { frame}
\begin { frame} { Machine-checked proofs to the rescue}
\begin { center}
\Large
Automated tools can evolve with the protocol
\end { center}
\vspace { 1em}
\textbf { Key advantages:}
\begin { itemize}
\item Update models incrementally
\item Re-run verification automatically
\item Catch regressions immediately
\item Ensure fixes don't break other properties
\end { itemize}
\vspace { 0.5em}
\textbf { Manual proofs can't compete:}
\begin { itemize}
\item Too slow to update
\item Error-prone modifications
\item Can't keep pace with drafts
\end { itemize}
\end { frame}
\begin { frame} { Lesson 3: Design for verifiability}
\begin { center}
\Large
Small changes can dramatically simplify analysis
\end { center}
\vspace { 1em}
\textbf { TLS 1.3 embraced verification-friendly changes:}
\begin { itemize}
\item Better key separation in key schedule
\item Consistent message tagging
\item More transcript information in exchanges
\item Cleaner state machine
\end { itemize}
\vspace { 0.5em}
\begin { center}
\textit { Negligible performance impact, huge verification benefit}
\end { center}
\end { frame}
\begin { frame} { Examples of verification-friendly changes}
\textbf { Key separation:}
\begin { itemize}
\item Different keys for different purposes
\item Enables modular security proofs
\item Prevents cross-protocol attacks
\end { itemize}
\vspace { 0.5em}
\textbf { Consistent tagging:}
\begin { itemize}
\item Every message type clearly labeled
\item No ambiguity in parsing
\item Simplifies formal models
\end { itemize}
\vspace { 0.5em}
\textbf { Transcript inclusion:}
\begin { itemize}
\item Include history in handshake messages
\item Makes consistency proofs easier
\item Prevents replay attacks
\end { itemize}
\end { frame}
\begin { frame} { The impact: A new standard for standards}
\begin { center}
\Large
TLS 1.3 changed how protocols should be designed
\end { center}
\vspace { 1em}
\textbf { The new playbook:}
\begin { enumerate}
\item Involve formal methods experts early
\item Design with verification in mind
\item Use tools throughout development
\item Update proofs with each draft
\item Fix issues before standardization
\end { enumerate}
\vspace { 0.5em}
\begin { center}
\textit { From ``ship and patch'' to ``verify and ship''}
\end { center}
\end { frame}
\begin { frame} { Why this matters beyond TLS}
\begin { center}
\Large
TLS 1.3 proved formal methods can scale
\end { center}
\vspace { 1em}
\textbf { Key achievements:}
2025-06-27 15:46:11 +02:00
\begin { itemize}
2025-07-06 16:37:24 +02:00
\item Analyzed a \textit { real} protocol, not a toy
\item Found and fixed \textit { real} vulnerabilities
\item Kept pace with \textit { real} development
\item Influenced \textit { real} design decisions
2025-06-27 15:46:11 +02:00
\end { itemize}
2025-07-06 16:37:24 +02:00
\vspace { 0.5em}
\begin { center}
\textit { This is the future of secure protocol design}
\end { center}
2025-06-27 15:46:11 +02:00
\end { frame}
2025-06-26 12:19:00 +02:00
\begin { frame} [plain]
\titlepage
\end { frame}
\end { document}