Educational tour · Annex D + F
Sole control you can verify — without burying the wallet provider in HSM firmware.
A gentle, step-by-step introduction
Words like CKM_ECDH1_DERIVE, Y_bl, τ_U, ASN, Tr, and “blinding” are collected with plain-language definitions.
u, Y, a_U, G', …TS_S/TS_E, Tr, ICCKM_…, CKA_…, SoftHSMOpen GLOSSARY.md · also linked from the lab header.
Only you (PIN + your device) can authorize use of your keys — and later, anyone should be able to check that this was true.
If the wallet provider’s software is hacked, it might drive keys in the HSM. The old instinct: put that software inside HSM firmware.
This design’s answer: keep a normal software WSCA — but make misuse detectable fast.
| Who | Plain-language role |
|---|---|
| Wallet | Your phone. Holds PIN + device key. Never sends the raw PIN-sensitive public key. |
| WSCA | Provider’s software (a container). Orchestrates work. Do not trust it. |
| HSM / WSCD | Hardware (or SoftHSM). Holds secrets. Writes an audit log of every key use. |
| Monitor | Independent checker: receipts × audit. No secrets. |
| Judge | Anyone with public evidence. Runs Algorithm 38. |
Monitor compares two streams the attacker cannot keep consistent: public receipts and hardware audits.
Private key = secret number u
Public key = U = u · G
Given U, recovering u is hard. That’s the lock.
A way to prove “I know u” for a message — without revealing u.
Verifiers only need the public key.
Ordinary ECDSA: one private key signs.
SECDSA binds signing to both:
P (what you know)u (what the phone holds)Roughly: strength like P · u — a safe that needs code + physical key.
The design carefully avoids handing the provider the PIN-sensitive public point Y = P · U.
If someone steals Y = P · U, they can guess PINs offline until the math matches.
So the wallet sends only a blinded copy:
Y_bl = t · Y (random t chosen on the phone)
Y and tProvider never learns raw Y.
Create a certificate binding account id, blinded SECDSA material, and device key U — without revealing raw Y.
uY, factor ta_U (non-extractable)PC / τY, PINWSCA issues (TS_S, N):
TS_S — earliest time this attempt may runN — nonce binding this attemptLater the receipt closes the window at TS_E.
Same wallet → windows never overlap, so each HSM use maps to at most one receipt.
Wrong PIN still sends a message — the HSM check fails without leaking the PIN.
Two HSM uses on success: (1) authenticate with blinding key a_U, then (2) perform the instruction’s user-key op. The paper’s “one PKCS#11 call” refers to that authentication step — not the whole instruction.
Each successful run produces a Tr that binds:
TS_EA compromised WSCA cannot forge a valid Tr without the user’s PIN factors.
Inputs (all public): Internal Certificate · record public key · Transaction Records
Output: ACCEPT or REJECT per record
a_UTransferable evidence for disputes — the lab’s Judge page.
Inside a compromised WSCA an attacker can reset counters or skip PIN checks.
They still cannot mint matching receipts for what the HSM actually did.
Security rests on an axis that does not pass through the WSCA: Transaction Records × HSM audit log.
Near-real-time alarm → suspend the service. No proprietary WSCA firmware required for that argument.
time →
[==== window SN1 ====] [==== window SN2 ====]
▲ ▲ ▲ ▲
blinding user blinding user
…too many PIN guesses… → Alg 39 alarm
▲ ▲ ▲ ▲ ▲
orphan user (no window) → Alg 40 alarm
◆
Bars = claimed windows in receipts. Marks = real HSM key uses.
τ−1 extra blinds| Simulate | What the monitor sees |
|---|---|
| Skip PIN · use user key | User audit with no matching window → Alg 40 |
| Burn τ PIN attempts | Too many blinds between windows → Alg 39 |
| Honest traffic | NO_ALARM |
Paper’s operational response: raise WSCA_COMPROMISE_ALARM and suspend.
Keep ~200 bytes per transaction:
ASN ‖ TS_E ‖ T₁ ‖ T₂ ‖ T₃ ‖ Sig
git clone https://github.com/HarryKodden/SECDSA cd SECDSA && go run ./cmd/lab # http://localhost:8080 docker pull ghcr.io/harrykodden/secdsa:latest docker run --rm -p 8080:8080 ghcr.io/harrykodden/secdsa:latest
Path: Activate → GENKEY → SIGN → Monitor → Burn τ → instruct → Timeline → Judge.
Sole control without trusting the WSCA — detect compromise, don’t bury it in firmware.
← → or space to move · home/end for ends · glossary