ifp

IFP-5: Identity and Message Signing

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)


Abstract

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.

Motivation

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.

1. Agent Identity Model

An Inter-Face agent identity consists of:

1.1 Identifier Formats

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.

1.2 Agent Identity Document

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"
  }
}

2. Authentication Levels

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.

3. Message Signing

Message signing uses the IFP-4 structured representation. Signatures are computed over the canonical form of the message (see IFP-4, Section 3).

3.1 What is Signed

A signature covers:

Fields not listed in signed_headers are not integrity-protected by that signature.

3.2 Signature Structure

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..."
}

3.3 Signing Procedure

  1. Construct the canonical form of the message per IFP-4 Section 3.
  2. Extract the values of the fields listed in signed_headers, in the order listed.
  3. If signed_body is true, include the canonical form of the body.
  4. Concatenate the extracted values into a signing input.
  5. Sign the input using the specified algorithm and key.
  6. Encode the signature as base64url and place it in the sig field.

3.4 Supported Algorithms

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.

4. Verification

4.1 Verification Procedure

  1. Extract the signature from security.signatures[].
  2. Look up the signing key using key_id (via the sender’s identity document, or a cached key).
  3. Reconstruct the signing input from the specified signed_headers and body.
  4. Verify the signature against the signing input using the specified algorithm.
  5. If verification fails, reject the message and respond with an error phase message.

4.2 Replay Protection

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:

4.3 Key Lookup

When verifying a signature, the agent needs the signer’s public key. Key lookup may proceed through:

  1. Cached keys from previous exchanges.
  2. Identity document fetched from the sender’s well-known URL.
  3. DID resolution if the agent_id is a DID.
  4. Out-of-band exchange (e.g., the humans shared the key directly).

If the key cannot be found, the agent SHOULD respond with an error explaining the situation rather than silently dropping the message.

5. Key Management

5.1 Key Rotation

Agents SHOULD support key rotation. When rotating keys:

  1. Add the new key to the identity document with status active.
  2. Change the old key’s status to retired (with a retired_date field).
  3. Continue to accept signatures made with the old key for a transition period.
  4. After the transition period, change the old key’s status to revoked.

5.2 Key Revocation

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.

6. Optional Encryption

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:

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.

Threat Model

Threats addressed

Threats partially addressed

Threats not addressed

Security Considerations

Interoperability Considerations

References

Acknowledgments

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.