Risk Assessment Methodology

How we identify, assess, and treat information security risks

Public

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:

LevelDescriptionExamples
Rare (1)Unlikely to occur in normal circumstancesQuantum computer breaking BLS12-381 today
Unlikely (2)Could occur but not expectedMajor Cloudflare data centre failure
Possible (3)Might occur occasionallySupply chain vulnerability in dependency
Likely (4)Expected to occur in some circumstancesPhishing attempt targeting team
Almost Certain (5)Expected to occur frequentlyAutomated attacks on public APIs

Impact Assessment

We assess business impact if the risk materialises:

LevelDescriptionCriteria
Insignificant (1)Minimal impactBrief service degradation, no data compromise
Minor (2)Limited impactService disruption <1 hour, minimal customer impact
Moderate (3)Noticeable impactService outage 1-4 hours, or minor cryptographic weakness
Major (4)Significant impactService outage >4 hours, or significant security vulnerability
Severe (5)Catastrophic impactComplete 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 LevelScore RangeTreatment Requirement
Low1-4Accept or monitor
Medium5-9Mitigate or accept with compensating controls
High10-15Mitigate with strong controls
Critical16-25Immediate 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:

  1. Effectiveness: Does it meaningfully reduce risk?
  2. Cost: Implementation and operational costs
  3. Compliance: ISO 27001 Annex A alignment
  4. Feasibility: Can we implement it with our architecture?
  5. 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:

ElementDescription
Risk IDUnique identifier (e.g., RISK-2025-001)
DescriptionWhat could happen
Current Risk ScoreBefore treatment
Treatment OptionMitigate, accept, avoid, or transfer
Selected ControlsSpecific controls to implement
OwnerRole responsible for implementation
TimelineImplementation deadline
Target Risk ScoreAfter treatment
StatusPlanned, 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:

  1. Score ≤ 4 (Low)
  2. Cost of mitigation > value protected
  3. Risk is outside our control (e.g., internet infrastructure failure)
  4. Compensating controls reduce risk to acceptable level
  5. 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:

  1. Risk Register - Living document of all identified risks (view register)
  2. Risk Treatment Plan - Actions to mitigate unacceptable risks
  3. Risk Acceptance Forms - Documented justification for accepted risks
  4. Risk Review Reports - Quarterly and annual reviews

Roles and Responsibilities

RoleResponsibilities
ISMS OwnerApprove risk assessment methodology, accept residual risks, allocate resources
Security LeadConduct risk assessments, monitor risks, propose treatments, track implementation
DeveloperIdentify technical risks, implement controls, report vulnerabilities
All Team MembersReport 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.



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.