| Internet-Draft | PSI | October 2026 |
| Singh | Expires 16 April 2027 | [Page] |
This document specifies Proof of Stateful Integrity (PSI), a format and procedure for issuing signed receipts over digital records. A PSI receipt binds the SHA-256 digest of a canonical JSON record to an issuer signature, a monotonic sequence number, and a Merkle tree root computed with the RFC 6962 hashing profile, and may reference an external timestamp anchor. Any party holding the record, the receipt, and the issuer public key can verify the receipt offline. PSI provides evidence of integrity, origin, and ordering only. It does not establish that a record is true, lawful, safe, or compliant with any regulation.¶
This revision replaces revision 01. It withdraws all claims of zero-knowledge proofs, multi-party computation, and inclusion proofs, which the reference implementation does not provide.¶
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 16 April 2027.¶
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.¶
Automated systems, including software agents, produce records whose later integrity is disputed. Ordinary logs can be edited by anyone with storage access. PSI defines a small receipt that makes later modification of a record detectable and that can be checked without contacting the issuer.¶
PSI is deliberately narrow. It composes existing primitives: JSON Canonicalization Scheme [RFC8785], SHA-256 [FIPS180-4], Ed25519 [RFC8032], and the Merkle tree hashing of [RFC6962].¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
A receipt is a JSON object with the following members:¶
Records SHOULD NOT contain personal or confidential data. Submitters SHOULD send only the record digest to the issuer.¶
Leaves are the record digests of ledger entries, in ascending sequence_number order; a leaf's index never changes once assigned. The tree head is computed as the Merkle Tree Hash (MTH) of Section 2.1 of [RFC6962], using SHA-256:¶
leaf_hash(d) = SHA-256(0x00 || d)
node_hash(l,r)= SHA-256(0x01 || l || r)
MTH({}) = SHA-256()
MTH(D[n]) = node_hash(MTH(D[0:k]), MTH(D[k:n]))
where k is the largest power of two < n
¶
Here d is the 32-byte binary record digest. Odd nodes are not duplicated. This revision defines tree heads only; inclusion and consistency proofs are left to a future revision. Receipts issued before this profile was adopted carry no merkle_profile member and MUST NOT be verified against it.¶
The signature input is the RFC 8785 canonical encoding of the receipt object with the signature member removed. The issuer signs it with Ed25519. An issuer that cannot produce a valid signature MUST fail the request and MUST NOT emit a receipt with a substitute value.¶
An issuer MAY additionally attach a hash-based signature [RFC8554] as defined in a separate post-quantum profile document. Such signatures use one-time keys and MUST be allocated from a strictly increasing counter so that no key is ever used twice.¶
Issuer public keys are published at /.well-known/apex-psi-trust-anchor.json on the issuer's origin as a list of key_id, algorithm, public key, and validity period.¶
An issuer MAY periodically commit a tree head to a public timestamping system such as OpenTimestamps [OTS]. The anchor object then carries the system name, the committed root, and the proof data. An anchor shows that the root existed no later than the anchored time; it does not show when a record was created.¶
A verifier holding a record and a receipt:¶
Verification returns only: digest match, signature validity, and anchor validity. It never returns a judgement about the truth, legality, or compliance of the record.¶
This document has no IANA actions.¶