Skip to main content

FPSF-MPC-001 — Reference

Layer: Reference · Audience: developers (daily reference) For normative requirements, see the Formal Specification.


API Endpoints

EndpointMethodDescription
/api/v1/keysPOSTCreate a new disposable key pair
/api/v1/keysGETList all active disposable keys for the account
/api/v1/keys/{key_id}GETGet metadata for a single disposable key
/api/v1/keys/{key_id}/signPOSTSign a message with a disposable key
/api/v1/keys/{key_id}DELETEDestroy a disposable key

HTTP Status Codes

CodeMeaning
200Success
201Resource created
400Malformed request (invalid JSON, not canonical, missing fields)
401Signature verification failed
403Root key attempted to sign directly; invalid sub key authorization
404Key ID not found or not owned by caller
409Key already in DESTROYING or DESTROYED state
429Rate limit exceeded
500Internal error
503Insufficient online nodes to complete operation

Error Codes

CodeHTTPDescription
INVALID_JSON400Request body is not valid JSON
NOT_CANONICAL400Envelope JSON is not RFC 8785 canonical
MISSING_FIELD400Required envelope field absent
EXPIRED_TIMESTAMP401Timestamp outside ±5 minute window
REPLAYED_NONCE401Nonce has been seen before
INVALID_SIGNATURE401Request signature does not verify
INVALID_AUTHORIZATION401Authorization token signature does not verify
SUB_KEY_MISMATCH401Request signer does not match token sub_key_pub
ROOT_KEY_SIGNING403Request signed by a root key directly
KEY_NOT_FOUND404Key ID does not exist or belongs to another account
KEY_DESTROYED409Key has already been destroyed
KEY_BEING_DESTROYED409Destruction is in progress
INSUFFICIENT_NODES503Not enough online nodes
DKG_FAILED503Key generation failed after retries
SIGNING_FAILED503Threshold signing failed
COORDINATOR_UNAVAILABLE503Coordinator temporarily unreachable
INTERNAL_ERROR500Unexpected internal error

Disposable Key States

StateTerminalDescription
ACTIVENoKey is available for signing
SIGNINGNoA signing job is in progress
DESTROYINGNoDestruction initiated; shares being wiped
DESTROYEDYesAll shares wiped; key metadata retained for audit

Node States

StateDescription
CONNECTINGWebSocket handshake in progress
ONLINEFully connected; eligible for group assignment
DEGRADEDMissed 3–4 heartbeats; not assigned to new groups
OFFLINEMissed 5+ heartbeats or connection dropped
REVOKEDCertificate revoked; permanently excluded
RECONNECTINGAttempting to re-establish connection

Key Encoding

ItemEncodingLength
Ed25519 public keybase64url, no padding32 bytes → 43 chars
Ed25519 signaturebase64url, no padding64 bytes → 86 chars
Key IDUUID v436 chars
Account IDlowercase hex SHA-25664 chars
Noncebase64url, no padding16 bytes → 22 chars

Default Threshold Parameters

ParameterDefaultMinimumNotes
threshold_t32Single-node signing disallowed
threshold_n5t + 1At least one redundant node
Max nCoordinator policyRecommended 7–15

Glossary

TermDefinition
Root KeyOffline Ed25519 key pair. Signs Authorization Tokens only. Never transmitted.
Sub KeyOnline Ed25519 key pair. Signs all API requests. Authorized by the root key.
Disposable KeyEd25519 key pair generated by MPC DKG. Private scalar never assembled.
NodeMPC network participant holding key shares.
CoordinatorCentral orchestration server. Manages nodes, groups, and jobs. Never holds key material.
GroupA temporary set of n nodes assigned to one disposable key.
ThresholdThe minimum number t of nodes required to sign.
DKGDistributed Key Generation.
FROSTFlexible Round-Optimized Schnorr Threshold Signatures.
ShareA node's fragment of a distributed private key scalar.
Authorization TokenRoot key signature certifying a sub key. Presented in every API request.
Key IDUUID v4 assigned by the Coordinator to identify a disposable key.
Account IDSHA-256 hash of the root key public key, hex-encoded.
Canonical JSONJSON serialized per RFC 8785. Required for deterministic signing.
VRFVerifiable Random Function. Used for anti-collusion group selection.

FPSF-MPC-001 v1.0.0 · Draft · Fabric Payment Standards Foundation · Apache-2.0