Security questionnaire

For security reviewers.

In short

This page answers the questions most vendor security assessments ask, so your reviewer can fill in their questionnaire from evidence rather than from a sales call. Each answer is short and names where to check it: a claim on this site, a section of another deep dive, or a document we can send.

Some answers are “no” or “not yet”, and they are written as such. No external security audit or penetration test has been carried out, and CryptoRail holds no certification such as SOC 2 or ISO 27001. Self-hosted deployments and pilots are offered today; running CryptoRail for you in production waits for the external audit.

Most questions assume a vendor that runs a service for you. When CryptoRail is self-hosted, it runs in your infrastructure, over your database, with your keys and your monitoring, and we have no access to it. The picture below is the split of responsibilities that the answers follow.

flowchart LR
    subgraph US[CryptoRail, the vendor]
        P[The product: code, tests, journeys]
        D[Dependency audit, pinned contracts]
        S[The sandbox, never for value]
    end
    subgraph YOU[You, when self-hosted]
        I[Infrastructure, network, TLS]
        DB[(PostgreSQL: encryption at rest, backups, retention)]
        K[Keys: HSM, cloud KMS or your signer]
        M[Monitoring, alerting, incident response]
    end
    P -->|container image, configuration| I
    I --> DB
    I <-->|bytes to sign, signature| K
    I -->|traces, metrics, logs| M

Governance and audits

QuestionAnswerEvidence
Has an independent security audit or penetration test been carried out?No. One is required before CryptoRail is run for customers in production; its scope is written down.Security model: what an external audit must cover
Do you hold SOC 2, ISO 27001 or another certification?No, and none is on the roadmap today.This page
Do you run a formal information security management system?No. Security requirements are numbered, approved and tested (below); there is no certified management system around them.The evidence page
Who is accountable for security?The product owner. CryptoRail is built by a small team with no dedicated security function; security decisions are recorded with their date and their reason.Architecture decision records
Are security requirements documented?Yes: ten numbered security requirements among the product’s approved requirements, each covered by tests, plus decision records for custody and the deployment profiles.ADR-0002, ADR-0004, ADR-0005, ADR-0006
Is there a signed contract, licence or data processing agreement?Not yet. The commercial licence is being written by a lawyer.This page

Every Must requirement has at least one automated test that names it, and a change is merged only with its tests, every check green and no loss of requirement coverage.

Access control and authentication

QuestionAnswerEvidence
How do clients authenticate?API keys over HTTPS. A key has a 256-bit random secret; the database stores only a keyed hash under a pepper from your secret manager.Security model: API keys under a pepper
Is single sign-on, OIDC or mutual TLS supported?Not today. Both are built on request, beside API keys.Below
Is access role-based?Yes: read-only, submitter, signer, sponsor, operator and admin, checked on every call.Below
How are credentials rotated and revoked?Rotation with an overlap window, immediate revocation on every API process, and no way to lock a tenant out of its own administration.Below
Are tenants isolated from each other?Yes. Tenants share one database; every resource belongs to a tenant and a caller sees only its own, which a test over every route of the API proves on every change.J44
Do processes and database users follow least privilege?Yes: each process has its own database role, and only the signing gate holds signer credentials.Security model: database least privilege
Who at CryptoRail can access a self-hosted deployment?Nobody. We have no account, no key and no network path into it.Architecture
Is abuse of the API limited?Rate limits per API key and quotas per tenant.Below

API keys are stored only as a keyed hash under a pepper kept in your secret manager, so whoever reads the database cannot call the API with what they find.

Authentication with mutual TLS or OIDC tokens, beside API keys. On request

Who may do what is checked per call: read-only, submitter, signer, sponsor, operator and admin roles.

An API key's secret is shown once when it is created; a rotation keeps the old key working through a configurable overlap, a revocation ends it at once on every API process, and a tenant's last admin key cannot be revoked.

A tenant sees only its own resources, proven on every route of the API on every change.

Each process has its own database role: the API cannot allocate a nonce, the worker cannot read API keys, the indexer cannot touch transactions, identities or signing requests, and no process can change the schema.

Rate limiting per API key, configurable, reported with standard rate-limit headers and a refusal that says when to come back.

Per-tenant limits set by the operator, with refusals that name the limit reached.

Cryptography and key management

QuestionAnswerEvidence
Where are signing keys generated and stored?In your HSM, your cloud KMS or your own signer. CryptoRail sends the bytes to sign and receives a signature; it holds no key outside a sandbox.Signing, custody and approvals
Which key stores are supported?Your own signer through an inbox is available; HSMs over PKCS#11 and AWS KMS are built and tested, and are declared after a manual test on the real device or account.Below
Is every signature checked?Yes, against the expected address before anything is sent.Below
Which algorithms are used?ECDSA on secp256k1 for chain signatures and EIP-712 approvals; HMAC-SHA256 for API keys and webhook signatures; AES-256-GCM for the secrets CryptoRail seals.Security model
How are application secrets stored?By reference into your secret manager (environment, files or HashiCorp Vault); a literal secret in the configuration is refused at startup.Security model: secrets by reference
Does the service terminate TLS?No. The service speaks HTTP and binds to the local interface by default; TLS is terminated by your ingress or reverse proxy. Webhooks it sends must go to HTTPS addresses.Configuration reference
Can a development key reach production?The development signer warns at every start and refuses to load in production without an explicit override; a dependency check keeps key material in its package alone.Below
When CryptoRail is run for you, can it hold a key?No: that profile refuses at startup any key of its own. It is available for pilots, not yet for production.Security model: three deployment profiles

Keys never enter CryptoRail: signing happens in your HSM, your cloud KMS or your own signer, and only the development signer ever touches a key.

Your own signer keeps the key: CryptoRail prepares the exact bytes, your system signs them, CryptoRail verifies and broadcasts.

Keys in a hardware security module over PKCS#11 (Thales, Utimaco, Entrust, AWS CloudHSM): tested on every change against SoftHSM2, each vendor declared after a manual test on its device. Built, certification pending

Signing keys in AWS KMS, with the curve checked at startup. Built, certification pending

Every signature is checked against the expected address before anything is sent.

Secrets passed by reference and never written to logs, traces, metrics or responses.

A secret written into the configuration instead of a reference to your secret manager is refused at startup.

Each webhook endpoint gets a secret shown once, sealed at rest under a key from your secret manager, and rotated without a gap; endpoints must be HTTPS unless the deployment explicitly allows otherwise.

The development signer warns on every start and refuses to load in production unless an explicit override is set.

Only the development signer's package may touch key material, enforced by a dependency check on every change.

The hosted profile refuses to start if it is given a key of its own, listing every reason.

Data protection and retention

QuestionAnswerEvidence
What data does CryptoRail store?Operations and their call data, addresses, the payloads it asks to have signed, signatures, events, deliveries, approvals and the audit log; API keys only as keyed hashes; webhook secrets sealed. No private key outside a sandbox.Security model
Where is it stored?In your PostgreSQL, when self-hosted.Below
Is data encrypted at rest?Not by CryptoRail, except webhook secrets and sandbox keys, which it seals. Encryption at rest is your database platform’s.Security model: what it does not do
Does it process personal data?It asks for none. Addresses and any metadata your systems attach are stored as sent; whether they are personal data in your jurisdiction is yours to assess.This page
How long is data kept, and can it be deleted?There is no built-in retention period or purge. History is kept, because it is the audit trail; offboarding a tenant stops new work and exports its history. Retention is set by whoever runs the database.Offboarding runbook
Can data be exported for audit?Yes, the complete history of any operation in a machine-readable file.Below
Can secrets leak through logs or responses?A redaction test over every log sink checks they do not.Below

Runs in your infrastructure, as a container image over your PostgreSQL, with schema migrations applied by an explicit command.

The complete history of any operation, exported in a machine-readable file for audit.

Logging and monitoring

QuestionAnswerEvidence
Are security-relevant actions logged?Every mutating API call, including refused ones, lands in an audit log with who, when, what and the result; every approval and signature is recorded.Below
Is the audit log tamper-evident?No. It is stored in your database like the rest of the data, without cryptographic chaining; protecting it is your database’s access control.This page
What telemetry is emitted, and where does it go?Traces, metrics and structured JSON logs with trace ids, through OpenTelemetry, to the collector you configure. Nothing is sent to us.Below
Is the full history of an operation available?Yes: every transition and attempt, with its time and cause.Below
Are anomalies alerted?Yes, for example a signature by the wrong key, a nonce gap, a payer running low, a lagging indexer or a deep reorganisation; the alerts reach your monitoring.The life of a transaction
Do health checks tell the truth?Readiness reports storage, networks and the signing gate, and the configuration is checked at startup with every problem listed.Below

Every approval, signature and decision is recorded with who, when and what, and every change made through the API lands in an audit log.

Traces, metrics and structured logs through OpenTelemetry, into the monitoring tools you already run.

The full history of every operation, every transition and every attempt with its time and cause, can be queried.

The actual cost of every operation is recorded, and a payer running low on funds raises an alert before operations fail.

Health and readiness that tell the truth, and a configuration checked at startup with every problem listed at once.

Vulnerability and dependency management

QuestionAnswerEvidence
Are dependencies scanned for known vulnerabilities?Yes, on every change; a high or critical finding blocks the release.Below
Are dependency versions pinned?Yes, by a committed lockfile installed exactly.Below
Is a software bill of materials provided?No, not today.This page
Are container images scanned and signed?Not yet. The per-customer release pipeline, with signed images in a scanning registry, is on the roadmap.Below
Are the smart contracts it relies on pinned?Yes: the account, paymaster and EntryPoint contracts are audited public code, pinned per network and checked against their code hash at every start. The validator used for on-chain approvals has an audit of an earlier version, not of the one deployed; a report or review of the exact version is required before production use.Below, ADR-0003
Is there a vulnerability disclosure policy?Not a published one. Report a suspected vulnerability to the contact address on the pilot page.This page
Is there a committed patch timeline?No contractual timeline today.This page

Dependencies scanned on every change; a high or critical vulnerability blocks the release.

Every dependency version is fixed in a committed lockfile, and every build installs exactly that set.

Releases per customer: the service image signed with cosign and pushed to that customer's project of a private registry that scans it, and the npm packages and an image archive published with their checksums. On the roadmap

Only the canonical EntryPoint and public account and paymaster contracts from audited lineages, pinned per network; no custom contract.

Secure development and testing

QuestionAnswerEvidence
Is there a documented development process?Yes: every change starts from an approved, numbered requirement and is merged through a pull request only when every automated check passes.Above
Are changes reviewed?Every change to the code runs the full check suite before merge. There is no mandatory second human reviewer of every change, as the team is small.This page
Is security tested?Yes, as requirements: key separation, signature verification, redaction, database roles, tenant isolation, webhook signatures and the deployment profiles each have tests and journeys.Security model: evidence
Is static analysis used?Strict TypeScript and type-aware linting on every change. No dedicated static security analysis or secret-scanning tool runs today.This page
Are failure scenarios tested?Yes: processes killed at each step, node outages, reorganisations, stuck and dropped transactions, against real local chains.Incident response
Are tests run on real networks?On local Anvil and Hyperledger Besu on every change, and on a public test network; never with real funds.Below
Can behaviour be reviewed without reading code?Yes: the journeys report shows each scenario step by step, failures included.Pilot playbook

Tested on every change to the code against Anvil and a Hyperledger Besu QBFT network, and run on public test networks by recorded manual procedures.

Every behaviour a consumer sees has a journey: a scenario run on every change whose HTML report shows, step by step, the request, the response, the resulting state, the events and, for a negative case, the failure report.

Deployment and network

QuestionAnswerEvidence
How is it deployed?As a container image on your infrastructure over your PostgreSQL, or embedded as a library in your Node.js application. Schema changes are applied by an explicit command.Below
Which ports are open?Only the API process listens. The worker, the signing gate and the indexer open no port.Security model: what each process can and cannot reach
Does the container run as root?No: the image runs as an unprivileged user.The Dockerfile
What does it connect to?Your nodes or node provider over JSON-RPC, bundlers if you sponsor gas, your webhook receivers, your signer and your secret manager.Architecture: what talks to what
Can the signing path be isolated?Yes: in a split deployment the signing gate is its own process, the only one with signer credentials, and the API process builds no signer.Below
Does a misconfiguration fail safe?Yes: a production deployment refuses to start with authentication but no pepper, or without a webhook encryption key, and a deployment profile refuses what it does not admit.Below
How are policy changes controlled?A policy change is a new version that can wait for a quorum of approvers.Below

Embedded as a library in your Node.js application, or run as a service with an HTTP API described in OpenAPI and generated SDKs.

One process, or separate API, worker, signing gate and indexer processes sharing only the database, each with a database role limited to what it needs.

In a split deployment the signing gate is a process of its own, the only one with signer credentials: it reaches the database and your signer and nothing else, and re-checks every request before it signs.

The API process builds no signer, and a split deployment that configures one for it is refused at startup.

A production deployment refuses to start with authentication on but no pepper, or without a webhook encryption key, rather than pretend to a protection it lacks.

A change to a tenant's policy is a new version that can be made to wait for a quorum of named approvers, required by default when CryptoRail is run for you; every proposal, approval and activation is recorded.

A sandbox says it is one: in its logs, on its health endpoint and on every screen built over it. It is never supported for value.

Incident response and business continuity

QuestionAnswerEvidence
Do you provide incident response for self-hosted deployments?No. You operate it; runbooks for the common situations (a stuck transaction, a lagging indexer, a dead-lettered delivery, the signing gate down, key rotation) ship with the documentation.Runbooks
Is there a support SLA or 24/7 on-call?No.This page
Will you notify us of a security incident?No contractual commitment exists yet; it belongs in the licence being written.This page
What happens if a process crashes?An acknowledged operation is never lost; a stopping process finishes what it can in a grace period and the rest resumes on restart.Below
What if a node or provider fails?Several endpoints per network, with failover.Below
Can it run highly available?Several workers and several API processes on one database, without sending anything twice.Below
Can activity be stopped quickly?Yes: an operator can pause an identity; new operations wait without being sent.Below
Who backs up the data?You, through your PostgreSQL. Recovery point and recovery time are your platform’s.The deployment plan’s checklist, in the customer portal
How available is the sandbox?It runs on a single server of ours, with no availability commitment. It is a sandbox, never for value.Pilot playbook

An operation CryptoRail has acknowledged is never lost: not across crashes and restarts, not through a node outage of up to ten minutes.

A stopping process finishes its broadcasts and deliveries in flight within a grace period, and whatever it could not finish is picked up again on restart.

Several node endpoints per network: calls go to the first healthy one, an operation stays on the endpoint it started on, and a dead or lagging node is left aside without losing anything.

Several workers on the same database without sending anything twice.

An identity can be paused: new operations are accepted and wait without taking a nonce until it is resumed.

An operator command line for the daily work: pause an identity, redeliver a webhook, reconcile nonces, export a history, onboard a tenant.

Third parties

QuestionAnswerEvidence
Which third parties process our data when self-hosted?None on our side. The service sends nothing to us. It talks to the node providers and bundlers you choose.Architecture
Which open-source components does it rely on?npm dependencies under the dependency audit, and the audited, pinned on-chain contracts above.Above
Who hosts the sandbox?We do, on our own server, over public test networks and public test-network RPC providers. It is a sandbox, never for value.Pilot playbook
Are other custody providers supported?Azure Key Vault, Google Cloud KMS and Fireblocks are built on request.Below
Can a licence problem stop our system?No licence check exists today. The planned one warns and never stops a running system.Below

Works with your own nodes or a provider's, through standard Ethereum JSON-RPC over plain HTTP.

Signing with Azure Key Vault or GCP Cloud KMS, or through Fireblocks. On request

A licence file signed per customer and verified locally at startup, which warns with a grace period and never stops a running system. On the roadmap

What it does not do

  • It has not been audited externally or certified. The tests, the journeys and the requirements are the evidence today.
  • It does not encrypt your operational data at rest, keep a tamper-evident audit log, or purge data on a schedule; those are your database platform’s.
  • It does not terminate TLS or authenticate with SSO, OIDC or mutual TLS today.
  • It comes with no incident response service, support SLA or breach notification commitment for self-hosted deployments yet.
  • It does not publish a software bill of materials or a vulnerability disclosure policy yet.
  • Custody of your end customers' keys. Not supported

Evidence

Every claim above links to its evidence on the evidence page. The main ones:

SubjectRequirements and decisionsJourneys
Keys out of CryptoRail, verification, development signerNFR-SEC-01, NFR-SEC-02, FR-SIG-09, FR-SIG-14J12
Authentication, roles, rotation, rate limits, tenancyFR-API-04, FR-API-05, FR-API-06, FR-API-13, FR-API-16, ADR-0002J26, J27, J44
Secrets, redaction, webhooksFR-OPS-03, NFR-SEC-03, NFR-SEC-04, FR-EVT-09, ADR-0004J18, J34
Process roles, signing gate, database least privilegeFR-OPS-04, NFR-SEC-06, FR-APR-07, ADR-0006J27, J38, J49
Deployment profilesNFR-SEC-07, NFR-SEC-10, ADR-0005J42, J43
Audit log, history, export, observabilityFR-API-14, FR-TX-18, FR-OPS-07, NFR-OBS-01, NFR-OBS-04J19, J45
Dependencies, pinned contractsNFR-SEC-05, NFR-SEC-09, ADR-0003
Testing disciplineNFR-QA-01, NFR-QA-06, NFR-QA-07, NFR-REL-01J15
Policy changesFR-POL-09J65
Releases and licence (planned)FR-OPS-09, FR-OPS-10