Przejdź do treści
Kvit

Czy bezpiecznie jest prowadzić cykl w aplikacji

Redakcja KvitOpublikowano 8 min

Odpowiedź zależy od jednego: gdzie leży klucz szyfrowania. Trzy znaczenia słowa „zaszyfrowane”, co widać na serwerze i jaka jest tego cena.

Świecący klucz po lewej; bloki odlatujące od niego rozsypują się w nieczytelny szum

W skrócie

  • „Zaszyfrowane” oznacza trzy różne rzeczy: szyfrowanie transmisji (HTTPS), szyfrowanie na serwerze i szyfrowanie end-to-end. Gwarantuje coś tylko trzecie.
  • Pytanie, które warto zadać aplikacji, to nie „czy szyfrujecie”, tylko „gdzie leży klucz”. Jeśli klucz ma aplikacja, „nie czytamy” jest obietnicą, a nie mechanizmem.
  • W Kvit klucz 256-bitowy zostaje w Keychain na iOS albo Keystore na Androidzie; do chmury idzie wyłącznie szyfrogram. Jeśli włączysz odzyskiwanie, na serwer trafia jeszcze koperta z kluczem odzyskiwania, którą otwiera tylko Twoje hasło.
  • Na serwerze w postaci jawnej widać metadane: czas zmiany każdego wpisu, ich liczbę oraz to, czy włączony jest kod PIN.
  • Cena tego podejścia nazwana jest wprost: jeśli stracisz telefon i frazę odzyskiwania, kopii w chmurze nie odtworzy nikt, w tym my.

Krótka odpowiedź

Wszystko zależy od jednego: gdzie leży klucz. Jeśli aplikacja szyfruje wpisy kluczem, który przechowuje u siebie, „zaszyfrowane” znaczy tylko „zaszyfrowane przed osobami z zewnątrz” — ale nie przed samą aplikacją. Jeśli klucz zostaje na Twoim telefonie, wpisów nie przeczyta nikt, w tym ci, którzy tę aplikację zrobili.

To dwie różne rzeczy, a słowo „szyfrowanie” ukrywa między nimi różnicę. Dalej — jak tę różnicę zobaczyć samodzielnie, w dowolnej aplikacji, a nie tylko w naszej.

Dlaczego „szyfrujemy dane” nie jest odpowiedzią

Prawie każda aplikacja dziś coś szyfruje i formalnie żadna nie kłamie. Ale pod jednym słowem kryją się trzy różne rzeczy, a tylko trzecia cokolwiek gwarantuje.

  • Szyfrowanie transmisji. Dane są chronione, kiedy lecą z telefonu na serwer. To HTTPS — ma je każda strona, łącznie ze sklepem obuwniczym. Na serwerze dane znów są jawne.
  • Szyfrowanie na serwerze. Dysk albo baza są zaszyfrowane, ale klucz należy do tego, kto ma serwer. To chroni przed kimś, kto wyniósł dysk z centrum danych. Przed właścicielem aplikacji nie chroni w ogóle.
  • Szyfrowanie end-to-end. Dane szyfrowane są na Twoim urządzeniu kluczem, którego aplikacja nie ma. Na serwer trafia szyfrogram, a właściciel serwera nie może go otworzyć nawet wtedy, gdy bardzo chce.

Dwa pierwsze to higiena techniczna. Trzecie to właściwość, której nie da się cofnąć obietnicą.

Trzy rzeczy, które naprawdę mogą się stać

Wpisy o cyklu to dane o zdrowiu. Ryzyko nie jest abstrakcyjne i ma trzy postacie.

  • Dostęp od środka. Jeśli klucz ma aplikacja, wpisy technicznie może przeczytać każdy, kto ma dostęp do bazy. „Nie czytamy” to obietnica, a nie mechanizm.
  • Włamanie. Bazę, którą da się przeczytać od środka, przeczyta też ktoś, kto dostał się do niej bezprawnie. Wycieki danych medycznych zdarzają się co roku i nie są hipotezą.
  • Zmiana właściciela albo zasad. Politykę można przepisać w każdej chwili: aplikacje się sprzedaje, spółki kupuje, jurysdykcje zmieniają. Mechanizmu przepisać nie można: jeśli klucza u nas nie ma, nie ma go również po zmianie właściciela.

Trzeci punkt jest najważniejszy i najmniej oczywisty. Polityka prywatności to zamiar na dziś. Architektura to to, co zostanie jutro.

Pytanie, które warto zadać

Nie „czy szyfrujecie dane” — na to wszyscy odpowiadają „tak”. Pytanie jest jedno: gdzie leży klucz.

I dwa uzupełnienia:

  • Co dokładnie jest zaszyfrowane — całość czy tylko część?
  • Co widać na serwerze w postaci jawnej?

Brak odpowiedzi na drugie pytanie sam jest odpowiedzią. Aplikacja, która rozumie własną architekturę, potrafi wyliczyć te pola z nazwy. Aplikacja, która woli tego nie robić, zwykle ma coś do ukrycia — nie przed napastnikiem, tylko przed Tobą.

Jak to zrobiono w Kvit

Na telefonie. Lokalna baza jest zaszyfrowana w całości. Klucz 256-bitowy jest przechowywany w bezpiecznym magazynie systemu — Keychain na iOS, Keystore na Androidzie — i nie opuszcza urządzenia. To ten sam magazyn, w którym system trzyma hasła i klucze innych Twoich aplikacji — najlepiej chronione miejsce, jakie w ogóle udostępnia programom.

W chmurze. Kopia w chmurze jest opcjonalna: aplikacja działa w pełni również bez niej. Jeśli ją włączysz, wpis szyfrowany jest już na telefonie (AES-256-GCM) i dopiero potem wysyłany. Na serwer trafia wiersz w postaci „identyfikator wpisu, Twój identyfikator, szyfrogram, czas zmiany”.

Dlaczego nie możemy przeczytać Twoich wpisów. Nie dlatego, że obiecujemy nie czytać, tylko dlatego, że nie mamy klucza. To różnica między „nie będziemy” a „nie możemy” — i tylko ona ma znaczenie.

Co jednak widać na serwerze

To najważniejsza część i akurat tej zwykle się nie pisze. W postaci jawnej widać:

  • czas ostatniej zmiany każdego wpisu;
  • ich liczbę;
  • czy włączyłaś logowanie kodem PIN albo biometrią.

Plus jedna rzecz, którą też trzeba nazwać: obecność pliku w magazynie zdjęć dziennika ujawnia sam fakt, że prowadzisz dziennik ciąży. Jego treść pozostaje szyfrogramem.

Czyli serwer widzi, że coś zapisujesz i kiedy. Nie widzi, co. Mówimy to głośno, bo aplikacja twierdząca, że na jej serwerze nie widać zupełnie nic, albo nie rozumie własnej architektury, albo opisuje ją nieściśle.

Punkt 3.2 polityki prywatności opisuje, co leży na serwerze: nieprzejrzysty blob, w którym nie widać ani treści, ani nawet nazw pól. Metadane powyżej to to, co zostaje wokół tego bloba, i nazywamy je tutaj, bo polityka, która kończy się na „nie możemy tego przeczytać”, pomija ciekawszą połowę.

Komu przekazywane są dane

Kvit nie ma własnych serwerów, dlatego dostawcy wymienieni są z nazwy — wszyscy pięciu: Supabase (baza, magazyn plików i uwierzytelnianie; UE, region Irlandia), Qonversion (status subskrypcji, bez danych o zdrowiu), Apple i Google (płatność, zarządzanie subskrypcją i logowanie), Google (Firebase) (techniczne identyfikatory instalacji i dostarczanie powiadomień, gdy są włączone) oraz Cloudflare (hosting stron na kvitcare.com — widzi Twój adres IP, gdy otwierasz tę stronę, i nic z aplikacji).

Wymienienie z nazwy też jest mechanizmem, a nie uprzejmością: skoro dostawca jest nazwany, nie możemy już po cichu dopisać kolejnego. Kto dokładnie co widzi i jak długo to żyje — rozpisane wiersz po wierszu w materiale Kto widzi Twoje wpisy o cyklu.

Cena takiego podejścia

Jest tu cena i lepiej znać ją wcześniej.

Jeśli skonfigurowałaś odzyskiwanie dostępu, na serwer trafia dodatkowo klucz odzyskiwania — w „kopercie” zaszyfrowanej Twoim hasłem odzyskiwania (albo jednorazowym kodem odzyskiwania, jeśli go wygenerowałaś). Bez nich koperta się nie otwiera, a tych danych u nas nie ma. Sam klucz szyfrowania nadal zostaje na urządzeniu: na serwer trafia wyłącznie koperta, której nie potrafimy otworzyć.

Obu właściwości naraz mieć się nie da. Albo aplikacja może przywrócić Ci dostęp — i wtedy może przeczytać Twoje dane. Albo nie może ani jednego, ani drugiego. Wybraliśmy drugie i mówimy o tym, zanim coś stracisz, a nie potem.

Praktyczny wniosek jest jeden: hasło odzyskiwania warto zapisać tam, gdzie trzymasz rzeczy ważne, a nie w notatkach na tym samym telefonie.

Co się stanie, jeśli usuniesz konto

Kolejne pytanie, które warto zadać każdej aplikacji z wyprzedzeniem, bo odpowiedź sprawdza się tylko raz.

W Kvit usunięcie konta kasuje kopię w chmurze. Usunięty wpis znika z aplikacji od razu, a z serwera kasowany jest ostatecznie nie później niż w ciągu 90 dni — ten termin potrzebny jest po to, żeby usunięcie dotarło do Twoich innych urządzeń, a nie „na wszelki wypadek”. Konto można usunąć bez instalowania aplikacji: służy do tego osobna strona.

Lista kontrolna dla dowolnej aplikacji

Pięć pytań, na które odpowiedź powinna być w dokumencie, a nie w opisie w sklepie:

  1. 1.Gdzie przechowywany jest klucz szyfrowania?
  2. 2.Co dokładnie jest zaszyfrowane, a co nie?
  3. 3.Co widać na serwerze w postaci jawnej?
  4. 4.Kto jeszcze otrzymuje dane — i czy jest wymieniony z nazwy?
  5. 5.Co stanie się z danymi po usunięciu konta?

Brak odpowiedzi na którekolwiek z nich też jest odpowiedzią. I jeszcze jedno sprawdzenie, które zajmuje minutę: otwórz politykę prywatności aplikacji i poszukaj słów „partnerzy reklamowi” albo „podmioty powiązane”. Jeśli lista nie jest wymieniona z nazwy, jest otwarta.

Czego w Kvit nie ma

W aplikacji nie ma bibliotek reklamowych, nie zbieramy identyfikatorów reklamowych, aplikacja nie prowadzi analityki zachowań. Dane nie są sprzedawane ani przekazywane brokerom danych, nie ma śledzenia między aplikacjami ani między stronami.

Jeszcze jeden szczegół, który warto znać: prognoza cyklu to informacja dla Ciebie, a nie decyzja o Tobie. Kvit nie podejmuje wobec Ciebie zautomatyzowanych decyzji wywołujących skutki prawne i polityka mówi to wprost.

Czego to nie oznacza

Na koniec granica, którą też trzeba nazwać. Szyfrowanie end-to-end chroni dane na serwerze. Nie chroni przed kimś, kto wziął do ręki odblokowany telefon, i nie czyni aplikacji wyrobem medycznym.

Kvit to aplikacja wspierająca samopoczucie. Nie diagnozuje, nie zastępuje lekarza i nie jest środkiem antykoncepcyjnym. O tym, jak liczy i gdzie są granice jej prognozy — w materiale Jak naprawdę liczy się owulację.

Częste pytania

Czy twórcy aplikacji mogą przeczytać moje wpisy o cyklu?

Zależy od tego, gdzie przechowywany jest klucz szyfrowania. Jeśli klucz ma aplikacja, twórcy technicznie mogą przeczytać wpisy, a „nie czytamy” pozostaje obietnicą. Jeśli klucz przechowywany jest wyłącznie na Twoim urządzeniu — w Keychain na iOS albo Keystore na Androidzie — nie przeczyta ich nikt, łącznie z twórcami, bo klucza po prostu nie mają.

Co widać na serwerze, jeśli dane są szyfrowane na telefonie?

Treści wpisów nie widać — na serwer trafia szyfrogram. Ale w postaci jawnej zostają metadane: czas ostatniej zmiany każdego wpisu, ich liczba oraz to, czy włączony jest kod PIN. Obecność pliku w magazynie zdjęć dziennika ujawnia sam fakt prowadzenia dziennika ciąży, choć jego treść pozostaje zaszyfrowana.

Czym szyfrowanie end-to-end różni się od „szyfrujemy dane”?

Szyfrowanie transmisji (HTTPS) chroni dane tylko w drodze na serwer, gdzie znów są jawne. Szyfrowanie na serwerze chroni dysk, ale klucz należy do właściciela serwera. Szyfrowanie end-to-end oznacza, że dane szyfrowane są na Twoim urządzeniu kluczem, którego aplikacja nie ma — i właściciel serwera nie może ich otworzyć nawet wtedy, gdy bardzo chce.

Co stanie się z moimi danymi po usunięciu konta?

Usunięcie konta kasuje kopię w chmurze. Usunięty wpis znika z aplikacji od razu, a z serwera kasowany jest ostatecznie nie później niż w ciągu 90 dni — ten termin jest po to, żeby usunięcie dotarło do Twoich innych urządzeń. Konto można usunąć bez instalowania aplikacji, z osobnej strony na stronie internetowej.

Czy da się odzyskać dane po utracie telefonu i frazy odzyskiwania?

Nie. Jeśli włączyłaś odzyskiwanie dostępu, na serwerze leży koperta z kluczem odzyskiwania, zaszyfrowana Twoim hasłem odzyskiwania albo jednorazowym kodem — bez nich się nie otwiera, a tych danych u nas nie ma. Sam klucz szyfrowania nadal zostaje na urządzeniu. To bezpośredni skutek tego, że klucza nigdy u nas nie było: aplikacja, która może przywrócić Ci dostęp, może też przeczytać Twoje dane.

Czytaj dalej