Створюючи продукти HealthTech, такі як MigrainePulse, одним із найбільших викликів є забезпечення абсолютної безпеки та конфіденційності конфіденційних даних користувачів. Історія нападів мігрені, прийняті ліки, медичні записи та деталі способу життя – усе це є вкрай особистою інформацією.
З першого дня наша філософія була простою: дані користувачів належать лише їм. Щоб забезпечити це, ми впровадили передову систему симетричного шифрування (англ. Symmetric Key Encryption) в архітектурі MigrainePulse, яка працює разом із ізольованими мікросервісними рішеннями (Cloudflare Workers).
У цій статті ми запрошуємо вас технічно зазирнути під капот і дізнатися, як працюють наші захисні механізми.
Чому стандартних рішень недостатньо?
Більшість додатків сьогодні використовують шифрування під час передачі даних (TLS/SSL) та шифрування в стані спокою (зашифровані бази даних). Однак якщо вся система (база даних та головний сервер, що зберігає ключі шифрування) буде скомпрометована одночасно, дані можуть стати відкритими.
Щоб уникнути цього, в системі MigrainePulse ми відокремили самі дані від ключів, необхідних для їх розшифрування.
Основа архітектури: SymmetricKeyService
У нашій бекенд-системі (використовуючи моноліт NestJS) спеціальний модуль SymmetricKeyService керує шифруванням та дешифруванням конфіденційних даних.
Як це працює на практиці?
Принцип одного ключа: Симетричне шифрування означає, що один і той самий унікальний ключ використовується як для шифрування, так і для дешифрування даних. Кожен користувач має унікальний ключ, призначений йому, якого навіть ми самі не маємо в нашій головній базі даних.
Шифрування корисного навантаження (Payload Encryption): Коли користувач зберігає новий запис про здоров’я (наприклад, додає новий напад мігрені), дані надходять на наш сервер.
SymmetricKeyServiceотримує ці конфіденційні дані, шифрує їх за допомогою передового алгоритму (наприклад,AES-256-GCM) і лише потім зберігає в базі даних. У базі даних зберігається лише безглуздий набір символів.Ідентифікація користувача: Сесія користувача та доступ до даних тісно пов’язані з JWT (
JSON Web Tokens) та автентифікацією Supabase. Користувач підтверджує свою особу, а ключ шифрування, що належить йому, надається лише після верифікова вхід.

Додатковий рівень захисту: Cloudflare Worker
Виникає природне питання – де тоді зберігаються самі ключі шифрування, якщо не в головній базі даних?
Тут нам на допомогу прийшла технологія Cloudflare Workers.
У нашій архітектурі ключі шифрування керуються через повністю ізольовану інфраструктуру, що працює в Edge-мережі. Рішення, описане в документації doc/backend/cloudflare-worker.md, забезпечує, що головний API-сервер і база даних ніколи не зберігають самі ключі в довгостроковій пам’яті.
Переваги інтеграції:
Децентралізація: Оскільки ключі зберігаються та керуються в окремій хмарній інфраструктурі (Cloudflare), потенційному хакеру недостатньо буде скомпрометувати наш головний сервер. Йому потрібно було б одночасно подолати дві абсолютно різні, взаємно ізольовані системи.
Швидкість (Low Latency): Cloudflare Workers працюють у глобальній Edge-мережі (найближчої до користувача), тому запит ключа до них (для авторизованого дешифрування) додає лише мінімальну затримку, зберігаючи продуктивність програми.
Суворий контроль доступу: Worker налаштований так, що віддає ключі лише після отримання правильно підписаних та підтверджених запитів від нашого SymmetricKeyService, перевіряючи всі обмеження CORS та IP.
Підсумок
MigrainePulse – це не просто інструмент для відстеження даних. Це безпечний простір. Поєднуючи надійну архітектуру NestJS (symmetric-key.service.ts) з децентралізацією, яку надають Cloudflare Workers, ми створили систему, в якій особиста інформація користувача залишається заблокованою навіть у найгірших сценаріях.
Для нас «Безпека понад усе» – це не просто влучна фраза для маркетингу – це інженерний фундамент, на якому побудована вся система MigrainePulse. Тому що коли йдеться про здоров’я, немає місця для компромісів щодо конфіденційності.
Маєте питання щодо нашої технічної архітектури? Приєднуйтесь до обговорення в коментарях або спробуйте MigrainePulse самі!
