Skip to content

TOMs · GDPR Art. 32 · UK GDPR · KVKK Art. 12 · ISO 27001:2022 alignment

Security Statement

Version
v2.5
Effective
4 November 2026
Binding language
English

1Introduction

VitaMedas runs two services with two different security models. This Statement keeps them apart, because the difference matters.

  • The Health records vault (on vitamedas.com and inside the app) is zero-knowledge. Files are encrypted on your device with a key only you hold. Our servers store ciphertext and cannot decrypt it.
  • The Vita assistant is not zero-knowledge. An AI model cannot answer text it cannot read, so our app server can read your questions, Vita’s answers, Vita’s memory, profiles, medicines, period data and documents attached in chat. We protect that data with encryption in transit, access controls and the other measures below.

Both services run on servers operated by Hetzner Online GmbH in Helsinki, Finland (EU).

2Threat model

VitaMedas is designed against the following adversaries:

  • External attackers attempting to read or modify user data via the public API, the web application, or the mobile apps.
  • Compromised network paths (TLS-stripping proxies, malicious or coerced upstream networks, hostile Wi-Fi).
  • Compromised infrastructure — including a scenario in which our host or a sub-processor is compromised. For the vault, root access to the server yields only ciphertext. For the Vita assistant, root access to the app server would expose app data; we reduce that risk with the access controls in Sections 7 and 17.
  • Malicious insider — someone with production access. For the vault, they see ciphertext and pseudonymous metadata, never content. For the Vita assistant, production access could reach app data; access is limited to a few named people, and every time our admin panel opens a person’s health data, it is logged (who, whose, when).
  • Legal-process adversary — a third party compelling VitaMedas to disclose user content. For the vault, we cannot disclose what we cannot decrypt: only ciphertext, account metadata and audit-log entries. Vita assistant data is readable, so it could be disclosed if a valid legal order requires it.
  • Lost device on which a user has signed in. Mitigated by server-side session revocation, and on the web by the vault locking when you sign out or after 12 hours without activity.

We explicitly accept the following risks as out of scope of the VitaMedas threat model:

  • Endpoint compromise. A fully compromised user device — including malicious browser extensions, hostile kernel-level malware, or a jailbroken iPhone — can capture the user’s passphrase at entry. We recommend a dedicated browser profile for medical records, and the iOS app checks for signs of jailbreak or a debugger, but endpoint integrity is ultimately the user’s responsibility.
  • Lost vault key. Because vault keys are derived on your device from secrets we do not hold, a lost passphrase and lost recovery factors mean lost vault files. This is the price of zero-knowledge.
  • Social engineering of the data subject. If a user is tricked into sharing records with a malicious party, we cannot un-share something that has been read.

3Vault cryptography

Sections 3.1 to 3.5 describe the Health records vault only. Section 3.6 describes the Vita assistant.

3.1Key derivation

The vault key is derived on your device from your passphrase with Argon2id, using libsodium’s INTERACTIVE parameters (2 iterations, 64 MiB of memory) for new accounts. A random salt is generated on the device. The 32-byte key that results never leaves the device in cleartext.

The parameters are stored with each record, so they can be changed for new records without breaking older ones.

3.2Content encryption

Each vault file is encrypted with XChaCha20-Poly1305 under its own random 32-byte data-encryption key (DEK), using libsodium’s secretstream in 64 KiB chunks. Each chunk is authenticated and bound to its position, so any change, reordering or truncation on the server is rejected at decryption.

3.3Per-file key wrapping

Each file’s DEK is wrapped (encrypted) with your vault key and stored alongside the ciphertext. An adversary holding the entire server contents holds only ciphertext and wrapped keys — neither of which is useful without your key.

3.4Doctor links and delegates

A doctor link has two parts. The secret part of the address sits after the “#”, which browsers never send to a server. The 6-digit code is given separately. Both are needed to decrypt the bundle; our server stores the encrypted bundle and a hash of the code, so it cannot decrypt it. Too many wrong codes disable the link. Each link has an expiry date and can be revoked at any time. Records a doctor has already opened cannot be un-read, as with any sharing.

Where you give a family member or another account access, the file key is sealed to that account’s X25519 public key with libsodium’s sealed_box. Only the holder of the matching private key can open it.

3.5What the vault server sees

Concretely, the vault server has access to:

  • ciphertext blobs and their authentication tags;
  • wrapped DEKs (encrypted by your key, or sealed to a link or delegate);
  • metadata the service needs to work: size, content-type hint, upload time, owner ID, link identifiers;
  • account data: email address and plan;
  • connection data: IP address and browser, in server logs kept for up to 30 days (see the Data Retention Policy).

The vault server does not see your passphrase, your vault key, DEKs or the content of your files.

Exceptions you choose. Asking for an AI description, summary or translation of a vault file makes your device decrypt that one file and send it through our server to the AI provider; we keep only a hash. Letting Vita learn from a vault document sends a summary of it to the Vita app server, where it is stored as readable facts (Section 3.6). A doctor link makes the chosen records readable to whoever holds the link and code.

3.6The Vita app: what our server can read

  • Readable on our server: questions and answers (text and voice transcripts), Vita’s memory, profiles and children’s records, medicines, period data, values read from your reports with their test names, units and dates, visit pages, family-link sharing choices, account data and, from iPhone app version 3.6.3, ratings and notes on answers, the next-step log and the log of changes made from a chat. That log can hold earlier health values, so that Undo can put them back.
  • In transit: everything between the app and our servers is encrypted with TLS.
  • Documents and photos attached in chat are stored as files encrypted at rest with a key our server holds. Our server can decrypt them, which it needs to do to answer.
  • The database itself is not encrypted field by field. It is protected by access controls on a single locked-down server (Section 7).
  • Kept on the phone: Apple Health records and metrics, hospital records if you connect a hospital (and Medicare records, when available) stay on your phone. A short summary goes with a question so Vita can answer it; it is not stored as a record on our server. From iPhone app version 3.6.3, a connection to Apple Health belongs to one Vita account: nobody else on the phone reads it without their own tap, and Vita deletes its copy from the phone when you sign out or another account signs in.
  • Sent to the AI provider: each question with its context, and attached documents, go to Google Gemini to write the answer. From iPhone app version 3.6.3, small calls also read your own words to find details to save and to see whether you are asking the app to change something. Those calls do not see your records. See the sub-processor list.

4Key management

Vault keys are generated on your device and never sent to VitaMedas in cleartext.

  • In the iOS app, a vault device key may be kept in the iOS Keychain with kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, so you do not retype your passphrase on every launch. It stays on that device and is not synced to iCloud.
  • On the web, while the vault is unlocked the keys are cached in this browser’s storage, so a refresh does not ask for your passphrase again. The cache is cleared when you lock the vault or sign out, after 12 hours without activity, and when the server ends your session.
  • Recovery. You can add recovery factors (a recovery phrase, a passkey, or recovery shares given to people you trust). Each one wraps the same key; the server stores only the wrapped result and cannot use it.
  • Server-held key for chat attachments. The key that encrypts documents attached in the Vita app is kept in the app server’s protected configuration, separate from the database, and is never logged.

5Authentication and session management

  • Sign-in. Sign-in uses Firebase Authentication (Apple, Google or email). On vitamedas.com you can also sign in with an emailed sign-in link or by scanning a code with the app. Our servers verify the sign-in and then issue their own session cookie.
  • Session cookies. Sessions are HMAC-signed cookies, HttpOnly, Secure and SameSite=Lax: tai_session in the Vita app (14 days) and vita_session on vitamedas.com (90 days). A vitamedas.com session can be revoked on the server. The long web session does not expose vault content, which still needs your vault key.
  • CSRF protection. A double-submit token (tai_csrf / vita_csrf) is issued with the session cookie. Requests that change data must echo it in a header.
  • Sign-in links (magic links) are single-use. On vitamedas.com they expire after 15 minutes, and in the Vita app after 30 minutes. Password-reset links expire after 1 hour.
  • Brute-force protection. Password sign-in in the Vita app is limited per account, and bursts of refused sign-ins from one address raise an alert. Refused sign-ins are recorded as security events (kept 30 days). Sign-in-link requests are rate-limited, and too many wrong codes disable a doctor link.
  • Automated monitoring. Automated checks look at security events every few minutes (for example, many requests for records that are not the requester’s, or bursts of refused sign-ins) and alert our team.

6Network security

  • HTTPS everywhere. All traffic uses TLS. TLS from your device ends at Cloudflare’s network, which connects to our servers over HTTPS (TLS 1.2 or 1.3).
  • HSTS on vitamedas.com with includeSubDomains; preload, so browsers refuse plain HTTP.
  • Content Security Policy on vitamedas.com: scripts need a per-request nonce (strict-dynamic), and pages may connect only to our own origin. Inline styles are allowed. Two sandboxed paths that decode medical-image formats get their own narrower policy that allows the decoders to run; that permission never applies to the pages themselves.
  • X-Frame-Options DENY; Cross-Origin-Opener-Policy and Cross-Origin-Resource-Policy set to same-origin; Referrer-Policy strict-origin-when-cross-origin; Permissions-Policy turns off the microphone and location, and allows the camera only on our own pages (so you can photograph a report).

7Infrastructure

VitaMedas runs on servers operated by Hetzner Online GmbH in Helsinki, Finland. Hetzner’s data centres are ISO 27001 certified and located within the European Economic Area.

  • Network. Requests reach our services through Nginx as a reverse proxy, with rate limits. Application ports listen on localhost only.
  • Process supervision via PM2 with automatic restart on crash.
  • Databases. SQLite (better-sqlite3) in WAL mode. The vault database holds ciphertext and metadata. The Vita app database holds readable app data; it is not encrypted field by field and is protected by access controls on a single locked-down server. Our rule is that every read of health data in the app API is limited to the owner’s account in the database query itself.
  • Secrets management via environment files under restrictive file permissions. Secrets can be rotated with an internal utility and are never logged.

8Code and release security

  • TypeScript strict mode across the web and vault backend.
  • Private source code. Our source code is kept in private repositories; there is no public copy.
  • App release checks. Before each app build is uploaded, automated checks scan the built app for keys, vendor addresses, demo logins and debug hooks, and fail the upload if any are found.
  • Website release checks. A vitamedas.com release ships only committed code, refuses to overwrite newer live code, and runs an automated test of the record viewer before and after it goes live.

9Audit anchoring — Sigstore Rekor

Every entry in the vault audit log is hashed and chained to the one before it, and signed with our server key. Once an hour, the new entries are combined into a single hash (a Merkle root), signed, stored, and submitted to the public Sigstore Rekor transparency log. Rekor is a public append-only log; the published hash reveals neither content nor identifiable metadata. If Rekor cannot be reached, the signed anchor is still kept on our server.

The property this provides is tamper-evidence: a later edit, deletion or insertion of vault audit entries by VitaMedas (deliberate or otherwise) breaks the chain of anchored hashes and can be detected by third parties without disclosing any private information. Customers under the Data Processing Agreement may request the Rekor entry indices for their tenant’s audit-log range and independently verify integrity.

Separately, our admin panel records every time a team member opens a person’s health data in the Vita app (who, whose, when, where).

10Backups and disaster recovery

  • Vita app database: a full, compressed copy once a day, kept for 30 days. An extra copy made before a software change is removed within 35 days, so no backup is older than that.
  • Vault server: any copy of the vault database and the encrypted vault files stays on the same host, contains vault ciphertext only, and is removed within 35 days.
  • Location. Backups stay on the same host in Finland. Data never leaves the EU for backup.
  • Recovery point. Because the Vita app database is backed up daily, a full restore of it could lose up to about 24 hours of changes.

11Incident response

VitaMedas acknowledges reported security incidents within twenty-four (24) hours. Automated checks (Section 5) alert our team to unusual activity as it happens.

  • Notification of Personal Data Breaches is issued to affected Customer Controllers within seventy-two (72) hours of awareness, in the form required by Article 33(3) GDPR. Where we are the controller, we notify the competent supervisory authority within 72 hours and affected people without undue delay where Article 34 GDPR requires it. For Turkish data subjects, VitaMedas additionally cooperates with the Customer’s obligation under Article 12(5) KVKK.
  • FTC Health Breach Notification Rule. VitaMedas is a vendor of personal health records within the meaning of 16 C.F.R. Part 318. We are not a HIPAA covered entity, and that is precisely why this Rule reaches us: it exists to cover the health records HIPAA does not. On discovering a breach of unsecured individually identifiable health information we will, without unreasonable delay and in no case later than 60 calendar days after discovery, notify each affected US individual and the Federal Trade Commission, and — where 500 or more residents of a State are affected — prominent media serving that State, with the FTC notified within 10 business days in that case. The notice will say what happened, what information was involved, which third parties acquired it, what we are doing, and what you can do. The Rule treats an unauthorised disclosure as a breach, not only a malicious intrusion, so a mistaken disclosure to a partner or an analytics tool would trigger it too. Data in the zero-knowledge vault is encrypted with keys we never hold and is therefore secured within the meaning of the Rule; the Vita assistant’s data is readable by our server, is not, and is the material risk.
  • State breach-notification laws. Every US state has one, most define medical information as triggering data, and several set deadlines shorter than sixty days. We notify to the shortest applicable deadline across all affected jurisdictions rather than running fifty separate clocks, and we notify state Attorneys General where their law requires it.
  • Status page — a public availability and incident-update page is planned. Until it launches, availability and incident notices are communicated by email to affected account holders.
  • Security contact: security@vitamedas.com.

12Vulnerability disclosure

Good-faith security research on VitaMedas is welcome. Researchers are asked to:

  1. report vulnerabilities to security@vitamedas.com;
  2. provide reproduction steps and a reasonable time for VitaMedas to remediate before public disclosure (we aim for 90 days);
  3. avoid degrading service availability or accessing data of any user other than test accounts that the researcher controls.

VitaMedas commits to not pursue legal action against researchers acting in good faith and within the bounds above, irrespective of any contrary provision of the Terms of Service. We do not yet operate a paid bug bounty.

13Limitations and accepted risks

Transparency requires that we name the things this Statement does not protect against:

  • Vita assistant data is readable by us. It is not end-to-end encrypted. A compromise of the app server, or a valid legal order, could expose it. Only the vault has the zero-knowledge guarantee.
  • Backups on the same host. Our backups stay on the same host in Finland. A total loss of that host could affect the live data and the backups at the same time.
  • Lost vault passphrase. VitaMedas cannot recover your vault files if you lose your passphrase and every recovery factor. This is by design — any “recovery” mechanism we held would also be a mechanism by which a hostile party could compel us to recover your data. We will not build such a mechanism.
  • Client-side compromise. A malicious browser extension, hostile operating-system root process, or compromised keyboard can intercept your passphrase before any of our cryptography runs. We recommend a dedicated browser profile (with extensions disabled) for sensitive medical sessions.
  • Endpoint security is the user’s responsibility. We do not run an endpoint protection programme on user devices.
  • Doctor link viewers, by their nature, see decrypted content in their browser; once a record has been viewed, it cannot be un-viewed.
  • Quantum. The cryptographic primitives in use (XChaCha20-Poly1305, Argon2id, X25519, Ed25519) are not post-quantum. We track NIST’s PQC schedule and intend, as a roadmap goal, to migrate to a hybrid X25519 + ML-KEM construction for sharing once a stable, production-grade library implementation of the standard is available.

14Compliance posture

We state our compliance position honestly:

FrameworkStatusTarget
GDPR + UK GDPR + KVKKOperational complianceContinuous
ISO 27001:2022 Annex ANot certified. We use its control families as a reference.Certification is a goal, not a present commitment with a fixed date
NIST CSF 1.1Not certified. We use its functions (identify, protect, detect, respond, recover) as a reference.Continuous self-assessment
SOC 2 Type IINot pursued at this stageWill be reassessed as the customer base grows
HIPAA (US)Not subject — VitaMedas is not a covered entity or business associate under the US definition. Customers operating in the US should not rely on VitaMedas to discharge HIPAA obligations.n/a
FTC Health Breach Notification Rule (16 CFR 318)Breach notification within 60 daysOn discovery
Turkish Health Data Regulation 2019Operational complianceContinuous

We do not claim certifications we do not have. When we obtain a certification, we will publish the certificate and the auditor report summary at this URL and in the audit-letter section of the DPA.

15Penetration testing

VitaMedas intends to commission an external penetration test by a recognised independent third party as the Service and its customer base mature, and to repeat it periodically thereafter. Anticipated scope includes the public web application, the mobile apps, the public API surface, and an authenticated grey-box review of the cryptographic implementation. Where a test has been performed, a redacted summary of findings and remediations is made available to Enterprise Customers under NDA on written request to security@vitamedas.com.

16Sub-processor security review

Before we use a sub-processor, we review its security and data-protection terms: a processing agreement with obligations equivalent to Article 28 where the vendor offers one, its certifications, its cross-border transfer safeguards, and its incident-notification commitments. Where a vendor offers no processing agreement, the sub-processor list says so and we limit what we send to it. VitaMedas may end any sub-processor relationship for material non-compliance. The current list of sub-processors is published at vitamedas.com/legal/subprocessors.

17Personnel and access

  • Production access is limited to a few named people who need it, on a least-privilege basis, through SSH keys. Access is removed when someone no longer needs it.
  • Having a team role grants administration, never reading. The app API has no admin route into another person’s health data. The admin panel is the only place a team member can open a person’s health data, and every such opening is logged.
  • For the vault, production access does not allow anyone to decrypt files. For the Vita assistant, people with production access can technically reach app data; that is why we keep the group small and log admin-panel reads.

18Changes to this Statement

We will update this Security Statement to reflect new controls, improved primitives or operational changes. Material updates that decrease the overall level of protection are notified to Customers at least thirty (30) days before they take effect; we do not anticipate ever issuing such an update. Date and version of the current Statement appear at the head of this page; prior versions are archived and available on request.

Version 2.2 (12 October 2026) corrects earlier text. It did not lower any protection. The earlier text described the vault’s zero-knowledge design as if it covered all data; it now separates the vault from the Vita assistant. It also corrects the hosting location (Helsinki, Finland), the key-derivation parameters, the session lifetimes, the anchoring schedule and the backup description, and removes controls we could not show were in place.

Version 2.5 corrects the backup description again. The Vita app database is copied once a day and each copy is kept for 30 days; the earlier text said seven daily and four weekly copies. The earlier text also said the vault server was copied daily. It now says only what is kept: any copy of the vault server is removed within 35 days.

RStatutory references

Statutory references

  • GDPR Art. 32 · Security of processing — TOMs appropriate to the risk
  • GDPR Art. 33 · Notification of a personal data breach to the supervisory authority — 72 hours
  • GDPR Art. 34 · Communication of a personal data breach to the data subject
  • GDPR Art. 25 · Data protection by design and by default
  • 16 C.F.R. Part 318 · FTC Health Breach Notification Rule
  • ISO 27001:2022 · Annex A — used as a reference; not certified
  • NIST CSF 1.1 · Identify · Protect · Detect · Respond · Recover
  • Sigstore Rekor · Append-only transparency log for tamper-evident audit anchoring
  • EU SCCs · Commission Implementing Decision (EU) 2021/914
  • KVKK Art. 12 · Veri güvenliğine ilişkin yükümlülükler

Questions, requests, or complaints?

VitaMedas is operated by VitaMedas, Inc. (commercial name VitaMedas), 2261 Market Street STE 69554, San Francisco, CA 94114, United States.

Document last updated 4 November 2026 · Version v2.5 · Previous versions available on request.