Purpose
This methodology defines how Maelstrom AI identifies, assesses, prioritises, and treats information security risks across both of the organisation’s platforms — Provii (zero-knowledge age verification) and downpipes (no-custody backup & disaster recovery for the Cloudflare data layer). It supports consistent risk management across our organisation and alignment with ISO 27001:2022 requirements.
The methodology is organisation-level: it applies identically to both platforms. Organisation-level risks (governance, personnel, supply chain, change management) are assessed once for Maelstrom AI; platform-specific risks layer on top — Provii’s cryptographic and identity-assurance risks, and downpipes’ no-custody, in-tenant operating risks. See the ISMS Scope Statement for the system boundary across both products.
Risk Management Framework
We follow a risk-based approach to security, focusing resources where they provide the most protection for both platforms — sound proofs and minimal PII processing for our zero knowledge age verification service, and verifiable, tamper-evident archives under customer-held keys for our no-custody backup service.
graph TD
A[Identify Assets & Threats] --> B[Assess Risks]
B --> C[Prioritise Risks]
C --> D[Select Treatment]
D --> E[Implement Controls]
E --> F[Monitor & Review]
F --> A
Risk Assessment Frequency
Regular Assessments: Annually (Q1 of each year)
Triggered Assessments when:
- Launching new services or major features
- Significant infrastructure changes (new cloud provider, architecture redesign)
- After security incidents
- Changes to threat surface (new attack vectors, vulnerabilities)
- Changes to legal/regulatory requirements
- Prior to ISO 27001 certification audits
Ongoing Monitoring: Continuous monitoring of key risk indicators
Step 1: Asset Identification
Asset Categories
We classify information assets into categories:
Critical importance - Compromise destroys trust in the entire system
- Signing keys (RedJubjub keys for credential issuance — Provii)
- Verification keys (public keys for proof verification — Provii)
- Proving/verification parameters (Groth16 circuit parameters — Provii)
- HMAC secrets (API authentication)
- API keys and tokens
- downpipes Licence Signer (Cloudflare Secrets Store, vendor control-plane; fail-open)
- downpipes Update Signer (held offline by the operator, never deployed to any Worker)
Note on downpipes customer keys: the break-glass, operational, and archive-signer keys that seal customer archives are customer-generated and customer-held under the no-custody model. They are a customer-operated asset (a complementary user-entity control), not a Maelstrom-held asset.
High importance - Core business value and competitive advantage
- provii-crypto source code (ZKP implementations)
- provii-verifier, provii-issuer code
- SDK code (provii-agegate, provii-mobile-sdk)
- downpipes engine, console and control-plane source (source-available, Elastic License v2)
- downpipes offline reader source (MIT) and the frozen public archive-format specification
- Architectural designs and specifications
- Cryptographic protocol documentation
High importance - Essential for service availability
- Cloudflare Workers and KV namespaces
- Durable Objects for state management
- GitHub repositories and CI/CD pipelines
- Static site infrastructure (Cloudflare Workers Assets)
- downpipes vendor-side control-plane (mints licence tokens; holds no customer keys, data or Cloudflare tokens; fail-open)
- downpipes signature-pinned update channel (static R2 bucket
updates.downpipes.io; pulled, never pushed) - Developer workstations
The downpipes engine and console run in the customer’s own Cloudflare account, under the customer’s keys (customer-operated). Maelstrom keeps no standing inbound path — the product “runs dark”.
Medium importance - Limited sensitivity due to zero knowledge (Provii) and no-custody (downpipes) architectures
- Audit logs (security events, access logs, IP addresses, request patterns)
- Configuration data (KV contents, wrangler.toml settings)
- Analytics data (service metrics, performance data)
- Customer support communications
- downpipes posture scores and canary-flight results; consent diagnostics support bundles (redaction-safe, signed)
downpipes holds no customer backup data or Cloudflare tokens at Maelstrom; customer archives reside in the customer’s own destinations under the customer’s keys.
Asset Register
We maintain an Asset Register documenting:
- Asset identifier and description
- Asset owner (role)
- Classification (critical, high, medium, low)
- Location (Cloudflare KV, GitHub, etc.)
- Dependencies on other assets
Step 2: Threat Identification
We consider threats across multiple categories:
External Threats
Cryptographic Attacks
- Breaking or weakening ZKP proofs
- Compromising signing keys
- Side-channel attacks on cryptographic operations
- Quantum computing threats (future consideration)
- Protocol implementation flaws
Infrastructure Attacks
- DDoS attacks on Cloudflare Workers
- Supply chain compromise (malicious dependencies)
- Compromise of Cloudflare or GitHub accounts
- Injection attacks (API, XSS, etc.)
- Replay attacks on challenges/proofs (Provii)
- Compromise of the downpipes update channel or update-signing key — a supply-chain path that could in principle ship a malicious engine update into customers’ own Cloudflare accounts (mitigated by signature-pinning, pull-only updates and an offline update signer)
- Compromise of the downpipes vendor control-plane (which holds no customer keys, data or Cloudflare tokens, and is fail-open, so it cannot read customer archives or gate backup/restore)
Human-Targeted Attacks
- Phishing targeting team members
- Social engineering for credential theft
- Insider threats (malicious or negligent)
- Account takeover (GitHub, Cloudflare)
Third-Party Risks
- Cloudflare service disruption
- GitHub outage or compromise
- Vulnerabilities in open source dependencies
- npm registry compromise
- Certificate authority compromise
Internal Threats
- Accidental secret exposure in code/logs
- Configuration errors leading to security gaps
- Insufficient access controls
- Lack of security awareness
- Inadequate change management
Environmental Threats
- Developer workstation compromise
- Loss of key personnel (knowledge concentration)
- Natural disasters affecting cloud infrastructure
- Internet infrastructure disruption
Step 3: Vulnerability Assessment
For each asset-threat combination, we identify vulnerabilities:
Technical Vulnerabilities:
- Unpatched dependencies
- Cryptographic implementation bugs
- Weak authentication mechanisms
- Insecure configurations
- Insufficient logging/monitoring
Process Vulnerabilities:
- Lack of code review
- Insufficient testing coverage
- Weak incident response procedures
- Inadequate backup processes
Human Vulnerabilities:
- Insufficient security training
- Credential management weaknesses
- Social engineering susceptibility
Step 4: Risk Analysis
Likelihood Assessment
We assess the likelihood of each risk scenario:
| Level | Description | Examples |
|---|---|---|
| Rare (1) | Unlikely to occur in normal circumstances | Quantum computer breaking BLS12-381 today |
| Unlikely (2) | Could occur but not expected | Major Cloudflare data centre failure |
| Possible (3) | Might occur occasionally | Supply chain vulnerability in dependency |
| Likely (4) | Expected to occur in some circumstances | Phishing attempt targeting team |
| Almost Certain (5) | Expected to occur frequently | Automated attacks on public APIs |
Impact Assessment
We assess business impact if the risk materialises:
| Level | Description | Criteria |
|---|---|---|
| Insignificant (1) | Minimal impact | Brief service degradation, no data compromise |
| Minor (2) | Limited impact | Service disruption <1 hour, minimal customer impact |
| Moderate (3) | Noticeable impact | Service outage 1-4 hours, or minor cryptographic weakness |
| Major (4) | Significant impact | Service outage >4 hours, or significant security vulnerability |
| Severe (5) | Catastrophic impact | Complete service failure, or signing key compromise |
Zero knowledge Impact Considerations (Provii)
Because Provii’s operated services don’t store PII, data breach impacts are fundamentally different:
<Check> What We CAN’T Lose:
- User identity information (during verification, no personal information is collected; during issuance, date of birth is processed ephemerally and immediately discarded)
- Personally identifiable data (zero knowledge architecture)
- Age verification history (proofs are ephemeral) </Check>
This significantly simplifies risk assessment compared to traditional identity systems.
No-Custody Impact Considerations (downpipes)
downpipes shifts the impact profile the same way for a different reason: because backups run in the customer’s own Cloudflare account, under the customer’s keys, and Maelstrom holds no customer keys, data or Cloudflare tokens.
A compromise of the vendor control-plane cannot read customer archives, and the licence is fail-open — it never gates backup or restore. Customer-side key loss is, by design, unrecoverable by Maelstrom; that residual is carried as a complementary user-entity control (see the Risk Register).
Risk Scoring
Risk Score = Likelihood × Impact
| Risk Level | Score Range | Treatment Requirement |
|---|---|---|
| Low | 1-4 | Accept or monitor |
| Medium | 5-9 | Mitigate or accept with compensating controls |
| High | 10-15 | Mitigate with strong controls |
| Critical | 16-25 | Immediate mitigation, cannot accept |
Step 5: Risk Treatment
For each identified risk, we select a treatment option:
Treatment Options
Most common: Implement controls to reduce likelihood or impact
Example (Provii): Implement SLSA Level 3 supply chain security to mitigate dependency tampering risk
Example (downpipes): Signature-pin the update channel and hold the update signer offline so a malicious engine update cannot be shipped into customer accounts; canary-gate self-updates with automatic rollback
Documentation: Control implementation in Statement of Applicability
When: Risk is below acceptance threshold, or cost of mitigation exceeds benefit
Example: Accept risk of Cloudflare global outage (extremely rare, beyond our control)
Requirements: Documented justification, ISMS Owner approval
When: Eliminate the activity creating the risk
Example (Provii): Minimising PII processing through zero knowledge architecture (DOB processed ephemerally during issuance, never persisted)
Example (downpipes): Eliminating custody of customer data and keys through the no-custody architecture (backups run in the customer’s own Cloudflare account, under the customer’s keys; Maelstrom holds no customer keys, data or Cloudflare tokens)
Note: This is our fundamental approach across both platforms - we design systems that avoid risks rather than just mitigate them
When: Share risk with third party (insurance, contracts)
Example: Cloudflare’s enterprise SLA transfers some availability risk
Note: Less common for security risks (can’t transfer reputation impact)
Control Selection
When mitigating risks, we select controls based on:
- Effectiveness: Does it meaningfully reduce risk?
- Cost: Implementation and operational costs
- Compliance: ISO 27001 Annex A alignment
- Feasibility: Can we implement it with our architecture?
- Impact: Does it affect usability or performance?
See Statement of Applicability for selected controls.
Step 6: Risk Treatment Plan
For each risk requiring treatment, we document:
| Element | Description |
|---|---|
| Risk ID | Unique identifier (e.g., RISK-2025-001) |
| Description | What could happen |
| Current Risk Score | Before treatment |
| Treatment Option | Mitigate, accept, avoid, or transfer |
| Selected Controls | Specific controls to implement |
| Owner | Role responsible for implementation |
| Timeline | Implementation deadline |
| Target Risk Score | After treatment |
| Status | Planned, in progress, implemented |
Step 7: Residual Risk
After implementing controls, we assess residual risk:
Residual Risk = Inherent Risk - Control Effectiveness
Acceptance Criteria:
- Critical risks: Must be reduced to Medium or Low
- High risks: Should be reduced to Medium or Low
- Medium risks: May be accepted if cost of further mitigation is excessive
- Low risks: Generally accepted
Approval: ISMS Owner must formally accept all residual risks above Low level.
Step 8: Monitoring and Review
Ongoing Monitoring
We continuously monitor:
Key Risk Indicators
- Failed authentication attempts
- Rate limit triggers
- Dependency vulnerability scans
- Service availability metrics
- Certificate expiration dates
Control Effectiveness
- Security test coverage
- Audit log completeness
- Incident response time
- Patch management cadence
- Training completion rates
Regular Reviews
Quarterly: Review key risk indicators, update risk scores for changing threat surface
Annually: Full risk assessment, review all controls, update risk register
After Incidents: Conduct root cause analysis, update risk assessment, implement lessons learned
Risk Acceptance Criteria
We accept risks when:
- Score ≤ 4 (Low)
- Cost of mitigation > value protected
- Risk is outside our control (e.g., internet infrastructure failure)
- Compensating controls reduce risk to acceptable level
- Documented and approved by ISMS Owner
We never accept:
- Risks to cryptographic integrity without strong compensating controls
- Risks that violate legal/regulatory requirements
- Risks with severe impact, regardless of likelihood
Documentation
All risk assessments produce:
- Risk Register - Living document of all identified risks (view register)
- Risk Treatment Plan - Actions to mitigate unacceptable risks
- Risk Acceptance Forms - Documented justification for accepted risks
- Risk Review Reports - Quarterly and annual reviews
Roles and Responsibilities
| Role | Responsibilities |
|---|---|
| ISMS Owner | Approve risk assessment methodology, accept residual risks, allocate resources |
| Security Lead | Conduct risk assessments, monitor risks, propose treatments, track implementation |
| Developer | Identify technical risks, implement controls, report vulnerabilities |
| All Team Members | Report potential risks and security concerns |
Special Considerations
Zero knowledge Architecture (Provii)
Provii’s risk profile is fundamentally different from traditional systems:
No-Custody Architecture (downpipes)
downpipes reshapes the risk profile through custody, not cryptography of identity: backups run in the customer’s own Cloudflare account, under the customer’s keys.
Cloud-Native Risks
Operating entirely on Cloudflare/GitHub:
Advantages:
- No physical security concerns
- Enterprise-grade DDoS protection
- Automatic scaling and resilience
Challenges:
- Dependency on third-party availability
- Limited control over infrastructure
- Account security is critical
For downpipes, the vendor footprint is deliberately minimal — a fail-open control-plane and a static, signature-pinned update channel (updates.downpipes.io) — while the engine and console run inside the customer’s own Cloudflare account (customer-operated). This narrows the vendor-side attack surface but shifts operational responsibility for the running instances to the customer as a complementary user-entity control.
Supply Chain Focus
Given our SLSA Level 3 commitment, supply chain risks receive extra scrutiny:
- Dependency vulnerability scanning in every build
- Hermetic builds prevent tampering
- Artefact signing supports integrity
- Transparency logs enable auditing
For downpipes, the supply chain extends into the customer’s account through the update path, so it is held to the same scrutiny: the update channel is static and signature-pinned, the engine verifies each update against a pinned public key and pulls (never receives a push), and the update-signing key is held offline by the operator and never deployed to any Worker.
Related Documents
- Risk Register - Current risk assessment results
- Statement of Applicability - Controls implementing risk treatments
- ISMS Scope - Assets covered by risk assessments
- Information Security Policy - Overarching security principles
Document Information
- Version. 1.2
- Effective Date. 2025-01-13
- Last Updated. 2026-06-19
- Owner. ISMS Owner
- Maintained By. Security Lead
- Review Frequency. Annually
- Next Review. 2026-11-21
- Classification. Public
- Change (1.2). Methodology re-centred on Maelstrom AI as the organisation; downpipes added as a second in-scope platform (no-custody asset, threat, impact, treatment and special-consideration framing added alongside Provii); the legacy backup worker retired in favour of self-hosted downpipes.