| Internet-Draft | Memory Projection Records | July 2026 |
| Ferro & Schrock | Expires 30 January 2027 | [Page] |
Encrypted and signed memory objects can establish source integrity, authorship, and read-time trust without establishing which exact bytes a memory adapter selected and delivered to a downstream AI system. This document specifies a provider-neutral signed Memory Projection Record. The record commits to the recall request and selection policy, the read-time keyring snapshot, the ordered source objects and exact context fragments delivered, the complete projection bytes, and summarized exclusions. It deliberately does not claim that a model received, used, or weighted the projection, that an action was authorized, or that an outcome occurred. ApertoMemory is one source profile; other memory formats can use the same projection boundary.¶
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 30 January 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.¶
A memory-object format and a context-delivery record answer different questions. A memory-object format can prove that an object verified under a key accepted at read time. It does not, by itself, identify the set, order, framing, or exact bytes selected for a particular AI request. Conversely, a projection record cannot repair invalid source provenance. It can only preserve the source decision and bind it to the bytes emitted by a named adapter.¶
This document defines the join between those layers. A projection producer signs one closed record after the projection bytes and their ordered fragments are finalized. A verifier recomputes the source-object, fragment, and complete-projection commitments and verifies the adapter signature under a relying-party-pinned key. The resulting fact is narrow: the producer attests that it emitted the committed projection under the committed selection context.¶
The source memory profile remains authoritative for its own object, cryptographic, trust, authorship, and custody semantics. In particular, ApertoMemory [I-D.ferro-apertomemory] remains authoritative for sealed Memory Objects and its read-time trust derivation. This document does not redefine those semantics. It defines a joint, provider-neutral artifact above that boundary.¶
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 conforming Memory Projection Record establishes all of the following:¶
A projection record does not establish transport receipt, insertion into a model context window, model use or weighting, action linkage, action authorization, execution, or outcome. A downstream system MAY bind the projection digest into a separate request, authorization, or outcome protocol. Such a binding is outside this document.¶
MEMORY-PROJECTION-RECORD-v1 is a closed I-JSON object [RFC7493]. The top-level members are shown below. Member order in a JSON serialization has no significance. Unknown members MUST be refused until a later version defines an extension mechanism.¶
{
"@version": "MEMORY-PROJECTION-RECORD-v1",
"source_profile": "draft-ferro-apertomemory-02",
"projection_id": "urn:memory-projection:example:1234",
"created_at": "2026-07-29T17:00:01.000Z",
"adapter": {
"id": "urn:memory-adapter:example:1",
"key_id": "adapter-key-2026-07"
},
"selection_context": {
"recall_request_digest": "sha256:...",
"selection_policy_digest": "sha256:...",
"trust_snapshot_digest": "sha256:...",
"trust_evaluated_at": "2026-07-29T17:00:00.000Z",
"context_frame_profile": "urn:context-frame:example:v1"
},
"delivered": [
{
"position": 0,
"object": {
"format_version": 2,
"sealed_object_digest": "sha256:..."
},
"context_fragment_digest": "sha256:...",
"derived_trust": "trusted",
"authorship": "attested",
"author_key_id_b64u": "0FMJy9O1Xzs",
"custody_present": true
}
],
"exclusions": {
"total": 2,
"by_reason": {
"authentication_failed": 1,
"schema_invalid": 0,
"policy_filtered": 0,
"context_limit": 1
}
},
"projection": {
"encoding": "utf-8",
"byte_length": 314,
"digest": "sha256:..."
},
"nonclaims": {
"model_use": "NOT_ESTABLISHED",
"action_linkage": "NOT_ESTABLISHED",
"action_authorization": "NOT_ESTABLISHED",
"execution_outcome": "NOT_ESTABLISHED"
},
"proof": {
"alg": "Ed25519",
"key_id": "adapter-key-2026-07",
"signature_b64u": "..."
}
}
¶
@version MUST equal MEMORY-PROJECTION-RECORD-v1. projection_id MUST be a globally unique URI. created_at and trust_evaluated_at MUST be UTC timestamps conforming to [RFC3339]. adapter.id identifies the producer; adapter.key_id selects a key from relying-party policy. proof.key_id MUST equal adapter.key_id.¶
The relying party MUST set a maximum acceptable interval between trust_evaluated_at, created_at, and its verification time. A valid signature does not make a stale trust decision current.¶
recall_request_digest is SHA-256 over the exact request bytes under a profile that defines their serialization. selection_policy_digest is SHA-256 over the exact policy bytes that determined eligibility, filtering, ordering, and limits. trust_snapshot_digest is SHA-256 over the source-profile-defined trust snapshot. context_frame_profile names the deterministic transformation from one opened source object and its labels to one context fragment.¶
The cleartext request, policy, and trust snapshot need not be carried in the record. A verifier that relies on any of them MUST possess the exact bytes and their applicable serialization profiles and MUST recompute the corresponding digest.¶
delivered is an array in projection order. position MUST equal the zero-based array index and MUST NOT repeat. sealed_object_digest is SHA-256 over the exact complete source-object bytes as supplied, without parsing or reserialization. format_version is interpreted only by the named source profile.¶
context_fragment_digest is SHA-256 over the exact bytes of the fragment emitted for that entry, including framing labels, separators, and line endings. The complete projection is the bytewise concatenation of those fragments in ascending position. projection.byte_length and projection.digest MUST equal the length and SHA-256 digest of that complete byte string. This version supports only UTF-8 projection bytes; projection.encoding MUST equal utf-8.¶
derived_trust, authorship, author_key_id_b64u, and custody_present preserve the source-profile result used at selection time. They MUST NOT be recomputed under rules invented by the projection producer. For an ApertoMemory source, the source profile remains solely authoritative for those values. Unverified content MUST use authorship unknown and a null author key. Attested authorship requires custody_present true.¶
exclusions.total MUST equal the sum of the closed by_reason counters. authentication_failed counts objects refused by source authentication; schema_invalid counts source objects the source profile refuses; policy_filtered counts otherwise valid objects excluded by policy; and context_limit counts otherwise eligible objects omitted due to a projection limit. A producer MUST NOT map an unknown reason into a semantically different counter. This version does not disclose excluded object identifiers, reducing correlation and content-oracle risk.¶
Every member except proof is inside the signature boundary. The producer removes proof, canonicalizes the remaining object with JCS [RFC8785], prefixes the following UTF-8 domain string and one zero octet, and signs the resulting bytes with Ed25519 [RFC8032]:¶
MEMORY-PROJECTION-RECORD-v1\0 || JCS(record without proof)¶
proof.alg MUST equal Ed25519. signature_b64u is the unpadded base64url encoding [RFC4648] of the 64-byte signature. The public key MUST come from relying-party policy or an authenticated key-distribution mechanism outside the record. A key carried with the record is not a trust anchor.¶
A verifier MUST refuse mutation, omission, duplication, or reordering of a delivered entry; a fragment or projection mismatch; an unpinned, expired, or compromised adapter key; a stale trust evaluation; a count mismatch; an unknown field; an altered nonclaim; or an invalid signature.¶
A downstream protocol may bind projection.digest and projection_id into a model invocation, action proposal, authorization, admission decision, execution receipt, or outcome record. That downstream protocol is authoritative for its own semantics. The Memory Projection Record MUST remain valid and useful without requiring any particular agent, authorization, or outcome framework.¶
EMILIA Trusted Context, AEC, Gate, and Outcome Binding are one consumer profile. They may use the projection as one evidence leg and independently bind the actual action and consequence. They are not part of the neutral projection-record wire format and do not authorize changes to the source profile or projection record.¶
A signed projection can preserve poisoned content with high integrity. Producers MUST therefore apply the native source profile fail closed and MUST keep unverified content distinguishable from self or trusted content. The projection signature proves an adapter statement, not the correctness of a memory, trust policy, keyring, framing policy, or model behavior.¶
Stable object identifiers and excluded-object lists create correlation and membership oracles. This version commits to exact source bytes and carries aggregate exclusion counts rather than cleartext source identifiers. Deployments SHOULD use pairwise adapter identifiers where appropriate and SHOULD minimize retention of request, policy, and projection material.¶
Replay can cause an old but valid projection to be applied under a new request. Relying parties MUST enforce freshness and SHOULD register projection_id atomically when single use is required. A stale or revoked source keyring, adapter key, or policy MUST NOT be made current merely by replaying a valid historical signature.¶
Memory projections can contain highly sensitive personal facts and can reveal selection behavior even when source objects remain encrypted. Records SHOULD carry commitments rather than cleartext requests, policies, trust snapshots, or excluded identifiers. The projection bytes SHOULD be disclosed only to the intended downstream recipient. Logs SHOULD avoid storing raw projection or fragment bytes unless operationally required.¶
This document has no IANA actions.¶
An Apache-2.0 executable discussion profile [AMEM-EMILIA-INTEROP] currently implements AMEM-PROJECTION-RECORD-v0. It signs the ordered projection with Ed25519, verifies exact sealed-object, fragment, and complete-projection digests, preserves ApertoMemory read-time trust and custody results, and exercises positive and hostile mutation vectors. The implementation uses the domain AMEM-EMILIA-PROJECTION-RECORD-v0 and marks each record as discussion input rather than ApertoMemory conformance.¶
The v0 executable profile is implementation input to this -00. It is not asserted to conform to MEMORY-PROJECTION-RECORD-v1 until the neutral field set, domain string, and reciprocal tests in this document are implemented and independently reviewed. ApertoMemory and EMILIA have independently reproduced five source-fact cases from the ApertoMemory reference implementation and matched their exact source-object digests and native trust, authorship, signer, author, and custody results. That bounded check is not blanket conformance and establishes none of the nonclaims in Section 2.¶
The authors thank Matteo Clementel for his review and contributions to the memory-projection boundary.¶