Client Sybil Proofs¶
Freebird issuance accepts an optional sybil_proof object on V4 and V7 native
bearer issuance requests. If the issuer is configured with a Sybil mode,
issuance requires a matching proof. V5 public bearer issuance is retired.
The local freebird-interface binary can attach proofs in two ways:
cargo run -p freebird-interface -- --pow-difficulty 20
cargo run -p freebird-interface -- --sybil-proof-json proof.json
Environment variables are also supported:
FREEBIRD_ISSUER_URL=http://127.0.0.1:8081 \
FREEBIRD_VERIFIER_URL=http://127.0.0.1:8082 \
FREEBIRD_POW_DIFFICULTY=20 \
cargo run -p freebird-interface
Proof Of Work¶
For single V4 issuance, the proof input is bound to the blinded request:
freebird:issue:v1:<issuer_id>:<blinded_element_b64>
The interface computes this automatically when --pow-difficulty or
FREEBIRD_POW_DIFFICULTY is set.
V7 native bearer issuance uses the same request-bound proof model, but the
binding is the exact canonical V7 request body and route. A client must mine
against the bytes it sends to /v7/native-bearer/issue; changing the body,
token-key ID, or V7 descriptor requires a fresh proof.
JSON Proof Input¶
--sybil-proof-json reads one JSON object matching the common SybilProof
schema. Examples:
{
"type": "invitation",
"code": "invite-code",
"signature": "base64url-signature"
}
{
"type": "webauthn",
"subject_hash": "opaque-subject-hash",
"auth_proof": "base64url-proof",
"timestamp": 1777920000
}
{
"type": "multi_party_vouching",
"vouchee_id_hash": "hash",
"vouches": [],
"hmac_proof": "base64url-proof",
"timestamp": 1777920000
}
For combined and or threshold modes, wrap proofs in:
{
"type": "multi",
"proofs": []
}
WebAuthn¶
WebAuthn proofs are produced by the issuer WebAuthn authentication flow. The
proof is bound to an opaque subject_hash, not the local passkey label used to
find a credential.
A browser client is served at /webauthn/, with distinct pages at
/webauthn/register and /webauthn/authenticate. The normal browser flow hands
proofs back to a requesting client by callback or postMessage; proof JSON is
only shown when no requesting client is present.
Custom clients should authenticate through /webauthn/authenticate/start and
/webauthn/authenticate/finish, then pass the returned proof as the webauthn
Sybil proof for issuance.
Multi-Party Vouching¶
Vouching proofs are generated from server-side vouching state. Operators manage
trusted vouchers and pending vouches through /admin/vouching/*; clients submit
the final multi_party_vouching proof object during issuance.