Interoperability requirements, test expectations, and security considerations for OWS implementations.
An implementation claiming OWS conformance MUST declare the profiles it supports.
Minimum claim format:
OWS <supported profiles>
Examples:
OWS Storage + Signing + Policy + EVM Chain ProfileOWS Storage + Signing + Lifecycle + Solana Chain Profile
An implementation MUST NOT claim complete OWS conformance if it omits any required behavior from a profile it advertises.
Conforming implementations SHOULD ship or consume machine-readable test vectors for:
- wallet file decryption and encryption
- API key file resolution and token verification
- policy rule evaluation
- chain-specific address derivation
- transaction and message signing
When two conforming implementations exchange OWS artifacts, the following behaviors MUST remain interoperable:
- wallet files can be parsed and validated consistently
- API key files can be resolved consistently by token hash
- policy files produce the same allow or deny result for the same
PolicyContext - canonical chain and account identifiers are preserved without lossy conversion
Every implementation SHOULD include at least:
- One wallet file encrypted with scrypt + AES-256-GCM.
- One API key file encrypted with HKDF-SHA256 + AES-256-GCM.
- One declarative policy that allows a supported chain.
- One declarative policy that denies by expiration.
- One signing vector per supported chain family.
- One negative vector for each documented error code.
If an implementation supports executable policies, it SHOULD also include fixtures showing:
- successful executable evaluation
- denial on executable failure
- denial on malformed policy result payloads
Implementations MUST preserve the error meanings defined by 02-signing-interface.md.
They MAY add implementation-specific error metadata, but they MUST NOT:
- turn a policy denial into a generic authentication failure
- collapse unsupported-chain errors into malformed-input errors
- treat expired API keys as missing keys
Implementations MUST:
- decrypt wallet or API-key-backed secret material only for the duration of the operation
- zeroize decrypted mnemonic, private key, derived key, and KDF output buffers after use
- avoid writing decrypted secret material to logs, telemetry, or audit records
Implementations SHOULD use hardened memory and process protections where the host platform allows them.
Implementations MUST:
- treat owner credentials and API tokens as secrets
- avoid echoing credentials in logs or human-readable errors
- verify API token scope and policy attachments before any token-backed secret is decrypted
Implementations SHOULD avoid environment variables for long-lived secrets unless the surrounding environment is trusted and documented.
Implementations MUST:
- evaluate built-in policy rules deterministically
- short-circuit on denial when the policy model requires it
- deny the request if an executable policy exits unsuccessfully or returns malformed output
Implementations MUST NOT provide a fallback path that bypasses token-attached policy evaluation.
Audit logs MUST be append-only from the point of view of the OWS implementation.
Audit records SHOULD include:
- operation type
- wallet identifier
- chain identifier
- API key identifier when applicable
- allow or deny outcome
- timestamp
Audit records MUST NOT contain raw passphrases, API tokens, mnemonics, or private keys.
05-key-isolation.md provides optional implementation guidance for:
- in-process hardening
- memory locking
- signal-driven cache clearing
- subprocess isolation profiles
Those techniques improve security posture, but interoperability depends on the externally visible behavior defined by the core spec.