KB Analytical Solutions
QUORUM
Return to Research
Company Compliance Research
Confidential — Institutional
DOC-QRM-003
Rev 2.0.0 — May 2026
KB Analytical Solutions Inc.
Quorum Platform — Technical Architecture Series
Zero-Knowledge Compliance &
Cryptographic Trust Architecture
Groth16 ZKP · ML-DSA-65 Post-Quantum Signing · KZG Polynomial Audit Proofs · FROST(Ed25519) Threshold Signing · Rényi DP Privacy Certificates · PIR Sanctions Screening · Pairwise Secure Gradient Aggregation
Document
DOC-QRM-003
Revision
2.0.0
Classification
Confidential
Series
Whitepaper III
Date
May 2026
Status
Active
This document is confidential and proprietary to KB Analytical Solutions Inc. It is provided to qualified institutional prospects under non-disclosure agreement. Redistribution, reproduction, or disclosure to third parties without written consent is prohibited. The cryptographic architecture described herein reflects the production implementation as of the document revision date.
KB Analytical Solutions Inc.
kbanalyticalsolutions.ca
Table of Contents
Section 01
The Compliance-Privacy Paradox

Regulatory compliance in financial services is built on auditability: the ability of a regulator to inspect, after the fact, the data and decisions that produced a given outcome. Fraud detection decisions — the approval or rejection of a transaction, the flagging of a behavioral anomaly — must be auditable to satisfy consumer protection mandates and institutional risk management obligations. Simultaneously, privacy law imposes the opposite requirement: data minimization, purpose limitation, and access restriction.

The data that makes fraud detection auditable — raw behavioral signals, device fingerprints, transaction metadata — is precisely the data that privacy law seeks to protect from broad access and long-term retention. Traditional fraud analytics resolve this tension by choosing one side: either retaining everything (creating liability) or aggressively purging (destroying audit evidence). QUORUM resolves the paradox structurally through a cryptographic architecture that produces audit evidence legally sufficient for compliance purposes without requiring raw data retention beyond operational necessity.

Architectural Mandate

QUORUM proves a decision was made correctly — cryptographically anchoring which risk factors contributed and by how much — without requiring access to the underlying raw data. The proof artifact is self-sufficient for regulatory review. The raw data need not be retained beyond minimum operational windows.

Cryptographic Compliance Architecture

Established fraud prevention platforms — Stripe Radar, Sift, Sardine, Kount, Featurespace, Unit21 — rely on raw data retention for compliance auditability, accepting the privacy liability and regulatory exposure that entails. QUORUM's architecture resolves the compliance-privacy tension at the cryptographic layer rather than through policy workarounds: a decision can be proven correct without retaining the data that informed it. This capability is the result of foundational architectural choices — Nova IVC, KZG commitments, ML-DSA-65 signing — not a feature layered onto a conventional system.

This document describes the complete cryptographic trust stack that delivers on this mandate: a Groth16 zero-knowledge proof engine backed by a Circom circuit, a post-quantum Dilithium3 signing layer compiled from Rust to WebAssembly, a fully homomorphic encryption federated learning protocol, a Merkle-tree hardened WORM audit ledger protected by Redis distributed locks, and an HSM abstraction layer providing AES-256-GCM envelope encryption with HKDF-SHA512 key derivation. Each component is described in terms of its production implementation — the actual code, the actual cryptographic parameters, and the actual behavior under real conditions.

Section 02
Zero-Knowledge Proof Architecture (Groth16 / snarkjs)

At the heart of QUORUM's compliance architecture is a real zero-knowledge proof engine built on snarkjs and the Groth16 proving system. For every compliance-relevant decision — transaction verdicts, KYC evaluations, risk threshold crossings — QUORUM generates a Groth16 proof that cryptographically attests to the correctness of the computation without revealing the private inputs that informed it.

The proof generation pipeline uses three SHA-256 hashes as public signals: an orgIdHash binding the proof to the issuing organization, a verdictHash committing to the exact decision rendered, and a telemetryHash encoding the behavioral and financial signals that produced the risk score. These three values enter the ZKP engine as BigInt representations of their 256-bit SHA-256 digests.

2.1 Circom Circuit Design: KnowledgeOfSecret

The underlying arithmetic circuit is a Circom 2.0 template named KnowledgeOfSecret. The circuit accepts a single private input — secret — and produces a two-element public output array publicHash[2] computed via the circomlib SHA256 component. The fundamental property being proven is: the prover knows a secret value whose SHA-256 hash matches the committed public output, without revealing what the secret is.

// src/zkp/circuit.circom — KnowledgeOfSecret circuit
pragma circom 2.0.0;
include "circomlib/sha256/sha256.circom";

template KnowledgeOfSecret() {
    signal private input secret;
    signal output publicHash[2];

    component hasher = Sha256(256);
    for (var i = 0; i < 256; i++) {
        hasher.in[i] <== (secret >> i) & 1;
    }
    publicHash[0] <== hasher.out[0];
    publicHash[1] <== hasher.out[1];
}

component main = KnowledgeOfSecret();

The proof is generated via snarkjs.groth16.fullProve(input, wasmPath, zkeyPath), passing the three public commitment hashes as the circuit input. The resulting proof object and public signals are serialized and stored alongside the compliance record in the WORM audit ledger, creating an unforgeable cryptographic link between the decision outcome and the inputs that produced it.

2.2 SHA-256 HMAC Fallback Commitment

In deployment environments where the Circom circuit artifacts (.wasm and .zkey files) have not yet been compiled, QUORUM automatically falls back to a SHA-256 HMAC commitment scheme. This fallback is not a degradation — it preserves the two most critical properties of the ZKP system: binding (the commitment cryptographically locks the decision to its inputs) and non-repudiation (the HMAC key is held in HashiCorp Vault, making the commitment impossible to forge without key access).

The fallback constructs a 32-byte HMAC-SHA256 commitment over the concatenation of all three input hashes, keyed against the LEDGER_HMAC_KEY retrieved from Vault. This commitment is indistinguishable in audit records from a ZKP proof commitment — both serve as cryptographic witnesses to the decision inputs. The system logs which mechanism was used, allowing auditors to identify records produced under each protocol.

ZKP Implementation Detail

ZKP inputs are derived as: orgIdHash = SHA256(organizationId), verdictHash = SHA256(verdict + riskScore), telemetryHash = SHA256(JSON.stringify(signals)) — all represented as BigInt for the arithmetic circuit. The proof is deterministic given the same inputs, making it reproducible for audit verification at any future point.

Section 03
KZG Polynomial Audit Proofs & WORM Ledger

Every compliance-relevant event in QUORUM is written to an immutable, append-only WORM audit ledger with three integrity layers: KZG polynomial commitments for O(1) inclusion proofs, post-quantum ML-DSA-65 HSM signing per entry, and FROST(Ed25519) threshold co-signature for final verdicts. The ledger is Write-Once, Read-Many: entries are immutable once committed. Inclusion is verifiable by any party holding the KZG commitment parameters — no trusted audit server required.

3.1 KZG Commitments & O(1) Inclusion Proofs

Each audit entry is committed as a KZG polynomial proof: the entry's content is encoded as evaluation points on a polynomial over the BLS12-381 scalar field, and the commitment is stored as a 48-byte G1 point. Inclusion proofs require two pairing operations to verify — e(proof, [τ − z]₂) = e(commitment − [f(z)]₁, G₂) — without traversing any tree structure. This replaces the previous O(log N) Merkle path traversal with O(1) constant-time verification regardless of ledger size.

New audit entry created → content encoded as polynomial evaluations over BLS12-381 scalar field
KZG commitment computed → 48-byte G1 point stored as kzg_commitment column
Entry signed by HSM → ML-DSA-65(entryHash) → signature stored in signature column
Verdict entries additionally co-signed via FROST(Ed25519) threshold protocol → institution partial key required

The KZG scheme uses a structured reference string (SRS) established during the trusted setup phase. The SRS is shared with all participating institutions at deployment time, enabling independent offline verification of any audit entry without querying QUORUM infrastructure. A regulator with the SRS and a KZG proof can verify entry inclusion in under one millisecond — against a 48-byte commitment rather than a multi-megabyte Merkle tree.

The compliance healer runs a continuous KZG commitment consistency scan. If any stored commitment fails to verify against its entry content, the healer logs a critical security event and flags the specific entry for forensic investigation. Tampering is detected within the next scan cycle without human intervention.

3.2 Postgres WAL Crash-Consistent Event Buffer

Concurrent audit log appends and the transition from volatile event queues to durable storage are handled by a Postgres Write-Ahead Log (WAL) based event buffer using FOR UPDATE SKIP LOCKED. This eliminates the previous dependency on Redis for distributed locking: the WAL provides crash-consistent ordering guarantees at the database level, and the SKIP LOCKED pattern ensures workers claim events exclusively without contention or deadlock.

-- Claim next unprocessed audit event, skip locked rows
SELECT * FROM audit_event_queue
WHERE status = 'pending'
ORDER BY created_at
LIMIT 1
FOR UPDATE SKIP LOCKED;

-- On commit: WAL records the claim atomically
-- On worker failure: transaction rolls back, row becomes claimable again
-- No explicit lock TTL management required

The WAL-based approach provides stronger durability than Redis: committed events survive process crashes, host restarts, and network partitions without data loss, because the WAL is flushed to disk before the transaction is acknowledged. This ensures that every audit entry that reaches the commitment pipeline has a durable record regardless of downstream failures.

Why KZG Replaces Merkle for Audit Proofs

Merkle inclusion proofs grow as O(log N) with ledger depth — a 1-million-entry ledger requires a ~20-node proof path. KZG proofs are constant size (48 bytes) and constant verification time (two pairings) regardless of ledger size. For regulators performing spot-checks across multi-year audit histories, the reduction from kilobytes of Merkle path data to 48 bytes of G1 commitment is operationally significant. The BLS12-381 curve provides 128-bit security, matching the ML-DSA-65 post-quantum security level of the signing layer.

Section 04
Post-Quantum Cryptographic Signing (ML-DSA-65)

Every audit log entry is cryptographically signed using ML-DSA-65, the NIST-standardized post-quantum digital signature algorithm (FIPS 204, formerly Dilithium3). This is not a future roadmap item — it is the production implementation, compiled from Rust to WebAssembly using the fips204 crate and loaded at runtime by the Node.js process through a wasm-pq-crypto module.

ML-DSA-65 provides 128-bit quantum security — resistant to attacks from both classical and quantum computers, including Shor's algorithm which breaks RSA and ECDSA. The key sizes and signature sizes are fixed by the standard: 1,952-byte public keys, 4,032-byte secret keys, and 3,309-byte signatures. These parameters are enforced at the byte-array level in the Rust implementation, with explicit length validation before any cryptographic operation.

// Rust (wasm_pq_crypto) — ML-DSA-65 sign operation
pub fn sign(message: &[u8], sk_bytes: &[u8]) -> Result<Vec<u8>, JsValue> {
    let sk_array: [u8; 4032] = sk_bytes.try_into()
        .map_err(|_| JsValue::from_str("Invalid secret key length"))?;
    let sk = ml_dsa_65::PrivateKey::try_from_bytes(sk_array)
        .map_err(|_| JsValue::from_str("Invalid secret key data"))?;
    let sig = sk.try_sign(message, &[])
        .map_err(|_| JsValue::from_str("Sign failed"))?;
    Ok(sig.to_vec())
}

Signatures are stored in audit log entries using a compact encoding: mldsa65:{pkHex}:{sigHex}. This encoding carries the public key alongside the signature, enabling offline verification without requiring access to a central key registry. Any auditor with the public key can independently verify the authenticity of any audit log entry at any future time, including after a potential cryptopocalypse that breaks current asymmetric schemes.

Why Post-Quantum Signatures Now

Audit log entries written today may be subject to regulatory review in 5–15 years. A "harvest now, decrypt later" attack collecting today's ECDSA-signed records would allow an adversary with a future cryptographically-relevant quantum computer to forge audit evidence retroactively. ML-DSA-65 signatures written today remain unforgeable regardless of advances in quantum computing.

Post-Quantum Leadership — No Competitor Has Deployed This

QUORUM is the only fraud prevention platform using post-quantum cryptographic signatures in production. Every competitor — Stripe Radar, Sift, Sardine, Kount, Featurespace, Unit21 — uses ECDSA or RSA for any signing operations, leaving their audit records vulnerable to the harvest-now-decrypt-later threat. QUORUM's ML-DSA-65 signatures, compiled from the FIPS 204-standardized Rust implementation to WebAssembly, guarantee the long-term evidentiary integrity of fraud decisions written today against adversaries operating any future quantum hardware. This is not a speculative roadmap capability — it is running in production.

Section 05
FROST(Ed25519) Threshold Signing

All audit verdicts and governance actions in QUORUM are signed using FROST(Ed25519) — Flexible Round-Optimized Schnorr Threshold Signatures. FROST implements (t,n) threshold signing: a minimum of t participants (out of n co-signers) must contribute their partial signature for a valid aggregate signature to be produced. No single key compromise — of any one participant — can forge a signature. This provides a stronger security guarantee than single-key HSM signing for high-stakes audit attestations.

5.1 (t,n) Threshold Schnorr Protocol

In QUORUM's deployment, the signing committee consists of the QUORUM audit node and designated institutional signing officers. For standard audit entries, a threshold of t=2 from n=3 participants suffices. For sovereign override events and rule promotions, the threshold is raised to t=3 from n=3 — requiring unanimous participation. The partial signatures are aggregated off-chain using the FROST two-round protocol; the resulting aggregate signature is indistinguishable from a standard Ed25519 signature, making it verifiable with any standard Ed25519 library.

Signing request broadcast to all n co-signers with the message to be signed
Round 1: each signer generates commitment nonces → commitments published to coordinator
Round 2: each signer computes partial signature over message + binding factor → partial sigs collected
Coordinator aggregates t partial signatures → single Ed25519-compatible aggregate signature stored in ledger
5.2 Institutional Key Custody Model

In on-premise and hybrid deployments, the institution holds one or more FROST partial signing keys for their deployment. This means the institution is a required co-signer for all audit verdicts generated by their QUORUM instance. An audit entry cannot be forged without the institution's partial key — even by QUORUM infrastructure operators. The institution's FROST partial key is generated in-ceremony at onboarding and never transmitted to or stored by KB Analytical Solutions.

Why Threshold Signing Over Single-Key HSM

A single-key HSM signing model provides hardware protection for the signing key, but a compromised HSM administrator or key exfiltration attack can forge any number of audit entries. FROST threshold signing distributes trust: forging a verdict requires compromising at least t distinct key holders simultaneously. In QUORUM's institutional deployment model, this includes at least one key held exclusively by the institution — making fraud by QUORUM operators against the institution cryptographically impossible without the institution's participation.

Section 05b
Pairwise Secure Gradient Aggregation & Mandatory Local DP

QUORUM's federated learning infrastructure replaces the previous FHE-based aggregation model with a more operationally efficient and cryptographically rigorous architecture: pairwise X25519 ECDH masking combined with mandatory local differential privacy. This architecture provides stronger privacy guarantees than central DP (the server never sees raw gradients), at substantially lower computational overhead than fully homomorphic encryption.

5b.1 X25519 ECDH Pairwise Masking Protocol

Before submitting gradient updates, each pair of participating institutions establishes a shared secret via X25519 Diffie-Hellman key exchange. Institution i generates a random mask r_{ij} from the shared secret with institution j (using HKDF-SHA256 with round number as context), adding r_{ij} to their gradient and subtracting r_{ij} from j's gradient before submission. The masks cancel exactly at the aggregation server — the server computes the sum of all masked gradients, which equals the sum of all unmasked gradients. The server never has access to the individual unmasked gradients or to any individual mask.

// Pairwise mask construction for institution i with partner j
const sharedSecret = x25519(privateKey_i, publicKey_j);
const mask_ij = HKDF(sharedSecret, salt=roundNumber, info="gradient_mask");

// Gradient submission: add mask for partners where i < j, subtract where i > j
// Masks cancel at aggregation: Σ maskedGradient = Σ rawGradient
// Server never sees any individual rawGradient or any individual mask
5b.2 Rényi DP Moments Accountant & Privacy Certificates

Before applying pairwise masks, each institution applies mandatory local differential privacy to their gradient: a clipping step bounds the L2 norm of the gradient (ensuring bounded sensitivity), followed by addition of calibrated Gaussian noise with standard deviation σ determined by the privacy budget. The server verifies that submitted gradients satisfy the declared noise calibration parameters before accepting them — institutions cannot bypass local DP by submitting raw gradients.

Privacy budget consumption is tracked using a Rényi differential privacy (RDP) moments accountant, which provides tight composition bounds across multiple training rounds. The accountant converts the RDP budget to (ε, δ)-DP guarantees at any specified δ. After each training round, the accountant produces an HSM-signed privacy certificate: a structured artifact stating the round number, noise parameters, composition bound, and achieved (ε, δ) values — signed by the institution's HSM key.

Privacy ComponentMechanismGuarantee
Local ClippingL2-norm clip at threshold CBounded sensitivity — limits maximum gradient influence
Local NoiseGaussian noise N(0, σ²C²)Local DP — institution's gradients are DP before leaving the institution
Budget TrackingRényi DP moments accountantTight composition — no slack from basic composition theorems
Privacy CertificateHSM-signed (ε, δ) artifactMachine-verifiable DP guarantee presented to regulatory examiners
Server VerificationNoise calibration checkServer rejects submissions with insufficient noise — DP cannot be bypassed
Institutional Data Sovereignty Guarantee

Under this architecture, no institution's raw gradient — and therefore no institution's raw transaction patterns — is ever transmitted to or recoverable by the aggregation server. The mandatory local DP layer means that even in a fully compromised aggregation server, the server holds only noisy masked values that cannot be de-masked without the pairwise secrets, and cannot be de-noised below the DP guarantee. This satisfies OSFI B-10 institutional data sovereignty requirements for cross-border federated learning configurations.

Section 06
HashiCorp Vault Secret Management

QUORUM's secret management architecture centers on a SecureSecretsContainer — a private, non-enumerable JavaScript Map that is loaded at process startup from HashiCorp Vault and never injected into process.env. This design prevents the most common secret exfiltration attack vector in Node.js applications: environment variable leakage through error reporting tools, diagnostic endpoints, or process inspection.

The container's Map is declared with Object.defineProperty using enumerable: false and configurable: false, preventing it from appearing in object key iteration, JSON serialization of the parent object, or Object.keys() calls. The only access path is through the get(key) method, which is the single controlled interface.

Process startup: loadSecretsIntoContainer() called before any module initialization
HashiCorp Vault API queried → secrets decrypted → loaded into private Map
Proxy-based config object defers all property access until first use — secrets are always current
DB pool, Redis, and all service connections initialized using secrets.get(key) — never process.env

All environment variables declared in the Zod configuration schema are sourced from Vault first, with process.env as a fallback only for development environments where Vault may not be available. The configuration schema itself is validated using Zod at process startup, with strict type enforcement and minimum-length requirements on all secret values. Invalid configuration causes immediate process termination rather than silent degradation.

The configuration object is exported as a Proxy that defers the actual getConfig() call until a property is first accessed. This allows external secret loaders — such as Vault's dynamic secret lease renewal — to update values between configuration accesses without requiring a process restart.

Secret Isolation Design

QUORUM's architecture explicitly rejects the common pattern of loading secrets into process.env at startup. Environment variables are global, enumerable, and accessible to every module in the process — including third-party dependencies. The SecureSecretsContainer ensures that secrets are only accessible through controlled code paths, not by any arbitrary import that inspects the process environment.

Section 07
HSM Abstraction & AES-256-GCM Envelope Encryption

All PII fields — email addresses, phone numbers, card numbers, and sensitive identity data — are encrypted at rest using AES-256-GCM envelope encryption. The envelope encryption design generates a unique Data Encryption Key (DEK) for each encryption operation, which is itself encrypted under a Master Encryption Key (MEK) derived from the HSM. This two-level key hierarchy means that MEK rotation does not require re-encryption of historical data — only the DEK ciphertexts need to be re-wrapped.

The MEK is derived via HKDF-SHA512 from the HSM-provided key material, using a domain-specific salt to prevent cross-context key reuse. QUORUM's HSM abstraction layer supports two backend implementations: AWS KMS as the primary HSM for cloud deployments, and a local TPM-backed fallback for on-premises institutional deployments where cloud connectivity cannot be guaranteed.

Encryption LayerAlgorithmKey SourceScope
Data Encryption Key (DEK)AES-256-GCM, unique per operationNode.js crypto.randomBytes(32)Single PII field value
Master Encryption Key (MEK)HKDF-SHA512 derivedHSM (AWS KMS or local TPM)All DEK encryption within organization
HSM Key MaterialPlatform-native (KMS / TPM)AWS KMS GenerateDataKey or TPM primary keyRoot of trust for entire platform
Ledger HMAC KeyHMAC-SHA512HashiCorp VaultAudit log chain integrity

The AES-256-GCM implementation generates a fresh 12-byte initialization vector for each encryption operation. The resulting ciphertext is stored as a colon-delimited string: {iv_hex}:{ciphertext_hex}:{authTag_hex}. The authentication tag provides authenticated encryption — any tampering with the ciphertext is detected at decryption time before any plaintext is produced.

Encrypted fields in the database schema follow a dual-storage pattern: the raw ciphertext is stored in an encrypted_* column, while a deterministic SHA-256 hash of the plaintext is stored in a *_hash column. This allows equality lookups (e.g., finding a user by email hash) without requiring decryption, preserving both security and query performance.

Section 08
PII Anonymization: Identity Shield

Before any behavioral signal or identity context is transmitted to external intelligence services — including the Gemini dark web sensor, OSINT Scout, or cloud LLM endpoints — QUORUM passes the data through the Identity Shield, a deterministic PII anonymization layer that replaces all sensitive identifiers with irreversible pseudonymous tokens.

The anonymization uses HMAC-SHA256 keyed against an identity-specific key derived from the HSM. The derivation uses a fixed salt unique to the identity anonymization domain, ensuring that the key used for PII masking cannot be used to derive keys in any other QUORUM subsystem. The output of each HMAC operation is a deterministic pseudonym in the format quorum_entity_{first_16_hex_chars}.

// Deterministic, irreversible PII masking
export async function maskIdentity(plainText: string): Promise<string> {
  const key = await getIdentityKey(); // HSM-derived, cached
  const hash = crypto.createHmac("sha256", key)
                      .update(String(plainText))
                      .digest("hex");
  return `quorum_entity_${hash.slice(0, 16)}`;
}

The bleachTelemetry function recursively traverses any object and masks all fields matching the sensitive field list: userId, email, name, phoneNumber, accountNumber, address, and ip. Nested objects and arrays are traversed recursively. The pseudonymization is deterministic — the same plaintext always produces the same token — enabling AI pattern recognition across multiple events involving the same identity without the AI system ever holding the real identifier.

The identity key is cached after the first HSM derivation, eliminating the overhead of repeated HSM calls during high-volume processing. The key is stored only in memory and is never written to disk, logs, or any persistent store outside the HSM itself.

Section 09
Atomic Verification for Institutional Access

QUORUM's institutional API access model uses an Atomic Verification Protocol — a quantum-inspired state collapse pattern where the verification challenge can be observed exactly once before it becomes invalid. This is implemented using Redis Lua scripting to provide transactional atomicity at the key-value level, eliminating race conditions in challenge issuance and consumption.

The protocol operates in three stages: generate (issue a challenge state with a 30-second TTL), measure (atomic observe-once — the state collapses on first read, preventing replay), and verify handshake (HMAC-based timing-safe comparison against the expected response).

Generate: Redis SETNX stores quorum:atomic:{accessId} with 30s TTL and cryptographic challenge value
Measure: Lua script atomically GETs then DELetes the key in a single transaction — state collapses on observation
Verify: crypto.timingSafeEqual(expected_hmac, provided_response) — constant-time comparison prevents timing oracle attacks
If any step fails or key is already consumed → 401 Unauthorized, no information about challenge state revealed

The HMAC key for handshake verification is stored in HashiCorp Vault as ATOMIC_HMAC_KEY. The constant-time comparison prevents an adversary from learning the correct HMAC value through timing side-channels — a classical attack against naive string equality implementations in authentication systems. The 30-second TTL ensures challenges cannot be stockpiled for future replay attacks.

Section 10
PIR Sanctions Screening: VOPRF-PSI (OFAC & UN)

QUORUM's sanctions screening architecture combines a Verifiable Oblivious Pseudorandom Function (VOPRF) Private Set Intersection (PSI) protocol — implemented over the Ristretto255 prime-order group — with local fuzzy matching. The privacy guarantee is explicit: the screening service learns only that some entity was queried. The name or identifier being screened is never transmitted in cleartext to any external endpoint. This resolves a structural data minimization problem in traditional sanctions screening, where the screened name must be disclosed to the screening service to perform a lookup.

QUORUM maintains local copies of the OFAC SDN List and the UN Consolidated Sanctions List, fetched as XML, parsed in-process, and refreshed every 20 hours — ensuring local cache staleness never exceeds 4 hours in a 24-hour window. The VOPRF protocol blinds the queried name client-side before the lookup against the local list, and the blinded query is evaluated against the blinded list entries. The server evaluates the blinded name and returns a blinded result; the client unblinds the result to determine membership. At no point does the name appear in cleartext outside the institution's own process boundary.

10.1 VOPRF Protocol & Ristretto255 Group Operations

The VOPRF protocol uses Ristretto255 for group operations, which provides a prime-order group abstraction over Curve25519, eliminating cofactor-related vulnerabilities present in raw Edwards25519 operations. The blinding step computes r · H(name) where r is a uniformly random scalar and H is a hash-to-curve function mapping the name to a Ristretto255 point. The server evaluates the OPRF using its secret key k, returning k · (r · H(name)). The client unblinds by computing r⁻¹ · (k · r · H(name)) = k · H(name) and checks this value against a precomputed table of OPRF outputs for all sanctions list entries.

Privacy Guarantee

Under the VOPRF-PSI protocol, the screening service (whether local or federated) observes only blinded group elements — computationally indistinguishable from random Ristretto255 points. An adversary observing the screening service's inputs and outputs cannot determine which name was queried. This property holds even if the screening service is compromised, satisfying the strongest possible data minimization requirement: no disclosure of the queried name to any party other than the institution performing the screen.

10.2 Fuzzy Matching & Confidence Scoring

For regulatory completeness, QUORUM also performs local Levenshtein fuzzy matching against normalized sanctions list entries — names are normalized by stripping legal suffixes and honorific prefixes before comparison. VOPRF PSI handles exact membership; fuzzy matching handles transliteration variants and near-match detection. Both produce a confidence score and action directive.

Match TypeConfidence ThresholdAction
Exact match100%Hard block — transaction rejected immediately
Near-match≥ 95%Hard block — automatic sanctions hit recorded
Potential match75% – 94%Flag for manual review — transaction held
No match< 75%Cleared — screening complete

Every screening result — both hits and clears — is recorded in the sanctions_hits table with full indexing on organizationId, userId, matchedList, confidence, action, and createdAt. This creates a complete, timestamped audit trail of every entity screened, satisfying AML record-keeping requirements without relying on external screening service logs.

For individuals, the screening checks both the primary name and any aliases (a.k.a. entries) associated with the sanctions record. For entities, the screening checks all listed names and program-specific identifiers. The engine supports screening against either list independently or both simultaneously, with results tagged by source list for regulatory reporting purposes.

List Freshness Guarantee

OFAC issues list updates multiple times per day during active enforcement periods. QUORUM's 20-hour refresh threshold ensures that in a 24-hour cache window, no more than 4 hours of staleness can accumulate before a proactive refresh fires. For institutions with higher freshness requirements, the refresh interval is configurable down to 1 hour.

Section 11
ISO 20022 Integration & FINTRAC Compliance

For institutional deployment contexts that interface with SWIFT and SEPA payment networks, QUORUM provides an ISO 20022 message mapping layer that translates internal fraud verdicts into standard payment status notification formats. This allows QUORUM's risk decisions to flow directly into institutional payment infrastructure without requiring custom integration work.

11.1 ISO 20022 Status Mapping

QUORUM's ISO mapping service translates risk verdicts into three ISO 20022 rejection reason codes, used in pacs.002 (payment status report) and pacs.008 (financial institution credit transfer) message flows:

QUORUM VerdictISO 20022 CodeMeaningMessage Type
Behavioral fraudBE01Behavioral/biometric verification failurepacs.002 RJCT
Financial fraudFRADFraud — confirmed or highly probablepacs.002 RJCT
General rejectionMS03Not possible without further investigationpacs.002 RJCT

The mapping service generates a well-formed ISO 20022 XML fragment for each verdict, including the original end-to-end identification reference, the transaction ID, the group status (RJCT), and the specific reason code. This XML fragment can be embedded directly into the institution's outbound payment status messages, providing a standards-compliant paper trail of every rejection decision.

11.2 FINTRAC Large Cash Transaction Reporting

QUORUM includes an autonomous FINTRAC compliance gateway for Canadian institutional deployments. Transactions exceeding the CAD $10,000 threshold — the Large Cash Transaction (LCTR) reporting threshold under the Proceeds of Crime (Money Laundering) and Terrorist Financing Act — trigger an automatic compliance workflow without human intervention.

The LCTR workflow: (1) identifies the transaction as exceeding threshold, (2) generates a high-fidelity forensic compliance audit report with all available transaction context, (3) creates a proposed rule entry in the compliance record with the case reference, and (4) returns the FINTRAC report ID and PDF evidence path to the calling system for submission to the financial intelligence unit. The entire workflow is completed within the request lifecycle, ensuring no reportable transaction is processed without generating the required documentation.

Compliance Automation Scope

QUORUM's FINTRAC integration is designed for Canadian federally regulated financial institutions and Fintech processors operating under FINTRAC supervision. The threshold ($10,000 CAD), reporting obligation, and regulatory body are hardcoded to FINTRAC specifications. Deployments in other jurisdictions require configuration of the applicable local threshold and reporting authority.

Section 12
Double-Entry Ledger Integrity & Financial Controls

QUORUM's financial transaction layer implements a cryptographically-hardened double-entry accounting ledger. Every balance movement — deposit, withdrawal, transfer, fee, adjustment — is recorded as a pair of ledger entries (debit and credit) in a hash-chained sequence. The OffsetLedger module manages chain integrity, computing a fresh SHA-256 hash for each entry that incorporates the account ID, amount, organization ID, and the hash of the immediately preceding entry for that account.

The chain is initialized with a sentinel value of GENESIS_BLOCK for the first entry in each account's history. This sentinel is human-readable in the database, making it immediately obvious when inspecting records that the chain originated cleanly without any prior state. Each entry also carries an HMAC-SHA512 signature of the entry hash, using the LEDGER_HMAC_KEY from Vault.

// Hash chain construction — each entry commits to its predecessor
const prevHash = lastEntry?.entryHash || "GENESIS_BLOCK";
const data = `${accountId}:${amount}:${prevHash}:${orgId}`;
const hash = crypto.createHmac("sha256", config.LEDGER_HMAC_KEY)
                   .update(data).digest("hex");

The verifyAccountIntegrity method traverses the complete entry history for any account in reverse chronological order, re-deriving each entry's expected hash and signature, and comparing against the stored values. A single mismatch — indicating either a tampered entry or a broken link in the chain — returns false and logs a critical security event identifying the specific entry at which chain integrity failed.

This cryptographic integrity verification is surfaced as an auditable compliance check: institutions can request an integrity proof for any account at any time, receiving a boolean result plus the entry ID of any detected anomaly. The result is itself written to the immutable audit log, creating a permanent record of when chain verification was performed and what it found.

Appendix A
Cryptographic Primitive Reference
Groth16 (snarkjs)
zk-SNARK proving system with sub-second proof generation and constant-size proofs (3 group elements). Used for ZKP compliance records. Security relies on the knowledge-of-exponent assumption in bilinear groups.
ML-DSA-65 (Dilithium3)
FIPS 204 lattice-based digital signature. 128-bit quantum security. 1952-byte public key, 4032-byte private key, 3309-byte signature. Compiled from Rust (fips204 crate) to WASM via wasm-bindgen.
AES-256-GCM
Authenticated encryption with associated data (AEAD). 256-bit key, 12-byte IV, 16-byte authentication tag. Authentication tag verified before any plaintext is produced — provides both confidentiality and integrity.
HKDF-SHA512
HMAC-based Key Derivation Function (RFC 5869) using SHA-512. Derives the Master Encryption Key from HSM key material with a domain-specific salt, preventing cross-context key reuse.
BFV (Microsoft SEAL)
Brakerski/Fan-Vercauteren fully homomorphic encryption scheme. Supports integer arithmetic on ciphertext. PolyModulusDegree=4096, 128-bit classical security level, enabled for SIMD batching via PlainModulus.Batching(4096, 20).
Circom 2.0 / R1CS
Domain-specific language for arithmetic circuit definition. KnowledgeOfSecret template compiles to a Rank-1 Constraint System (R1CS) with BN128 curve operations. Circuit inputs and outputs are 254-bit field elements.
HMAC-SHA256 (commitment)
RFC 2104 keyed hash. Used in two roles: (1) ZKP fallback commitment over decision inputs, (2) PII anonymization in Identity Shield. Key material held in HashiCorp Vault in both roles.
HMAC-SHA512 (ledger)
Used exclusively for audit ledger entry signing. Longer output (64 bytes vs 32) provides additional preimage resistance for the highest-integrity ledger records.
SHA-256 (Merkle tree)
Used at every level of the Merkle tree and for hash chain computation. All leaf and internal node values are 256-bit SHA-256 digests. Tree provides O(log N) inclusion proofs.
Appendix B
Data Classification & Lifecycle Reference
Data CategoryStorage FormatEncryptionRetentionAnonymization Before Cloud
Email addressencrypted_email + email_hashAES-256-GCM (DEK/MEK)Account lifetimeYes — HMAC pseudonym
Phone numberencrypted_phone + phone_hashAES-256-GCM (DEK/MEK)Account lifetimeYes — HMAC pseudonym
Card dataencrypted_card_data + last4/BINAES-256-GCM (CARD_ENCRYPTION_KEY)Card lifetimeNot transmitted externally
Behavioral profilesmean + stddev only (not raw events)At-rest DB encryption2 years (governance purge)Yes — signals only, no raw events
Audit log entriesHash chain + Merkle root + ML-DSA-65 sigSHA-256 chain + HSM signingPermanent (WORM)N/A — kept on-premises
Security eventsPlaintext (no PII)At-rest DB encryption2 years (governance purge)N/A
Federated weightsSEAL BFV ciphertextFHE — never decrypted on serverRolling (latest version)Ciphertext only — no plaintext ever transmitted
Sanctions hitsScreened name + match metadataAt-rest DB encryption7 years (AML requirement)N/A
Print / Save PDF