| Internet-Draft | DSPIP | January 2026 |
| Boell | Expires 17 July 2026 | [Page] |
This document specifies the Digital Signing of Physical Items Protocol (DSPIP), a cryptographic protocol for authenticating physical items using digitally signed QR codes. This specification focuses on the SHIP type for shipping and logistics applications, providing cryptographic authentication of packages with chain of custody tracking.¶
The protocol introduces privacy-preserving delivery mechanisms including encrypted recipient information, last mile provider selection, physical anti-cloning protections through split-key labels, and scalable revocation and delivery confirmation systems. DSPIP uses DNS-based public key distribution similar to DKIM and supports optional blockchain integration for immutable record keeping. While this specification focuses on shipping applications, the protocol includes a type field to enable future expansion to other use cases.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 17 July 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Supply chain logistics require verifiable proof of package authenticity, chain of custody, and delivery confirmation. Current shipping systems rely on proprietary tracking databases with varying security models and no cryptographic verification of package authenticity or delivery. QR codes on shipping labels can be easily copied, leading to fraud and misdirection of packages.¶
DSPIP provides a cryptographic protocol specifically designed for shipping and logistics, enabling verification of package origin, custody chain, and delivery while protecting recipient privacy. The protocol addresses the fundamental challenge of QR code cloning through physical binding mechanisms and provides privacy-preserving delivery that reveals recipient information only to authorized last mile providers.¶
By using the secp256k1 elliptic curve, DSPIP keys are compatible with major blockchain networks, allowing optional integration for immutable custody records while not requiring blockchain for basic operation. The protocol includes a type field set to "SHIP" for this specification, enabling future expansion to other applications.¶
The design goals for DSPIP shipping protocol are:¶
DSPIP follows a "digital envelope" paradigm for shipping labels:¶
This model protects recipient privacy while maintaining package routability and authenticity verification.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
DSPIP builds upon established standards while introducing novel shipping-specific features:¶
Standards This Document Builds Upon:¶
Related Shipping Standards:¶
Novel Contributions:¶
The DSPIP shipping protocol flow consists of the following steps:¶
+--------+ +----------+ +---------+
| Sender | | Carrier | |Recipient|
+--------+ +----------+ +---------+
| | |
| 1. Create Shipping Payload | |
| {sender, provider, | |
| trackingId, timestamp} | |
| | |
| 2. Select Privacy Mode | |
| 3. Encrypt Recipient | |
| 4. Base64 Encode | |
| 5. Sign with Private Key | |
| 6. Generate QR Code | |
| 7. Attach Label to Package | |
|==============================|========================|
| 8. Scan QR Code |
| 9. Parse Data |
| 10. DNS Lookup |
| 11. Verify Signature |
| 12. Check Revocation |
| 13. Decrypt Recipient |
| 14. Deliver Package |
| |=========================> |
| 15. Delivery Confirmation |
| |<======================== |
| 16. Record Proof |
The payload contains shipping information encoded as JSON. Country codes use [ISO3166] alpha-2 format:¶
{
"type": "SHIP", // REQUIRED: Fixed for shipping
"issuer": { // REQUIRED: Sender information
"name": "string",
"organization": "string",
"address": {
"street1": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"country": "string" // REQUIRED: per ISO3166 alpha-2
}
},
"subject": { // REQUIRED: Recipient/Provider
"name": "string",
"lastMileProvider": "string",
"address": { ... }
},
"itemId": "string", // REQUIRED: Tracking number
"timestamp": number, // REQUIRED: Unix timestamp (ms)
"typeData": {} // SHIP-specific fields
}
¶
The typeData object contains shipping-specific information including privacy mode, carrier details, customs information, and delivery confirmation settings.¶
DSPIP supports three privacy modes for shipping:¶
Traditional shipping with full recipient information visible.¶
Privacy-preserving with encrypted recipient data. The recipient's address and delivery instructions are encrypted with the last mile provider's public key.¶
Maximum security with physical anti-cloning. Uses Ed25519 keys printed in separate scratch-off zones on the physical label.¶
The complete QR code data structure contains:¶
QR data MUST be serialized using pipe (|) delimiters:¶
DSPIP|<version>|<type>|<keyLocator>|<payload>|<sig>[|<msg>]¶
The pipe delimiter was chosen for its low frequency in Base64 and domain names. Implementations MUST validate that exactly 6 or 7 pipe-delimited fields are present.¶
DSPIP uses DNS TXT records for public key distribution, following the model established by DKIM [RFC6376].¶
Key locators MUST follow this pattern:¶
<selector>._dspip.<domain>¶
Where selector is a unique identifier for the specific key, _dspip is the fixed protocol subdomain (underscore prefix per [RFC8552]), and domain is the organization's domain name.¶
The DNS TXT record MUST contain a semicolon-separated list of tag=value pairs:¶
v=DSPIP1; k=ec; c=secp256k1; p=<base64_public_key>; [optional]¶
Required tags: v (protocol version), k (key type), c (curve identifier), p (public key in Base64).¶
Optional tags: t (creation timestamp), x (expiration), n (notes), types, auth, address, coverage.¶
The address field specifies the physical location of signing facilities, primarily for last mile providers. This enables verifiers to display facility location on shipping labels for encrypted privacy mode, where the recipient address is hidden.¶
The address field uses a scheme prefix to indicate the encoding:¶
If no scheme prefix is present, implementations MUST interpret the value as a Plus Code (plus: scheme).¶
Plus Codes (Open Location Codes) are the RECOMMENDED addressing scheme due to their compact representation, open standard licensing, and global coverage.¶
Format: address=plus:<plus_code>¶
Short form: address=<plus_code>¶
Examples:¶
address=plus:86HJW222+22 (full Plus Code, ~3m precision) address=849VCWC8+R9 (implicit plus: scheme) address=plus:CWC8+R9,Omaha (short code with locality)¶
Plus Codes are 10-11 characters for full precision or 6-7 characters when combined with a locality reference. See [PLUSCODE] for the Open Location Code specification.¶
Traditional street addresses encoded using percent-encoding per [RFC3986].¶
Format: address=street:<percent_encoded_address>¶
Examples:¶
address=street:1234%20Post%20Office%20Way%2C%20Omaha%2C%20NE%2068101 address=street:123%20Business%20Ave%2C%20Suite%20100¶
Street addresses SHOULD include city and postal code for clarity.¶
Decimal latitude and longitude coordinates.¶
Format: address=geo:<latitude>,<longitude>¶
Examples:¶
address=geo:41.2565,-95.9345 address=geo:40.7128,-74.0060¶
Coordinates MUST use decimal degrees with negative values for South and West. Precision SHOULD be at least 4 decimal places (~11 meter accuracy).¶
Named facility reference for organizations with published facility directories.¶
Format: address=facility:<facility_id>¶
Examples:¶
address=facility:USPS-OMAHA-MAIN address=facility:UPS-NE-401¶
Facility references require external directory lookup. Organizations using this scheme SHOULD publish facility directories at a well-known location or via the discovery record.¶
To enable discovery of available selectors for a domain, organizations MAY publish a discovery record at the base _dspip subdomain.¶
_dspip.example.com. IN TXT "v=DSPIP1; type=discovery; selectors=warehouse,fulfillment,returns; delegation=list"¶
Discovery record tags:¶
The delegation tag indicates how selectors are organized:¶
Examples:¶
List delegation: _dspip.example.com. IN TXT "v=DSPIP1; type=discovery; selectors=warehouse-a,warehouse-b,fulfillment; delegation=list" Geographic delegation: _dspip.globalcorp.example. IN TXT "v=DSPIP1; type=discovery; delegation=geo; pattern=<region>-<facility>" Postal code delegation: _dspip.usps.example. IN TXT "v=DSPIP1; type=discovery; delegation=postal; pattern=<zip5>; coverage=00000-99999"¶
DSPIP keys have a defined lifecycle to ensure security while maintaining verification capability for in-transit packages.¶
The DNS TXT record supports the following lifecycle fields:¶
Required fields:¶
SHOULD include:¶
MAY include:¶
Keys transition through the following states:¶
For shipping applications, the following key lifetime is RECOMMENDED:¶
This provides sufficient time for packages to complete transit (typically 1-30 days) while limiting exposure from compromised keys.¶
Example DNS record with lifecycle fields:¶
warehouse._dspip.example.com. IN TXT "v=DSPIP1; k=ec; c=secp256k1; p=AzmjYBMwFZfa70H75ZOgLMUT0LVVJ+wt8QUOLo/0nIXC; t=1703548800; exp=1735084800; exp-v=1766620800; s=active; seq=1; n=Main%20Warehouse%20Key%202025"¶
Organizations SHOULD implement key rotation:¶
When lifecycle fields are omitted, verifiers MUST apply these rules:¶
Note: While omitting fields is permitted for backwards compatibility, implementations SHOULD include t, exp, and exp-v for production keys to enable proper lifecycle management.¶
The rsig field provides cryptographic authentication of lifecycle metadata within the DNS record itself. This protects against unauthorized modification of lifecycle fields (t, exp, exp-v, s, seq) by intermediate DNS resolvers or caches.¶
Without rsig, an attacker with access to an intermediate DNS resolver or cache could modify lifecycle fields without invalidating QR code signatures. For example:¶
The rsig field allows verifiers to detect such modifications by checking a signature over the lifecycle metadata.¶
The rsig signature covers a canonical string of lifecycle fields:¶
rsig_content = selector "|" t "|" exp "|" exp-v "|" s "|" seq¶
Where:¶
Example signable content: "warehouse|1703548800|1735084800|1766620800|active|1"¶
The rsig value is generated as follows:¶
The same key signs both QR codes and the rsig, providing proof that the key owner authorized the lifecycle metadata.¶
When rsig is present, verifiers SHOULD:¶
DNSSEC and rsig serve complementary purposes:¶
For maximum security, deployments SHOULD use both DNSSEC and rsig. DNSSEC alone is sufficient if the organization controls their DNS infrastructure end-to-end.¶
When a signing key is compromised or must be retired, organizations MUST have a mechanism to inform verifiers that the key should no longer be trusted. While the s=revoked status in the key record provides this capability, DNS caching can delay propagation.¶
The key revocation record provides a dedicated, frequently-checked endpoint for key status that operates independently of key record caching.¶
_revoked-key._dspip.example.com. IN TXT "v=DSPIP1; type=key-revocation; selector=warehouse; revoked=1703548900; reason=compromised; replacement=warehouse-v2"¶
Fields:¶
Organizations with multiple revoked keys MAY use multiple TXT records or a bulk format:¶
Individual records: _revoked-key._dspip.example.com. IN TXT "v=DSPIP1; type=key-revocation; selector=warehouse-a; revoked=1703548900; reason=compromised" _revoked-key._dspip.example.com. IN TXT "v=DSPIP1; type=key-revocation; selector=warehouse-b; revoked=1703549000; reason=retired" Bulk pointer: _revoked-key._dspip.example.com. IN TXT "v=DSPIP1; type=key-revocation-list; url=https://example.com/dspip/revoked-keys.json; updated=1703548800"¶
Verifiers MUST check key revocation status before trusting signatures:¶
The s (status) field in key records and _revoked-key records serve complementary purposes:¶
Organizations SHOULD update both when revoking a key:¶
Verifiers MUST treat a key as revoked if EITHER indicates revocation.¶
Individual packages may need to be revoked due to loss, theft, or fraud without revoking the signing key. DSPIP provides two mechanisms for package revocation.¶
For low-volume revocations, organizations MAY publish individual revocation records directly in DNS:¶
_revoked._dspip.example.com. IN TXT "v=DSPIP1; type=item-revocation; itemId=TRACK-2025-000123; revoked=1703548900; reason=lost"¶
Fields:¶
For scalability, senders MAY publish bulk revocation lists:¶
revocation._dspip.example.com. IN TXT "v=DSPIP1; type=revocation; url=https://example.com/dspip/revoked.json; format=json|bloom; updated=1703548800; ttl=86400"¶
{
"version": "1.0",
"issuer": "warehouse._dspip.example.com",
"updated": 1703548800,
"expires": 1719316800,
"revoked": [
{
"itemId": "TRACK-2025-000123",
"revoked": 1703548900,
"reason": "lost|stolen|damaged|recalled",
"expires": 1719316900,
"replacementId": "TRACK-2025-000124"
}
],
"signature": "issuer_signature"
}
¶
Bloom filter format (for privacy):¶
{
"version": "1.0",
"issuer": "warehouse._dspip.example.com",
"updated": 1703548800,
"filter": {
"type": "bloom",
"size": 1048576,
"hashes": 7,
"falsePositiveRate": 0.001,
"data": "base64_bloom_filter_data"
},
"signature": "issuer_signature"
}
¶
To ensure timely revocation detection, revocation records MUST NOT be cached indefinitely. The revocation list format includes freshness fields:¶
{
"version": "1.0",
"issuer": "warehouse._dspip.example.com",
"ts": 1703548800,
"max-age": 900,
"updated": 1703548800,
"revoked": [...]
}
¶
Freshness field semantics:¶
Verifier requirements:¶
Note: These freshness requirements apply to revocation lists only. Key records follow standard DNS TTL caching semantics.¶
Last mile providers MAY publish delivery confirmations:¶
delivered._dspip.usps.example. IN TXT "v=DSPIP1; type=delivered; url=https://usps.example/dspip/delivered.json; updated=1703548800; ttl=3600"¶
{
"version": "1.0",
"provider": "omaha-main._dspip.usps.example",
"updated": 1703548800,
"expires": 1711324800,
"delivered": [
{
"itemId": "TRACK-2025-000123",
"deliveredAt": 1703548900,
"deliveredTo": {
"type": "signature|photo|cryptographic",
"data": "base64_proof_data",
"recipientKeyHash": "sha256_hash",
"challenge": "base64_challenge",
"response": "base64_signature"
},
"location": {
"coordinates": "41.2565,-95.9345",
"accuracy": 10,
"address": "456 Main Street"
},
"carrier": {
"driver": "driver123._dspip.usps.example",
"signature": "carrier_attestation"
}
}
],
"signature": "provider_signature"
}
¶
Senders MAY specify callback URLs for real-time confirmation:¶
"deliveryConfirmation": {
"callbackUrl": "https://sender.com/dspip/confirm",
"callbackAuth": "Bearer abc123xyz789",
"callbackMethod": "POST"
}
¶
Callback payload:¶
{
"itemId": "TRACK-2025-000123",
"status": "delivered|attempted|returned",
"timestamp": 1703548900,
"proof": {
"type": "cryptographic",
"challenge": "base64_challenge",
"response": "base64_signature"
},
"signature": "provider_signature"
}
¶
DSPIP uses the secp256k1 elliptic curve as specified in [SEC2]:¶
Standard signature using ECDSA:¶
Standard verification reconstructs signable content, calculates SHA-256 hash, retrieves public key from DNS, and verifies ECDSA signature.¶
Split-key verification requires Zone B reveal and uses Ed25519 verification without DNS lookup.¶
Input: QR code data string. Output: Verification result with validity status.¶
The privacy-preserving delivery protocol protects recipient information during transit.¶
Organizations register as last mile providers by publishing keys:¶
Post office:¶
omaha-main._dspip.usps.example. IN TXT "v=DSPIP1; k=ec; c=secp256k1; p=AzmjYBMwFZfa70H75ZOgLMUT0LVVJ+wt8QUOLo/0nIXC; types=SHIP; auth=government; address=1234 Post Office Way, Omaha, NE 68102; coverage=68101,68102,68103,68104,68105"¶
Corporate mailroom:¶
mailroom._dspip.acmecorp.example. IN TXT "v=DSPIP1; k=ec; c=secp256k1; p=CylmZCNxGafb91I86BPhNNVV2NXYL+yu8SVQNq/2pKZE; types=SHIP; auth=organization; address=123 Business Ave"¶
Recipients are encrypted using ECIES over secp256k1 per [ECIES]:¶
Large organizations MAY implement tiered decryption:¶
Organization Master: mailroom._dspip.acmecorp.example¶
Department Level: engineering._dspip.acmecorp.example¶
Individual Level: john.doe._dspip.acmecorp.example¶
Vendors MAY use directory services to map addresses to providers:¶
Request:¶
GET https://directory.dspip.org/providers?zip=68102¶
Response:¶
{
"providers": [
{
"name": "USPS Omaha Main",
"keyLocator": "omaha-main._dspip.usps.example",
"services": ["standard", "express", "certified"],
"coverage": ["68101", "68102", "68103"],
"publicKey": "AzmjYBMwFZfa70H75ZOgLMUT0LVVJ+wt8QUOLo/0nIXC"
},
{
"name": "FedEx Omaha Hub",
"keyLocator": "omaha._dspip.fedex.example",
"services": ["overnight", "2day", "ground"],
"coverage": ["68101-68199"],
"publicKey": "BxkiXPQwFZfe80J86AOhMMVU1MWWK+xu9RVPMp/1oJYD"
}
]
}
¶
If decryption fails:¶
For international shipping:¶
{
"typeData": {
"customsInfo": {
"contents": "Electronics",
"value": 500,
"hsCode": "8471.30",
"originCountry": "US",
"destinationCountry": "CA"
},
"lastMileProvider": "toronto._dspip.canadapost.example",
"encryptedRecipient": "base64_encrypted"
}
}
¶
Split-key labels prevent QR code cloning through physical cryptographic binding.¶
Secure labels with embedded key pairs:¶
Physical Layout: +--------------------------------+ | DSPIP Authentication Label | | Serial: LABEL-2025-ABC123 | | | | Zone A: <SCRATCH OFF> | | Private Key (Sender Reveal) | | ████████████████████████████ | | | | Zone B: <SCRATCH OFF> | | Public Key (Receiver Reveal) | | ████████████████████████████ | | | | Apply QR Code Here: < > | | Security Features: | | - Holographic seal | | - Tamper-evident material | | - UV-reactive fibers | +--------------------------------+¶
Label producers MUST:¶
MANUFACTURING:¶
SENDER:¶
RECEIVER:¶
This mechanism provides:¶
DSPIP supports cryptographic proof of delivery.¶
At delivery:¶
Confirmation record format:¶
{
"parcelId": "TRACK-2025-000123",
"challenge": "base64_challenge",
"proof": "base64_proof",
"timestamp": 1703548900,
"location": "41.2565,-95.9345"
}
¶
Recipients MAY generate ephemeral keys:¶
At checkout:¶
{
"deliveryConfirmation": {
"publicKey": "ephemeral_pubkey",
"validUntil": 1704153600
}
}
¶
At delivery:¶
{
"challenge": "nonce:abc123:1703548900",
"response": "Sign(ephemeral_key, challenge)",
"discardKey": true
}
¶
Delivery proofs are published:¶
{
"itemId": "TRACK-2025-000123",
"delivered": {
"timestamp": 1703548900,
"recipientKeyHash": "sha256_hash",
"challenge": "base64_challenge",
"response": "base64_signature",
"carrier": {
"driver": "driver123._dspip.fedex.example",
"signature": "carrier_attestation"
},
"location": {
"coordinates": "41.2565,-95.9345",
"accuracy": 10
}
}
}
¶
For high-value shipments:¶
{
"itemId": "TRACK-2025-000123",
"confirmations": [
{
"party": "recipient",
"signature": "recipient_signature",
"timestamp": 1703548900
},
{
"party": "carrier",
"signature": "carrier_signature",
"timestamp": 1703548905
},
{
"party": "witness",
"signature": "witness_signature",
"timestamp": 1703548910
}
]
}
¶
DSPIP addresses the following shipping-specific threats:¶
Private Key Protection:¶
Key Rotation:¶
Key Revocation:¶
Data Minimization:¶
Privacy Modes:¶
Correlation Prevention:¶
Package revocation for lost/stolen items:¶
Individual records:¶
_revoked._dspip.example.com IN TXT "v=DSPIP1; itemId=TRACK-2025-000123; revoked=1703548900; reason=lost"¶
Bulk lists:¶
revocation._dspip.example.com IN TXT "v=DSPIP1; type=revocation; url=https://example.com/dspip/revoked.json; updated=1703548800"¶
Auto-pruning:¶
Privacy option:¶
This document requests IANA to register the following:¶
Private Key (hex):¶
e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35¶
Public Key Compressed (hex):¶
0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2¶
Public Key Base64 (for DNS):¶
AzmjYBMwFZfa70H75ZOgLMUT0LVVJ+wt8QUOLo/0nIXC¶
Payload:¶
{
"type": "SHIP",
"issuer": {
"organization": "ACME Logistics",
"address": {"city": "Omaha", "state": "NE", "country": "US"}
},
"subject": {
"name": "Bob Jones",
"address": {
"street1": "456 Main Street",
"city": "Lincoln",
"state": "NE",
"postalCode": "68501",
"country": "US"
}
},
"itemId": "TRACK-2025-000123",
"timestamp": 1703548800000,
"typeData": {
"privacyMode": "standard",
"parcelId": "TRACK-2025-000123",
"carrier": "ACME",
"service": "Ground"
}
}
¶
Signature (DER-encoded ECDSA/secp256k1, hex):¶
30440220250f55bf60f3f82031677d17e6202fbf12e31b9ce8d1541e287e1fdd8 ce40a41022056ef5cd183a674c4f5fdc5e0cac1dcfd386de2e7d505681f83104e 2b1f53a315¶
Recipient data (to be encrypted):¶
{
"recipientName": "Bob Jones",
"address": {
"street1": "456 Main Street",
"apartment": "4B",
"city": "Lincoln",
"state": "NE",
"postalCode": "68501"
},
"deliveryInstructions": "Use back door, code 4321"
}
¶
Label Serial: LABEL-2025-ABC123¶
Zone A Private Key (Ed25519, hex):¶
9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60¶
Zone B Public Key (Ed25519, hex):¶
d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a¶
Signature (Ed25519, hex):¶
1fb94d499a504e201433d0e783906a013e26c21daca3ab8c5ad1e9fcf73a1c58 c9ed3abd60802f3abaac01d35bada76ab1bf571ca1641b8d3ea62f7468fbef0f¶
Warehouse:¶
warehouse._dspip.example.com. IN TXT "v=DSPIP1; k=ec; c=secp256k1; p=AzmjYBMwFZfa70H75ZOgLMUT0LVVJ+wt8QUOLo/0nIXC; types=SHIP"¶
{
"version": "1.0",
"issuer": "warehouse._dspip.example.com",
"updated": 1703548800,
"revoked": [
{
"itemId": "TRACK-2025-000123",
"revoked": 1703548900,
"reason": "lost"
}
],
"signature": "base64_signature"
}
¶
Recommended settings:¶
Expected operation times:¶
Key records follow standard DNS caching semantics:¶
Revocation lists require stricter freshness controls:¶
Large-scale logistics operations (thousands of daily verifications) SHOULD implement centralized caching infrastructure:¶
Recommended architecture:¶
(Scanning Devices) --> (Regional Cache) --> (Central Cache) --> (DNS)
|
v
(Revocation Service)
¶
Tier 1 - Device Level:¶
Tier 2 - Regional/Facility Level:¶
Tier 3 - Central/Organization Level:¶
Benefits:¶
Devices MAY operate offline with cached data:¶
| Cache Age | Verification Behavior |
|---|---|
| < TTL | Normal verification, full trust |
| TTL to 4 hours | Verify with CACHE_STALE warning flag |
| 4-24 hours | Verify with OFFLINE_MODE warning flag |
| > 24 hours | Fail verification, queue for re-check |
Organizations SHOULD define acceptable staleness thresholds based on their security requirements and operational constraints.¶
Note: Revocation checks MUST use fresh data when network is available. Offline verification without revocation checks SHOULD be flagged.¶
Customer checkout flow with privacy-preserving delivery:¶
Split-key label flow for valuable items:¶
Internal routing with organizational keys:¶