Signer Layer
The Signer Layer provides the interfaces and runtime components responsible for key management and digital signatures across supported blockchains.
In M2, it delivers a basic KMS inside Integritee workers. In M3 KMS security will be enhanced to manage SGX sealing of keys.
Post-testnet, it adds a Signer Orchestrator capable of routing signing requests according to policies (SignRoutes)
to manage potentially multi-TEE (TDX/SEV/Arm CCA) and distributed backends (TSS/MPC/NMC).
Context and Scope Change
To simplify the testnet and focus resources:
- The planned Transaction Request pallet and Sidechains Registry pallet are not delivered.
- We limit the network to L1 Integritee node + L2 Integritee workers for testnet.
- The previous role of a “sidechains registry” is replaced by a future Signer Orchestrator (inside workers) that will evolve to route across backends and, post-mainnet, across TEE families and/or MPC backends.
This positions the Signer Layer as the single point where policy and signing backend selection converge.
Goals
- Provide a consistent, stable signing API for BTC/ETH/DOT/SOL.
- Confine private key material to trusted runtime (Integritee worker); no host exposure.
- M2: functional testnet with KMS only (no sealing).
- M3: SGX sealing, basic orchestration, attestation-gated policies.
- Post-testnet: optional multi-TEE routing and distributed signing (TSS/MPC/NMC).
Architecture (M2 → M3 → Post-Testnet)
Phase | Backends | Persistence | Routing | TAVP |
M2 (Testnet) | Local KMS (Integritee) | No SGX sealing (ephemeral) | Static (single backend) | Triggered by Transaction flow; threshold-like checks can be enforced upstream |
M3 | Local KMS (Integritee) | SGX sealing & recovery | Conditional via Transaction Management Layer policies (e.g., amount thresholds) | |
Post-Mainnet | + optional TDX/SEV/Arm CCA; +optional TSS/MPC/NMC | Vendor-neutral, audited | Multi-TEE/MPC routing Signer Orchestrator + SignRoutes routing, heterogeneous quorum (optional) | Policy-driven, auditable |
Components
1) Basic KMS (M2)
- Generates keypairs (
secp256k1
,ed25519
,sr25519
) inside Integritee workers. - Signs canonical digests; private keys never leave enclave runtime.
- Ephemeral keys (no sealing/persistence in M2).
2) Signer Orchestrator (Post Testnet)
- Purpose: select a signing backend based on declarative SignRoutes.
- Backends in M3: Local KMS (Integritee) only.
- Future backends (post-mainnet): KMS over TDX/SEV/Arm CCA; optional TSS/MPC/NMC.
SignRoutes (policy model)
A SignRoute is a minimal policy that determines if, when, and how a signing request may proceed, and which backend should serve it. In M2, this is effectively a single default route to the KMS. In M3, routes are evaluated by Transaction Management Layer supplies the contextual inputs (amount, asset, destination, tags).
Matching fields (examples)
chain
: eth/polkadot/solana/bitcoinasset
: e.g., USDC, DOT, ETH, BTCamount_gte
: numeric threshold (chain units)to_allowlist
: array of beneficiary addresses or labelsrisk_score_lte
: optional, if available from upstream classifiersrequire_tavp
: boolean (pre-sign validation gate)
Action fields
backend
: logical backend id (e.g.,kms-integritee
)attestation_min_freshness_sec
: if applicable (M3)fail_mode
:fail_closed
ordefer
Example (illustrative; M2 resolves to KMS only)
{
"routes": [
{
"id": "low-value-default",
"match": { "chain": "eth", "amount_gte": 0, "amount_lt": 100 },
"action": { "backend": "kms-integritee", "require_tavp": false, "fail_mode": "fail_closed" }
},
{
"id": "high-value-with-tavp",
"match": { "chain": "eth", "amount_gte": 100 },
"action": { "backend": "kms-integritee", "require_tavp": true, "fail_mode": "fail_closed" }
}
]
}
In M2, both routes still resolve to the same KMS backend; the difference is the TAVP requirement.
In Post Testnet, the same policy structure allows swapping or augmenting the backend (still KMS pre-mainnet), while adding attestation constraints.
Interfaces
High-level Sign API (stable)
sign(chain_id, key_id, payload, opts) -> signature
opts
may include:policy_id
,require_tavp
,min_attestation_freshness_sec
.
KMS API (internal)
generate_key(key_type) -> key_id
public_key(key_id) -> bytes
sign(key_id, digest) -> signature
delete_key(key_id)
Security Model
- M2: Runtime isolation only (Integritee workers); no SGX sealing; not production-grade custody.
- M3: SGX sealing & recovery; attestation-gated access paths; auditable, non-sensitive event trails.
- Post-Testnet Multi-TEE, optional heterogeneous quorum, optional TSS/MPC/NMC.
Integration with Transaction Management Layer (M3)
- Policy authoring lives in the Transaction Management Layer (thresholds, allowlists, tags).
- The layer evaluates contextual rules and attaches a
policy_id
or inline policy to the signing request.
Example flow (M3):
- Transaction constructed and normalized (Account Abstraction).
- Transaction Management applies policies (e.g.,
amount_gte: 100
→require_tavp: true
). - Enforces TAVP (if required) and routes to
kms-integritee
- Request is sent to Signer Layer.
- Signature is returned; broadcasting proceeds in Client Layer.
Chain Support & Primitives
Chain | Primitive | M2 Backend | M3 | Post-Testnet |
Ethereum / EVM | ECDSA (secp256k1) | Local KMS (Integritee) | Sealing | optional Multi-TEE routing; optional TSS (GG18/GG20) |
Polkadot/Substrate | sr25519 / ed25519 | Local KMS (Integritee) | Sealing | optional Multi-TEE routing; optional FROST (EdDSA) |
Solana | Ed25519 | Local KMS (Integritee) | Sealing | optional Multi-TEE routing; optional FROST |
Bitcoin | ECDSA (secp256k1) | Local KMS (Integritee) | Sealing | optional Multi-TEE routing; optional MuSig2/TSS |
Roadmap
- M2: Basic KMS in Integritee workers; no sealing; static route.
- M3: SGX sealing & recovery; conditional TAVP (Transaction Management Layer).
- Post-Testnet: Signer Orchestrator with SignRoutes; attestation-gated policies** Multi-TEE diversity (TDX/SEV/Arm CCA); optional TSS/MPC/NMC; heterogeneous quorum.