Tworząc produkty HealthTech, takie jak MigrainePulse, jednym z największych wyzwań jest zapewnienie absolutnego bezpieczeństwa i prywatności wrażliwych danych użytkowników. Historia ataków migrenowych, przyjmowane leki, dokumentacja medyczna i szczegóły dotyczące stylu życia – to wszystko jest wysoce osobistymi informacjami.
Od pierwszego dnia nasza filozofia była prosta: dane użytkowników należą tylko do nich. Aby to zapewnić, wdrożyliśmy zaawansowany system szyfrowania kluczem symetrycznym (ang. Symmetric Key Encryption) w architekturze MigrainePulse, który działa w połączeniu z izolowanymi rozwiązaniami mikrousługowymi (Cloudflare Workers).
W tym artykule zapraszamy do technicznego spojrzenia pod maskę i poznania, jak działają nasze mechanizmy ochrony.
Dlaczego standardowe rozwiązania nie wystarczą?
Większość aplikacji dziś wykorzystuje szyfrowanie podczas transmisji danych (TLS/SSL) oraz szyfrowanie w spoczynku (szyfrowane bazy danych). Jednak jeśli cały system (baza danych i główny serwer przechowujący klucze szyfrowania) zostanie naruszony w tym samym czasie, dane mogą stać się jawne.
Aby tego uniknąć, w systemie MigrainePulse oddzieliliśmy same dane od kluczy potrzebnych do ich odszyfrowania.
Podstawa architektury: SymmetricKeyService
W naszym systemie backend (wykorzystującym monolityczną aplikację NestJS) specjalny moduł SymmetricKeyService zarządza szyfrowaniem i odszyfrowywaniem wrażliwych danych.
Jak to działa w praktyce?
Zasada jednego klucza: Szyfrowanie symetryczne oznacza, że ten sam unikalny klucz jest używany zarówno do szyfrowania, jak i odszyfrowywania danych. Każdy użytkownik ma przypisany unikalny klucz, którego nawet my sami nie mamy w naszej głównej bazie danych.
Szyfrowanie ładunku (Payload Encryption): Gdy użytkownik zapisuje nowy rekord zdrowotny (np. dodaje nowy atak migreny), dane docierają do naszego serwera.
SymmetricKeyServicepobiera te wrażliwe dane, szyfruje je za pomocą zaawansowanego algorytmu (np.AES-256-GCM), a dopiero potem zapisuje w bazie danych. W bazie danych przechowywany jest tylko bezsensowny ciąg znaków.Identyfikacja użytkownika: Sesja użytkownika i dostęp do danych są ściśle powiązane z JWT (
JSON Web Tokens) i uwierzytelnianiem Supabase. Użytkownik potwierdza swoją tożsamość, a przypisany mu klucz szyfrowania jest udostępniany tylko po zweryfikowanym logowaniu.

Dodatkowa warstwa obrony: Cloudflare Worker
Pojawia się naturalne pytanie – gdzie w takim razie przechowywane są same klucze szyfrowania, jeśli nie w głównej bazie danych?
Tutaj z pomocą przyszła nam technologia Cloudflare Workers.
W naszej architekturze klucze szyfrowania są zarządzane poprzez całkowicie izolowaną infrastrukturę działającą w sieci Edge. Rozwiązanie opisane w dokumentacji doc/backend/cloudflare-worker.md zapewnia, że główny serwer API i baza danych nigdy nie przechowują samych kluczy w pamięci długoterminowej.
Korzyści z integracji:
Decentryzacja: Ponieważ klucze są przechowywane i zarządzane w oddzielnej infrastrukturze chmurowej (Cloudflare), potencjalnemu hakerowi nie wystarczyłoby skompromitować naszego głównego serwera. Musiałby jednocześnie pokonać dwa całkowicie różne, wzajemnie izolowane systemy.
Szybkość (Low Latency): Cloudflare Workers działają w globalnej sieci Edge (najbliżej użytkownika), więc żądanie klucza od nich (do autoryzowanego odszyfrowania) dodaje tylko minimalne opóźnienie, zachowując wydajność aplikacji.
Ścisła kontrola dostępu: Worker jest skonfigurowany tak, aby wydawać klucze tylko po otrzymaniu poprawnie podpisanych i zweryfikowanych żądań od naszego SymmetricKeyService, sprawdzając wszystkie ograniczenia CORS i IP.
Podsumowanie
MigrainePulse to nie tylko narzędzie do śledzenia danych. To bezpieczna przestrzeń. Łącząc solidną architekturę NestJS (symmetric-key.service.ts) z decentralizacją zapewnianą przez Cloudflare Workers, stworzyliśmy system, w którym osobiste informacje użytkownika pozostają zablokowane nawet w najgorszych scenariuszach.
Dla nas „Bezpieczeństwo na pierwszym miejscu" to nie tylko pusty frazes marketingowy – to inżynieryjny fundament, na którym zbudowany jest cały system MigrainePulse. Ponieważ gdy mówimy o zdrowiu, nie ma miejsca na kompromisy w kwestii prywatności.
Masz pytania dotyczące naszej architektury technicznej? Dołącz do dyskusji w komentarzach lub wypróbuj sam MigrainePulse!
