Security & privacy

Nothing leaves.
Nothing is kept.

VoxShield analyses the most sensitive audio a person has — their phone calls. The architecture is built so that the honest answer to “where did my voice go?” is “nowhere”, and so that answer is verifiable rather than promised.

Architecture

Seven properties, in order

01Offline processing

One laptop, loopback bind, no runtime cloud dependency.

02Zero outbound calls

One in the whole codebase, at install time only.

03Memory-only audio

The window is analysed and discarded. 0 bytes persisted.

04Encrypted voiceprints

AES-256-GCM, 192 floats, never returned by any API.

05Hash-chained audit

SHA-256; verification names the first broken entry.

06Role-based access

Checked in a FastAPI dependency, before the handler runs.

07Enterprise isolation

Every tenant query takes the enterprise id first.

Privacy posture

The specific promises

Each row is a property of the implementation, not an intention.

ClaimDetail
Raw audio persistedNever — not to the database, not to a log, not to a temp file that survives the request.
TranscriptionNone. There is no ASR, so no new class of personal data is created.
VoiceprintsAES-256-GCM at rest, 192 floats, never returned by any API.
ErasureCryptographic destruction — ciphertext, nonce and tag overwritten in the same transaction.
Carrier numbersNever stored in full. Last four digits only.
UploadsExtension and magic bytes checked, 50 MB cap, deleted in a finally block.
RetentionVerdicts 30 days, calls 90 days.
SQLNo ORM and no f-string SQL — parameter binding only.
Forbidden in codeeval, unpickling untrusted data, shell interpolation of user input.

A voice embedding that identifies a person is personal data. Under India's DPDP Act it is not “anonymised features”, and VoxShield never describes it that way. The DPDP rules were notified on 14 November 2025, and the maximum penalty for a failure of security safeguards is ₹250 crore — which is the clause the encryption requirement exists for.

Offline

Enforced, not asserted

One outbound call, at install time

Implemented

The only outbound network call in the codebase downloads model weights in scripts/download_models.py. A test asserts it. Pull the network during a demo and the product behaves identically.

The library that phones home

Handled

ECAPA is constructed directly rather than through from_hparams, because the published hyperparams.yaml resolves pretrainer paths against Hugging Face at load time. The downloaded file is left unmodified so its hash still matches upstream.

Authentication & roles

Authorisation runs in the backend

Sign-in, sessions, roles and tenancy scoping are built. A frontend that hides a button is a convenience; the check that matters resolves the session and the role before the handler body runs.

CapabilityPlatform adminEnterprise adminSecurityBankAgent
Manage enterprisesYes
Manage employees & rolesYesOwn
View calls & risk eventsYesYesYesYesOwn calls
Assign incidentsYesYesYesView only
Approve a mitigationYesYesYesBank actions
View the audit logYesYesYes
Read a voiceprint embeddingNobody — no API returns one

Credentials

Built

scrypt hashing, secrets for token generation and hmac.compare_digest for comparison. The plaintext password, the OTP code and the session token are none of them stored.

CSRF

Built

Checked inside the principal resolver, so an authenticated mutating endpoint cannot skip it by construction rather than by review.

Tested paths

36 tests

OTP expiry, attempt limits, rate limiting, replay, session revocation and the absolute cap, CSRF rejection, account enumeration and tenancy scope. More land as the remaining endpoints do.

Boundaries

What this page does not say

No security certification

Not claimed

VoxShield holds no ISO, SOC 2 or comparable certification, and no audit by a third party has taken place. The properties above are implementation facts, not accreditation.

No blockchain

Not claimed

The audit log is a SHA-256 hash chain in SQLite. It is tamper-evident, which is a different and smaller claim than tamper-proof, and it is never called a blockchain.

No bank or carrier integration

Not built

Nothing in VoxShield has ever blocked a real transaction or attached to a live carrier account. Where mitigation is demonstrated it is labelled as simulated.

Email delivery is off

Opt-in

Alerts are written to an outbox table and displayed in the Console. SMTP is off by default and would be the single runtime outbound socket if a deployment enabled it — the health endpoint reports which mode is live.

Verify it

Run the audit check yourself

The Console exposes audit verification in its Settings view, and the repository ships the tests that cover the corruption paths.