pith:PHLOFSA2
BIDO: A Biometric Identity Online Authentication Framework
BIDO generates ECDSA keys on demand from a live face scan salted with a memorized secret to achieve AAL2 authentication without storing any biometric templates or PII.
arxiv:2605.16908 v1 · 2026-05-16 · cs.ET · cs.CR · cs.CV
Add to your LaTeX paper
\usepackage{pith}
\pithnumber{PHLOFSA2SUTRDQLZEYUNKTSTGN}
Prints a linked badge after your title and injects PDF metadata. Compiles on arXiv. Learn more · Embed verified badge
Record completeness
Claims
BIDO achieves Authenticator Assurance Level 2 (AAL2) per NIST SP 800-63B without storing long-lived biometric templates, facial images, or any PII by deriving ECDSA key material deterministically from a live biometric measurement salted with a user-defined memorized secret at every authentication event.
The multi-stage pipeline (Dlib landmark extraction, affine alignment, frontality gating, Euclidean distance quantization with q=8, inter-session drift stabilization, and majority-voting SHA-256 binding) produces a Verification Seed stable enough across sessions and devices to keep cryptographic FAR at 0.03% and FRR at 0.90% while remaining non-discoverable; the abstract provides no explicit mechanism or proof for the drift stabilization step.
BIDO derives transient ECDSA keys from live facial biometrics salted with a memorized secret to produce non-resident WebAuthn credentials, achieving 99.51% verification accuracy on LFW without storing templates or PII.
References
Formal links
Receipt and verification
| First computed | 2026-05-20T00:03:29.566034Z |
|---|---|
| Builder | pith-number-builder-2026-05-17-v1 |
| Signature | Pith Ed25519
(pith-v1-2026-05) · public key |
| Schema | pith-number/v1.0 |
Canonical hash
79d6e2c81a952711c1792628d54e53334a533d1c90ff7fc53dd97df37531615f
Aliases
· · · · ·Agent API
Verify this Pith Number yourself
curl -sH 'Accept: application/ld+json' https://pith.science/pith/PHLOFSA2SUTRDQLZEYUNKTSTGN \
| jq -c '.canonical_record' \
| python3 -c "import sys,json,hashlib; b=json.dumps(json.loads(sys.stdin.read()), sort_keys=True, separators=(',',':'), ensure_ascii=False).encode(); print(hashlib.sha256(b).hexdigest())"
# expect: 79d6e2c81a952711c1792628d54e53334a533d1c90ff7fc53dd97df37531615f
Canonical record JSON
{
"metadata": {
"abstract_canon_sha256": "4f6f393c6d47c7dc46797ef9e101cae98476028c6c683924b1c7a735c16fe45a",
"cross_cats_sorted": [
"cs.CR",
"cs.CV"
],
"license": "http://creativecommons.org/licenses/by-nc-nd/4.0/",
"primary_cat": "cs.ET",
"submitted_at": "2026-05-16T09:49:10Z",
"title_canon_sha256": "5a123f3fb0143ec0df2dbc879e315c6f8e37bf19f87cefed2211ee1e30ad548e"
},
"schema_version": "1.0",
"source": {
"id": "2605.16908",
"kind": "arxiv",
"version": 1
}
}