verifying-crypto-with-lean/chapters/appendix-toolkit.tex
saymrwulf 5861c73c22 Major didactic overhaul: pen-and-paper worked examples + in-book solution pathways, 2x volume (53 -> 106 pages)
- pen-and-paper worked examples in all 12 chapters, using the REAL
  constants throughout: 2^-64 waiting-time arithmetic, headroom budgets,
  hand type-checking, rfl traces, full goal-state boards, the column-sum
  audit at 2^54, inverting 19 mod p via Euclid, the x19 fold at real
  weights, denoting p itself (telescope), the 16p audit (8 fails by 151),
  the 254+11 inversion-chain bookkeeping, the substitution test, sizing
  the 28-vs-1000 extraction, cofactor/torsion arithmetic, and the full
  Bernstein-Lange completeness derivation
- CORRECTNESS FIX: ch7 asserted a false factorization of p-1; replaced
  with the computationally verified p-1 = 2^2 * 3 * 65147 * Q (Q 71-digit
  prime), witness w=2 verified for all four Pratt conditions
- every chapter's exercises now followed immediately by 'Solutions and
  pathways' (pathway first, then answer), incl. new exercises
- NEW Interlude: a complete two-clause verification done entirely by
  hand, then mapped line-by-line onto the compiled Lean proof
- NEW appendices: A pen-and-paper toolkit (8 recipe cards + drills +
  answers), B guided walkthroughs of every exercise-file hole, C tour of
  the real repositories; plus glossary, instructor notes, 13-week plan
- preamble: worked-example box, solution macros, math-safe inline code

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:55:00 +02:00

186 lines
8.2 KiB
TeX

\chapter{The Pen-and-Paper Toolkit}
\label{app:toolkit}
Every worked example in this book leaned on a small set of hand-computation
techniques. This appendix collects them as recipe cards --- the reference
you will reach for when auditing numbers in the wild, where there is no
chapter telling you which trick applies. Each card ends with a
thirty-second drill; answers close the appendix.
\section{Card 1: powers of two into powers of ten}
The single most-used conversion in cryptographic sanity-checking:
\[
\log_{10} 2 \approx 0.30103
\qquad\Longrightarrow\qquad
2^{n} \approx 10^{\,0.301\, n}.
\]
Anchor points worth memorizing outright: $2^{10} \approx 10^{3}$ (the
``kibi $\approx$ kilo'' fact, $2.4\%$ off), $2^{20} \approx 10^{6}$,
$2^{64} \approx 1.8 \times 10^{19}$, $2^{128} \approx 3.4 \times 10^{38}$,
$2^{256} \approx 1.2 \times 10^{77}$. The last one explains the phrase
``77-digit prime'' used throughout this book: $255 \times 0.301 = 76.8$,
so $2^{255}$ has $77$ digits. For headline comparisons, two reference
magnitudes: atoms in the observable universe $\sim 10^{80}$; age of the
universe $\sim 4 \times 10^{17}$ seconds; and the accidental gem
$1\ \text{year} \approx \pi \times 10^{7}$ seconds.
\emph{Drill 1.} How many decimal digits does $\ell \approx 2^{252}$ have?
And is $2^{130}$ more or fewer than the atoms in a kilogram of silicon
($\sim 2 \times 10^{25}$)?
\section{Card 2: reducing big powers with the modulus identity}
To reduce $2^{N}$ modulo $p = 2^{255} - 19$: split off multiples of
$255$ in the exponent and replace each $2^{255}$ by $19$:
\[
2^{N} = 2^{255 q + r} \equiv 19^{\,q} \cdot 2^{\,r} \pmod p .
\]
The same works in any system with an identity $R \equiv c$: powers of the
radix fold down by repeated substitution. Keep the numbers honest by
reducing intermediate results whenever they exceed the modulus.
\emph{Drill 2.} Reduce $2^{511} \bmod (2^{255} - 19)$ to a product of
small numbers. (Split $511 = 2 \cdot 255 + 1$.)
\section{Card 3: small-field residues via little Fermat}
To find $M \bmod q$ for gigantic $M = 2^{N}$ and small prime $q$: reduce
the \emph{exponent} mod $q - 1$ (Fermat: $2^{q-1} \equiv 1 \bmod q$),
then compute the small remaining power. Used in
Chapter~\ref{ch:modular}'s worked example to get
$p \bmod 19$ from $255 = 14 \cdot 18 + 3$.
\emph{Drill 3.} Compute $p \bmod 7$ for $p = 2^{255} - 19$. ($2^3 \equiv
1 \bmod 7$, so reduce the exponent mod $3$.)
\section{Card 4: extended Euclid, back-substitution form}
To invert $a$ modulo $n$: run remainders downward
($n, a, r_1, r_2, \dots, 1$), then walk back up expressing $1$ in terms
of each pair. The Chapter~\ref{ch:modular} worked example is the
template; the discipline that prevents errors is to write each line as
$1 = (\text{coeff}) \cdot x + (\text{coeff}) \cdot y$ with both terms
visible before substituting the next level. Sanity-check the final line
by multiplying it out --- thirty seconds that catches ninety percent of
slips.
\emph{Drill 4.} Find $7^{-1} \bmod 15$ by back-substitution (two lines),
and check by multiplication.
\section{Card 5: square-and-multiply, tabular form}
To compute $w^{e} \bmod n$ by hand: build the squares
$w, w^2, w^4, w^8, \dots$ (each line: square the previous, reduce),
then multiply together the squares selected by the binary digits of $e$.
Bookkeeping form used in Chapter~\ref{ch:prime}'s certificate check:
one column of exponents, one column of reduced values; never carry an
unreduced number to the next line. Cost: $\lfloor \log_2 e \rfloor$
squarings plus (ones in $e$'s binary) $- 1$ multiplies --- knowing the
cost formula lets you \emph{decline} hand computations that are too big,
which is itself a toolkit skill.
\emph{Drill 5.} Compute $3^{22} \bmod 23$ by the tabular method
($22 = 16 + 4 + 2$), and interpret the answer via Fermat.
\section{Card 6: the headroom audit}
For any limb design, three lines locate the overflow cliff:
\[
\text{headroom} = \text{word bits} - \text{radix bits}; \qquad
\text{add budget} = 2^{\text{headroom}}; \qquad
\text{mul check: } (\text{limb count}) \cdot 2^{2\cdot\text{bound bits}}
\overset{?}{<} 2^{\text{wide word}} .
\]
Run all three whenever anyone shows you a limb representation ---
Chapter~\ref{ch:why} (budget), Chapter~\ref{ch:automation} (mul check),
and Chapter~\ref{ch:field}'s $16p$ audit are all instances.
\emph{Drill 6.} A proposal uses radix-$29$ limbs in 32-bit words, nine
limbs, 64-bit wide multiplies, bound $2^{31}$ after growth. Does the mul
check pass?
\section{Card 7: quadratic residues by the ladder}
Is $a$ a square modulo an odd prime $p$? Euler's criterion decides:
\[
a^{(p-1)/2} \equiv
\begin{cases}
+1 \pmod p & a \text{ is a square,}\\
-1 \pmod p & a \text{ is not.}
\end{cases}
\]
Compute the power by Card~5's ladder. Small-scale sanity check first
--- $2$ modulo $7$: $2^{3} = 8 \equiv 1$, so $2$ \emph{is} a square mod
$7$ (indeed $3^2 = 9 \equiv 2$; finding the root is genuinely harder
than testing --- another find/check asymmetry). This card is
load-bearing in Chapter~\ref{ch:pyramid}: completeness of the Ed25519
addition law rests on ``$d$ is not a square,'' one Euler evaluation;
and the twist's legitimacy rests on ``$-1$ \emph{is} a square mod
$p$,'' which Euler settles by pure exponent parity:
$(-1)^{(p-1)/2} = +1$ exactly when $(p-1)/2$ is even, i.e.\
$p \equiv 1 \pmod 4$ --- true for $2^{255} - 19$ (check:
$2^{255} \equiv 0 \pmod 4$, so $p \equiv -19 \equiv -3 \equiv
1 \pmod 4$ ✓, no ladder required).
\emph{Drill 7a.} Is $3$ a square mod $11$? ($3^5 \bmod 11$ by ladder;
then find the root or trust the sign.)
\section{Card 8: the substitution test (specs)}
Given a claimed specification: substitute the worst implementation of
the right type (``return zero,'' ``return the input,'' ``ignore
arguments'') and evaluate the statement by hand. If the adversary
passes, the spec is not about correctness. Refinement for equations: if
the implementation appears identically on \emph{both} sides, it cancels
and was never tested (Chapter~\ref{ch:honesty}, exercise 11.5).
\emph{Drill 8.} Does the spec
$\forall a b,\ \denote{\code{mul}(a,b)} = \denote{\code{mul}(b,a)}$
survive the substitution test as a \emph{correctness} spec for
multiplication?
\section*{Drill answers}
\solhead{Drill 1} $252 \times 0.301 = 75.9$: $\ell$ has $76$ digits.
$2^{130} \approx 10^{39.1}$, vastly \emph{more} than $2 \times 10^{25}$
atoms --- brute force over $130$-bit keys loses to physics, not just to
patience.
\solhead{Drill 2} $2^{511} = (2^{255})^2 \cdot 2 \equiv 19^2 \cdot 2
= 722 \pmod{2^{255}-19}$.
\solhead{Drill 3} $255 = 3 \cdot 85$, so $2^{255} = (2^3)^{85} \equiv
1^{85} = 1 \pmod 7$; and $19 = 2 \cdot 7 + 5 \equiv 5$, so
$p \equiv 1 - 5 \equiv -4 \equiv 3 \pmod 7$.
\solhead{Drill 4} $15 = 2 \cdot 7 + 1$, so $1 = 15 - 2 \cdot 7$
directly: $7^{-1} \equiv -2 \equiv 13 \pmod{15}$. Check:
$7 \cdot 13 = 91 = 6 \cdot 15 + 1$ ✓.
\solhead{Drill 5} Squares mod $23$: $3^2 = 9$; $3^4 = 81 \equiv 12$;
$3^8 = 144 \equiv 6$; $3^{16} = 36 \equiv 13$. Then
$3^{22} = 3^{16} \cdot 3^{4} \cdot 3^{2} = 13 \cdot 12 \cdot 9$:
$13 \cdot 12 = 156 \equiv 156 - 138 = 18$; $18 \cdot 9 = 162 \equiv
162 - 161 = 1$. So $3^{22} \equiv 1 \pmod{23}$ --- which is Fermat's
little theorem announcing itself ($22 = 23 - 1$), and incidentally the
first condition of a Pratt witness check for $23$.
\solhead{Drill 6} Products: $2^{31} \cdot 2^{31} = 2^{62}$; nine terms:
$9 \cdot 2^{62} > 2^{3} \cdot 2^{62} = 2^{65} > 2^{64}$ --- \textbf{fails}
by at least one bit. (Exactly: $9 \cdot 2^{62} = 2^{62} \cdot 9
> 2^{64} \Leftrightarrow 9 > 4$ ✓ fails.) The design must either bound
limbs more tightly than $2^{31}$, reduce more often, or accumulate in
wider precision --- and now you can say so in a design review with three
lines of arithmetic as your citation.
\solhead{Drill 7a} $3^5 = 243 = 22 \cdot 11 + 1 \equiv 1 \pmod{11}$
(ladder: $3^2 = 9$, $3^4 = 81 \equiv 4$, $3^5 = 4 \cdot 3 = 12 \equiv 1$)
--- so $3$ \emph{is} a square mod $11$; indeed $5^2 = 25 \equiv 3$.
\solhead{Drill 8} No. Substitute $\code{mul}_{c}(a,b) :=$ ``return the
constant array $c$'': both sides become $\denote{c}$ --- the adversary
passes. Commutativity-of-the-implementation is a \emph{symmetry} spec;
symmetric garbage satisfies it. (Real correctness needs the other side
of the square: $\denote{a} \cdot \denote{b}$, a quantity the
implementation cannot influence.)