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 uczciwa odpowiedź Kvit na własne pytanie, razem z ceną.

Ś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 do lokalnej bazy zostaje w Keychain na iOS albo Keystore na Androidzie i nie opuszcza urządzenia. Do chmury idzie wyłącznie szyfrogram, ale klucz do niego przechowujemy my — właśnie dlatego wpisy wracają same na nowym telefonie.
  • Na serwerze w postaci jawnej widać metadane: czas zmiany każdego wpisu, ich liczbę oraz to, czy włączony jest kod PIN.
  • Cena nazwana jest wprost: za automatyczny powrót wpisów płacisz tym, że mamy techniczny dostęp do tego, co zostało wysłane. Nie włączać kopii w chmurze to też realny wybór — wtedy klucz masz wyłącznie Ty.

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”.

Gdzie leży klucz do kopii w chmurze. Tutaj mamy obowiązek zadać sobie to samo pytanie, od którego zaczyna się ten tekst, i odpowiedzieć niewygodnie. Klucz do lokalnej bazy jest na Twoim telefonie i nie jest nam znany: wpisów, które nigdy nie opuściły urządzenia, nie możemy odczytać. Klucz do kopii w chmurze mamy my. Według skali powyżej oznacza to, że kopia chroniona jest szyfrowaniem na serwerze, a nie end-to-end, i że mamy techniczny dostęp do tego, co zostało wysłane.

Mówimy to wprost, bo właśnie takiej odpowiedzi ten tekst każe wymagać od innych aplikacji. Aplikacja, która uczy pytać „gdzie jest klucz”, nie ma prawa sama się uchylić.

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. Nie leży już tam, gdzie leżała.

Obu właściwości naraz mieć się nie da i nie jest to nasza osobliwość, tylko własność samego zadania. Albo aplikacja może przywrócić Ci dostęp — i wtedy technicznie może przeczytać Twoje dane. Albo nie może ani jednego, ani drugiego.

Kvit wybierał wcześniej drugie, a płaciłaś za to Ty: był kod odzyskiwania, który trzeba było zachować, i najczęstszym finałem okazywała się nie kradzież danych, tylko zgubiony kod i utracone wpisy. Kodu już nie ma. Wybraliśmy pierwsze i wzięliśmy klucz do kopii w chmurze na siebie.

Co z tego wynika w praktyce:

  • Nie chcesz, żeby klucz był u nas — nie włączaj kopii w chmurze. Aplikacja działa w pełni lokalnie, a klucz istnieje wtedy wyłącznie na Twoim telefonie. Ten wariant też ma nazwaną cenę: zginie telefon — znikną wpisy.
  • Kopia włączona — zmiana telefonu przestaje być stratą. Logujesz się na nowym i wpisy są na miejscu. Nie trzeba niczego zapisywać z góry ani nic wpisywać.
  • Decyzja nie jest ostateczna. Konto razem z kopią w chmurze usuwa się jednym działaniem, a na telefonie zostają tylko wpisy lokalne.

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, a co jest

W aplikacji nie ma bibliotek reklamowych ani reklam, a dane nie są sprzedawane ani przekazywane brokerom danych.

Analityka w aplikacji jest i trzeba ją nazwać wprost: Kvit korzysta z Google Analytics, żeby widzieć, z których ekranów się korzysta. To pomiar tego, jak używa się aplikacji, a nie tego, co w niej zapisałaś: wpisy są zaszyfrowane kluczem, który zostaje na Twoim telefonie, więc dla Google są nieczytelnym ciągiem.

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?

Jeśli kopia w chmurze była włączona — tak: zaloguj się na nowym telefonie, a wpisy wrócą same, i nie trzeba było niczego zapisywać wcześniej. Jest to możliwe właśnie dlatego, że klucz do kopii przechowujemy my. Jeśli kopii nie włączałaś, wpisy istniały wyłącznie na utraconym telefonie i klucza do nich nie miał nikt poza tym urządzeniem — wtedy nie odtworzy ich nikt.

Czytaj dalej