IFP: 5 Title: Identity and Message Signing Class: Core Status: Draft Authors: Peter Kaminski, Claude (Opus 4.6) Created: 2026-03-04 Dependencies: IFP-1, IFP-2, IFP-4 License: CC-BY 4.0 (Creative Commons Attribution 4.0 International)
This IFP defines how Inter-Face agents identify themselves and how messages are authenticated. It establishes the identity model, message signing conventions, and verification procedures that form the trust foundation for agent communication.
Without identity and authentication, agents cannot distinguish legitimate peers from imposters, and humans cannot verify that messages attributed to a friend’s agent were actually sent by that agent.
IFP-3 notes that “the receiving agent must be able to identify the sender and verify the message was not tampered with in transit.” This IFP provides the conventions for doing so.
Per IFP-1 Section 6.2 (progressive authentication), the identity system supports multiple authentication levels corresponding to different trust depths. A first gossip exchange does not require the same authentication strength as a hot collaboration.
An Inter-Face agent identity consists of:
This IFP supports three identifier formats, in order of increasing formality:
| Format | Example | Use case |
|---|---|---|
| Simple name | pete-agent |
Early experimentation, human-readable |
| URL | https://pete.example/.well-known/iface |
Web-based agents with HTTPS endpoints |
| DID | did:key:z6Mk... |
Decentralized, self-sovereign identity |
Agents SHOULD use a URL or DID identifier for production use. Simple names are acceptable during early experimentation but provide no cryptographic identity guarantees.
An agent MAY publish an identity document at its well-known URL:
GET /.well-known/iface/identity
The identity document is a JSON object:
{
"ifp": 5,
"agent_id": "https://pete.example/.well-known/iface",
"display": "Pete's agent",
"keys": [
{
"key_id": "key-1",
"type": "ed25519",
"public_key": "base64url...",
"created": "2026-03-01T00:00:00Z",
"status": "active"
}
],
"endpoints": {
"inbox": "https://pete.example/.well-known/iface/inbox",
"capabilities": "https://pete.example/.well-known/iface/capabilities"
}
}
Per IFP-1 Section 6.2 (progressive authentication), Inter-Face supports escalating levels of authentication that correspond to the temperature model:
| Level | Name | Mechanism | Typical use |
|---|---|---|---|
| 0 | Introduction | Shared secret or introduction token from the humans | First contact between agents |
| 1 | Signed | Message signatures using public keys | Cool gossip exchanges |
| 2 | Verified | Key verified via identity document or out-of-band confirmation | Warm collaboration |
| 3 | Bound | Key bound to a DID or other externally verifiable identity | Hot collaboration, sensitive exchanges |
Agents SHOULD negotiate authentication level during the greeting phase. The required level for a given exchange depends on the disclosure tier and temperature.
A new connection MAY start at Level 0 and escalate. Agents MUST NOT downgrade authentication level within a conversation without explicit renegotiation.
Message signing uses the IFP-4 structured representation. Signatures are computed over the canonical form of the message (see IFP-4, Section 3).
A signature covers:
signed_headers array. At minimum, agents SHOULD sign: message_id, date, from, to, conversation_id, sequence, phase, content_type.signed_body is true, the signature covers body.text and body.parts[].Fields not listed in signed_headers are not integrity-protected by that signature.
Signatures are carried in the security.signatures array of the IFP-4 message:
{
"alg": "ed25519",
"key_id": "pete-agent#key-1",
"created": "2026-03-04T23:58:12Z",
"signed_headers": [
"message_id", "date", "from", "to",
"conversation_id", "sequence", "phase", "content_type"
],
"signed_body": true,
"sig": "base64url..."
}
alg – The signing algorithm.key_id – Identifies the key used, in the form agent_id#key_name.created – When the signature was created.signed_headers – Which header fields are covered.signed_body – Whether the body is covered.sig – The signature value, base64url-encoded.signed_headers, in the order listed.signed_body is true, include the canonical form of the body.sig field.This IFP defines the following algorithms:
| Algorithm | Identifier | Key type | Notes |
|---|---|---|---|
| Ed25519 | ed25519 |
Ed25519 public key | Recommended default |
| HMAC-SHA256 | hmac-sha256 |
Shared secret | For Level 0 (introduction) only |
Additional algorithms MAY be defined in future IFPs. Agents SHOULD support Ed25519 at minimum.
HMAC-SHA256 is included for Level 0 authentication, where two agents share an introduction token provided by their humans. It MUST NOT be used for Level 1 or above.
security.signatures[].key_id (via the sender’s identity document, or a cached key).signed_headers and body.error phase message.Agents MUST track message_id values to detect replayed messages. A message with a previously seen message_id SHOULD be rejected.
Agents MAY also check that:
date field is within an acceptable time window (e.g., 24 hours).sequence number is consistent with the conversation state.When verifying a signature, the agent needs the signer’s public key. Key lookup may proceed through:
If the key cannot be found, the agent SHOULD respond with an error explaining the situation rather than silently dropping the message.
Agents SHOULD support key rotation. When rotating keys:
active.retired (with a retired_date field).revoked.A revoked key MUST NOT be accepted for new signatures. If a message arrives signed with a revoked key, the agent SHOULD respond with an error explaining that the key has been revoked.
This IFP defines a minimal encryption model for messages that require confidentiality. Encryption is OPTIONAL.
"encryption": {
"scheme": "sealed_box",
"recipients": ["alice-agent"]
}
When a message is encrypted:
body section is replaced with the encrypted ciphertext.headers remain in plaintext (to allow routing and trace).security.encryption section describes the scheme and recipients.Encryption details (key exchange, algorithms, sealed box construction) are deliberately underspecified in this draft. A future revision or supplementary IFP will define concrete encryption schemes once the signing infrastructure is established and tested.
date field to prevent acceptance of very old messages, even if the signature is valid.The progressive authentication model was developed during a conversation between Peter Kaminski and Claude (Opus 4.6) on 2026-03-04, building on the progressive trust principle from the Inter-Face manifesto. The DKIM-like signature structure was proposed in a conversation between Peter Kaminski and ChatGPT in February 2026.
This is IFP-5, Draft status. Cryptographic algorithm choices and encryption details will be refined as implementation experience develops.