verifying-crypto-with-lean/chapters/appendix-toolkit.tex
mrwulf adbcdd6bde book overhaul moves 3-5: hook transplants, suspense mechanics, voice unification
Per the 7-reader didactic panel and BOOK-OVERHAUL-PLAN.md:

- front matter: box legend demoted below a lived example (the aha box
  becomes its own legend entry)
- ch04: open on the stake (proof the size of a compiler), new section
  'When you get stuck --- and you will' promoting the debugging session,
  checkpoint now carries the omega cliffhanger forward
- ch06: open on the dare (invert 19 mod a 77-digit prime, two-digit
  numbers only), machine-referee #eval after the Euclid box, checkpoint
  distills the constant-time trade into one quotable sentence
- ch10: cold-open on the 12 GB crash, spec vocabulary re-armed at the
  summit statement, falsification tryit after the 16p box (the -151
  #eval), wall dispatch tied to the cold open, closing paragraph places
  the certificate in the live log
- ch12: opening pyramid figure now carries question marks resolved
  layer by layer through the chapter (suspense instead of spoiler),
  kernel-wall rendered as a scene, 'Where you come in' promoted to its
  own subsection, false 'closing chapter' removed
- appendix-toolkit: opens in the design-review room, Drill 7b (parity
  argument), street assignment close
- appendix-walkthroughs: opens at the reader's low point, one-hole-one-
  paragraph contract, counts replaced by 'trust the folder'
- appendix-repo-tour: active three-promise opener, sabotage-the-button
  tryit, final tour stop at the transparency log

Build verified: tectonic clean, 118 pages, zero unresolved refs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-08 00:38:44 +02:00

207 lines
9.4 KiB
TeX

\chapter{The Pen-and-Paper Toolkit}
\label{app:toolkit}
You are in a design review. A slide asserts that nine products of
$31$-bit limbs accumulate in a $64$-bit word without overflow, the
presenter is already on the next slide, and everyone else is nodding.
You have perhaps forty seconds and no proof assistant. This appendix is
for that room. Every worked example in this book leaned on a small set of
hand-computation techniques; here they are as recipe cards --- the
reference for auditing numbers in the wild, where no chapter title tells
you which trick applies. Each card ends with a thirty-second drill;
answers close the appendix. (The slide, by the way, is wrong --- Card~6
and Drill~6 are the forty seconds that catch it.)
\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.)
\emph{Drill 7b.} Is $-1$ a square mod $11$? No ladder allowed --- decide
it by exponent parity alone, the way the card handled $p = 2^{255}-19$.
\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 7b} $(-1)^{(11-1)/2} = (-1)^{5} = -1$: \emph{not} a
square --- because $(11-1)/2 = 5$ is odd, i.e.\ $11 \equiv 3 \pmod 4$.
Parity of one exponent, no arithmetic bigger than a division by two.
\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.)
\bigskip
\noindent\emph{The street assignment.} These cards were built in a book,
but they pay rent outside it. Sometime this week you will meet a number
in the wild --- a README boasting ``$2^{128}$ operations to break,'' a
blog post's limb bound, a slide with an accumulator width. Pick one and
audit it with the cards, on paper, before you believe it. The first time
you catch a real number being wrong in public, this appendix will have
paid for the whole book.