Audience: IAM architects, platform security engineers, compliance leads, AI governance teams managing service accounts and machine credentials at scale.
CRITICAL ASSESSOR NOTICE: SWT3 witness anchors are evidence artifacts, not compliance determinations. Each anchor records that a governance-relevant event occurred and preserves its cryptographic fingerprint. The assessor determines whether the evidence satisfies a given control requirement. The protocol does not make pass/fail compliance decisions on behalf of any regulatory body. Substance verification remains the assessor's responsibility.

1. The Problem

For every person in your organization, there are 45 non-human identities: service accounts, API keys, OAuth clients, CI/CD tokens, and machine-to-machine certificates (Astrix Security, 2024). Every one of them can access data, invoke services, and take actions. Unlike human users, they don't have managers who notice when something changes. They don't take vacations. They never stop running.

When a breach investigation asks "which service accounts had admin access to the production database on March 15th?", most organizations cannot answer with certainty. The identity provider's logs may show the answer -- or they may have been rotated, modified, or deleted. There is no independent record.

This is the core problem: the identity provider is both the actor and the record-keeper. It issues credentials, manages their lifecycle, and produces the only evidence that any of this happened correctly. If the IdP is compromised, both the credentials and the audit trail are compromised together.

The consequences are showing up in audits and incidents:

Organizations do not lack identity providers. They lack an independent witness -- someone outside the system who can confirm what happened, when, and whether it matches what was supposed to happen.

2. What SWT3 NHI Witnessing Is

SWT3 is a passive witness, not an identity provider. It does not issue credentials, validate tokens, enforce access policies, or manage identity lifecycles. It creates an independent, cryptographically anchored audit trail of credential governance events that exists outside the identity provider's own logging infrastructure.

Think of it as a notary for credential governance. Your identity provider (Entra ID, Okta, CyberArk, HashiCorp Vault, AWS IAM) continues to do its job. SWT3 independently records that specific governance events occurred, when they occurred, and what the state of the credential was at that moment.

This creates value in three scenarios:

  1. Audit independence. When an assessor asks "prove that service account X was rotated on schedule," you produce both the IdP log and the SWT3 witness anchor. Two independent sources. If either is compromised, the other still stands.
  2. Cross-platform correlation. A credential may traverse Entra ID, Vault, and a custom secrets manager. Each system logs in its own format. SWT3 provides a unified, cryptographically consistent record across all of them.
  3. Tamper evidence. SWT3 anchors are SHA-256 fingerprinted. If anyone modifies the record after the fact, the fingerprint breaks. This is not possible with application logs.

SWT3 NHI witnessing complements your existing identity stack. It adds an evidence layer. It does not add an identity layer.

3. Six NHI Procedures

The SWT3 Universal Control Taxonomy defines six procedures in the NHI namespace. Each procedure corresponds to a specific governance event in the credential lifecycle.

ProcedureTitleWhat It WitnessesWhen to Call
NHI-SCOPE.1 Scope Attestation The permissions (scope) granted to a credential and its time-to-live (TTL) At credential issuance, after any scope change, on periodic re-attestation
NHI-CYCLE.1 Lifecycle Event State transitions: issued, activated, suspended, expired, revoked At each lifecycle state change in the identity provider
NHI-PRIV.1 Privilege Change Before-and-after scope when permissions are modified When a credential's access rights are widened, narrowed, or restructured
NHI-ROTATE.1 Rotation The link between old and new credential identifiers and the reason for rotation On scheduled rotation, compromise-driven rotation, or policy-triggered rotation
NHI-AGENT.1 Delegation Parent-child relationship between credentials and the depth of the delegation chain When one credential delegates authority to another (service-to-service, agent-to-agent)
NHI-REVOKE.1 Revocation Credential revocation with reason code and optional cascade flag On credential revocation, emergency suspension, or policy-driven deactivation
Regulatory alignment: These six procedures map to NIST 800-53 IA-4 (Identifier Management), IA-5 (Authenticator Management), AC-6 (Least Privilege), EU AI Act Art. 9 (Risk Management) and Art. 12 (Record-Keeping), NIS-2 Art. 21 (Cybersecurity Risk Management), OWASP Agentic Top 10 (Excessive Agency), and Five-Eyes Machine Identity guidance. The full crosswalk is in Section 11.

4. Quick Start (Python)

Five lines to create your first NHI witness anchor.

from swt3_ai import Witness

witness = Witness(
    tenant_id="acme-corp",
    api_key="axm_...",
    endpoint="https://sovereign.tenova.io/api/v1/witness"
)

# Witness the scope granted to a service account
witness.witness_nhi_scope(
    credential_id="svc-account-xyz",
    scope="read:users write:logs",
    ttl_seconds=3600
)

# Witness a lifecycle event (credential issued)
witness.witness_nhi_lifecycle(
    event_type="issued",
    credential_id="svc-account-xyz",
    issuer="Entra ID"
)
What the assessor gets: Two witness anchors. The first records the credential's scope and TTL at issuance time. The second records the lifecycle state transition. Both carry SHA-256 fingerprints that anyone can independently recompute. The assessor does not need access to your Entra ID tenant to verify the evidence.

5. Quick Start (TypeScript)

import { Witness } from "@tenova/swt3-ai";

const witness = new Witness({
  tenantId: "acme-corp",
  apiKey: "axm_...",
  endpoint: "https://sovereign.tenova.io/api/v1/witness"
});

// Witness the scope granted to a service account
witness.witnessNhiScope({
  credentialId: "svc-account-xyz",
  scope: "read:users write:logs",
  ttlSeconds: 3600
});

// Witness a lifecycle event (credential issued)
witness.witnessNhiLifecycle({
  eventType: "issued",
  credentialId: "svc-account-xyz",
  issuer: "Entra ID"
});
Same evidence, same anchors. The Python and TypeScript SDKs produce identical fingerprints for the same inputs. Cross-language parity is verified by shared test vectors across all SWT3 SDK implementations.

6. Credential Lifecycle Chain

A credential moves through a series of states over its lifetime. Each state transition is a governance-relevant event that should be witnessed independently.

Credential Lifecycle with SWT3 Witness Anchors ISSUED ──────> ACTIVATED ──────> SUSPENDED ──────> REVOKED │ │ │ │ ▼ ▼ ▼ ▼ NHI-CYCLE.1 NHI-CYCLE.1 NHI-CYCLE.1 NHI-CYCLE.1 anchor anchor anchor anchor (issued) (activated) (suspended) (revoked) │ │ │ │ └────────────────┴──────────────────┴────────────────┘ │ Linked by credential_id Each anchor carries SHA-256 fingerprint of the event

Each witness_nhi_lifecycle call records the event type (issued, activated, suspended, expired, or revoked), the credential identifier, and the issuing system. Because every anchor includes the credential identifier in its fingerprint, the full chain of state transitions for any credential can be reconstructed from the ledger.

# Python: witness the full lifecycle of a credential
witness.witness_nhi_lifecycle(event_type="issued", credential_id="svc-account-xyz", issuer="Entra ID")

# ... credential is activated ...
witness.witness_nhi_lifecycle(event_type="activated", credential_id="svc-account-xyz", issuer="Entra ID")

# ... credential is suspended for investigation ...
witness.witness_nhi_lifecycle(event_type="suspended", credential_id="svc-account-xyz", issuer="Entra ID")

# ... credential is permanently revoked ...
witness.witness_nhi_lifecycle(event_type="revoked", credential_id="svc-account-xyz", issuer="Entra ID")
Chain integrity: The sequence of lifecycle anchors forms a tamper-evident chain. If an adversary attempts to delete a "suspended" event from the record, the gap in the chain is visible to any assessor who queries the credential's history. The protocol does not prevent deletion from your own systems, but it makes deletion detectable.

7. Rotation Tracking

Credential rotation is a core compliance requirement (NIST IA-5, every major framework). The challenge is proving that rotation actually happened and that the old credential was properly decommissioned.

The witness_nhi_rotation method creates a cryptographic link between the old and new credential identifiers. Both identifiers are included in the anchor's fingerprint, so the rotation event is bound to both credentials.

# Python: witness a scheduled key rotation
witness.witness_nhi_rotation(
    old_credential_id="svc-key-v1",
    new_credential_id="svc-key-v2",
    reason="scheduled"
)

# Rotation after a compromise
witness.witness_nhi_rotation(
    old_credential_id="svc-key-v2",
    new_credential_id="svc-key-v3",
    reason="compromise"
)
// TypeScript: same rotation events
witness.witnessNhiRotation({
  oldCredentialId: "svc-key-v1",
  newCredentialId: "svc-key-v2",
  reason: "scheduled"
});

witness.witnessNhiRotation({
  oldCredentialId: "svc-key-v2",
  newCredentialId: "svc-key-v3",
  reason: "compromise"
});

Four rotation reasons are supported:

ReasonWhen to Use
scheduledRoutine rotation per policy (e.g., every 90 days)
compromiseKey material may have been exposed
policyPolicy change requires new key characteristics (algorithm, length)
manualOperator-initiated rotation outside normal schedule
Assessor value: The rotation anchor proves that a specific old key was replaced by a specific new key, on a specific date, for a documented reason. The assessor can verify the rotation cadence by querying all NHI-ROTATE.1 anchors for a given credential lineage and comparing timestamps against the organization's rotation policy.

8. Delegation and Cascade Revocation

Delegation Trees

In agentic AI systems and microservice architectures, one credential often delegates authority to another. A parent service account creates a child token, which may create a grandchild token. The delegation tree can grow deep, and each level introduces risk.

# Python: witness a delegation chain
witness.witness_nhi_delegation(
    delegator_credential_id="svc-parent",
    delegatee_credential_id="svc-child",
    delegation_depth=1
)

witness.witness_nhi_delegation(
    delegator_credential_id="svc-child",
    delegatee_credential_id="svc-grandchild",
    delegation_depth=2
)
// TypeScript: same delegation chain
witness.witnessNhiDelegation({
  delegatorCredentialId: "svc-parent",
  delegateeCredentialId: "svc-child",
  delegationDepth: 1
});

witness.witnessNhiDelegation({
  delegatorCredentialId: "svc-child",
  delegateeCredentialId: "svc-grandchild",
  delegationDepth: 2
});

The delegation_depth parameter records how many levels deep this delegation sits in the tree. Depth 1 is a direct delegation. Depth 2+ indicates transitive delegation. This gives assessors visibility into how far authority propagates from the original credential holder.

Cascade Revocation

When a parent credential is revoked, all downstream delegations should be revoked as well. The witness_nhi_revocation method records the revocation event and whether cascade was requested.

# Python: revoke with cascade
witness.witness_nhi_revocation(
    credential_id="svc-parent",
    reason="policy_violation",
    cascade=True
)

# The identity provider handles the actual cascade.
# SWT3 witnesses each downstream revocation independently.
witness.witness_nhi_revocation(
    credential_id="svc-child",
    reason="policy_violation",
    cascade=True
)

witness.witness_nhi_revocation(
    credential_id="svc-grandchild",
    reason="policy_violation",
    cascade=False  # leaf node, no further cascade
)

Seven revocation reason codes are supported:

Reason CodeWhen to Use
unspecifiedReason not documented or not applicable
model_recallAssociated AI model recalled from production
policy_violationCredential used outside authorized scope
data_contaminationCredential accessed contaminated data source
consent_withdrawalData subject withdrew consent for processing
regulatory_orderRegulatory authority ordered credential suspension
error_correctionCredential was issued in error
SWT3 does not perform the revocation. Your identity provider revokes the credential. SWT3 witnesses that the revocation occurred, records the reason, and notes whether cascade was requested. The witness anchor is the evidence. The IdP is the actor. These are separate roles by design.

9. Integration Patterns

The most common integration pattern is event-driven: your identity provider fires a webhook or log event, and your integration layer calls the appropriate SWT3 witness method.

Identity Provider Integration Patterns Pattern 1: Okta Event Hook Okta ──webhook──> Your Lambda/Function ──> witness.witness_nhi_lifecycle() ──> witness.witness_nhi_scope() Pattern 2: Entra ID Activity Log Entra ID ──Event Hub──> Stream Processor ──> witness.witness_nhi_privilege_change() ──> witness.witness_nhi_rotation() Pattern 3: HashiCorp Vault Audit Device Vault ──audit log──> Log Shipper ──> witness.witness_nhi_lifecycle() ──> witness.witness_nhi_scope() Pattern 4: AWS IAM + EventBridge IAM ──CloudTrail──> EventBridge Rule ──> Lambda ──> witness.witness_nhi_rotation() Pattern 5: Custom Secrets Manager Your API ──middleware──> witness.witness_nhi_scope() ──> witness.witness_nhi_delegation()

Privilege Change Monitoring

One of the highest-risk NHI governance events is a privilege escalation. The witness_nhi_privilege_change method records the before-and-after scope, creating an independent record of what changed.

# Python: witness a privilege change from an IdP webhook
witness.witness_nhi_privilege_change(
    credential_id="svc-account-xyz",
    previous_scope="read:users",
    new_scope="read:users write:admin"
)
// TypeScript: same privilege change
witness.witnessNhiPrivilegeChange({
  credentialId: "svc-account-xyz",
  previousScope: "read:users",
  newScope: "read:users write:admin"
});
Out-of-band detection: If an attacker modifies a service account's scope inside the IdP and also tampers with the IdP's logs, the SWT3 anchor still records the original scope. The discrepancy between the IdP state and the witness record surfaces the tampering. This is the value of an independent witness.

Batch Processing

For environments with high credential churn (CI/CD pipelines, ephemeral containers, serverless functions), the SDK buffers witness payloads and flushes them in configurable batches. This is handled automatically by the SDK's flush interval. No special batch code is needed.

10. What the Assessor Sees

Each NHI witness event produces a SWT3 Witness Anchor. Here is a representative anchor from a scope attestation:

SWT3-E-CLOUD-NHI-SCOPE1-PASS-1756627200-a3f7c920e4b1

The anchor decomposes as follows:

SegmentValueMeaning
TierEEnclave deployment
ProviderCLOUDCloud-hosted infrastructure
DomainNHINon-Human Identity namespace
ProcedureNHI1NHI-SCOPE.1 (Credential Scope Attestation)
VerdictPASSEvent successfully witnessed
Epoch1756627200Unix timestamp of the event
Fingerprinta3f7c920e4b1First 12 hex chars of SHA-256 hash

Evidence Fields

Beyond the anchor string, each witness record includes structured evidence that the assessor can inspect.

FieldDescriptionExample
Credential identifier hashSHA-256 hash of the credential ID (the raw ID is not transmitted at clearing level 2+)e3b0c44298fc...
Scope hashSHA-256 hash of the permission scope string7f83b1657ff1...
TTLTime-to-live in seconds (scope attestation only)3600
Event typeLifecycle state (lifecycle events only)issued
Rotation reasonWhy rotation occurred (rotation events only)scheduled
Delegation depthLevels deep in the delegation tree (delegation events only)2
Cascade flagWhether downstream revocations were requested (revocation events only)true
Clearing levels control metadata exposure. At clearing level 0 (analytics), all fields are transmitted in plain text. At level 1 (standard), credential IDs are hashed. At level 2 (sensitive), scope strings are also hashed. At level 3 (classified), only numeric values and the cryptographic fingerprint are transmitted. The assessor and the organization agree on the appropriate clearing level based on data sensitivity.

11. Regulatory Mapping

Each NHI procedure maps to specific requirements across multiple regulatory frameworks.

ProcedureNIST 800-53EU AI ActNIS-2OWASP AgenticFive-Eyes
NHI-SCOPE.1
Scope
IA-4, AC-6 Art. 9, Art. 12 Art. 21 Excessive Agency Machine Identity
NHI-CYCLE.1
Lifecycle
IA-4, IA-5 Art. 9, Art. 12 Art. 21 Lifecycle Mgmt Machine Identity
NHI-PRIV.1
Privilege
AC-6, AC-2 Art. 9 Art. 21 Privilege Escalation Lateral Movement
NHI-ROTATE.1
Rotation
IA-5(1) Art. 9 Art. 21 Credential Mgmt Key Rotation
NHI-AGENT.1
Delegation
AC-6(1), AC-6(5) Art. 9, Art. 14 Art. 21 Excessive Agency Trust Delegation
NHI-REVOKE.1
Revocation
IA-5(2), AC-2(3) Art. 9, Art. 12 Art. 21 Credential Mgmt Incident Response
Framework-agnostic evidence. A single NHI witness anchor can satisfy requirements across multiple frameworks simultaneously. The anchor itself is framework-neutral. The crosswalk mapping determines which regulatory requirement the evidence satisfies. This is handled by the UCT Registry, not by the SDK.

12. Getting Started

Install the SDK for your language:

# Python
pip install swt3-ai

# TypeScript / Node.js
npm install @tenova/swt3-ai

Initialize the witness, point it at your credential governance events, and every NHI lifecycle action produces an independent, cryptographically anchored audit record.

Both SDKs support demo mode (omit the API key) for local evaluation. Witness records log to stderr with no network calls. When you are ready for persistent evidence, create a free account and set the API key.

This guide is provided for informational purposes only and does not constitute legal, regulatory, or compliance advice. Regulatory mappings and crosswalk interpretations reflect the publisher's analysis and may not address all obligations applicable to your organization. Consult qualified legal counsel before making compliance decisions based on this content.