Status: active
Owner: Security
Last reviewed: 2026-02-20
Guarantee end-to-end verifiable receipts and rich URLs with deterministic canonical payloads.
UBL_CRYPTO_MODE=compat_v1- Receipt signing in WF via
UnifiedReceipt::finalize_and_sign - Rich URL verification in
shadoworstrictmode by flag/scope - Canonical payload source is NRF bytes (
ubl_canon) - Primary production signature algorithm is Ed25519
- PQ dual-sign (
ML-DSA3) is currently a feature-gated stub (ubl_kms/pq_mldsa3): wire/API shape exists, PQ signature value isNoneuntil backend integration
- Receipt:
ubl/receipt/v1(UBL_SIGN_DOMAIN_RECEIPT) - Rich URL:
ubl/rich-url/v1(constant fromubl_canon::domains::RICH_URL) - Runtime attestation:
ubl/runtime-attestation/v1(UBL_SIGN_DOMAIN_RUNTIME_ATTESTATION)
- Receipt verify recomputes payload from canonical receipt JSON (excluding
sig). - Verify key is derived from
did:keyin receipt. - Rich URL verify checks:
- payload signature
- CID consistency
- runtime hash (
rt) consistency for hosted URLs
- In
shadowmode, failures are reported but can be non-blocking. - In
strictmode, failures are fail-closed.
- Compat mode accepts legacy raw-32-byte did:key payload.
- Strict mode validates multicodec-ed25519 prefix (
0xED01) indid:key:z.... - Use
UBL_DIDKEY_FORMAT=strictfor hardened environments.
- Signing key source is
SIGNING_KEY_HEX. - Receipt auth-chain secret supports overlap via
UBL_STAGE_SECRET_PREV. - Operational rotation must preserve verification continuity during overlap windows.
- Prefer private/coordinated disclosure with repository maintainers.
- Do not publish exploit details before a fix window is agreed.