Перейти до вмісту
Квіт

Чи безпечно вести цикл у додатку

Редакція КвітуОпубліковано 8 хв

Відповідь залежить від одного: де лежить ключ шифрування. Три види шифрування, що видно на сервері, чого ми не можемо прочитати — і яка в цього ціна.

Світний ключ ліворуч; блоки, що відлітають від нього, розсипаються в нерозбірливий шум

Коротко

  • «Зашифровано» означає три різні речі: шифрування каналу (HTTPS), шифрування на сервері і наскрізне шифрування. Гарантує щось лише третє.
  • Питання, яке варто ставити застосунку, — не «чи ви шифруєте», а «де лежить ключ». Якщо ключ у застосунку, «ми не читаємо» — це обіцянка, а не механізм.
  • У Квіті 256-бітний ключ лишається у Keychain на iOS або Keystore на Android; у хмару йде лише шифротекст. Якщо ти налаштувала відновлення, на сервер додається ще «конверт» із ключем відновлення, який відкриває тільки твоя парольна фраза.
  • На сервері у відкритому вигляді все ж видно метадані: час зміни кожного запису, їх кількість і те, чи увімкнено PIN-код.
  • Ціна цього підходу названа прямо: якщо втрачено і телефон, і фразу відновлення, хмарну копію не відновить ніхто, включно з нами.

Коротка відповідь

Залежить від однієї речі — де лежить ключ. Якщо застосунок шифрує записи ключем, який зберігає в себе, «зашифровано» означає лише «зашифровано від когось стороннього», але не від самого застосунку. Якщо ключ лишається на твоєму телефоні, прочитати записи не може ніхто — включно з тими, хто цей застосунок зробив.

Це дві різні речі, і слово «шифрування» приховує між ними різницю. Далі — як цю різницю побачити самій, у будь-якому застосунку, а не лише в нашому.

Чому «ми шифруємо дані» не є відповіддю

Майже кожен застосунок сьогодні шифрує дані, і формально не бреше. Але під одним словом ховаються три різні речі, і лише третя щось справді гарантує.

  • Шифрування каналу. Дані захищені, поки летять від телефона до сервера. Це HTTPS — його має будь-який сайт, включно з крамницею взуття. На сервері дані знову у відкритому вигляді.
  • Шифрування на сервері. Диск або база зашифровані, але ключ у того ж, хто володіє сервером. Це захищає від того, хто виніс диск із дата-центру. Від власника застосунку не захищає ніяк.
  • Наскрізне шифрування. Дані шифруються на твоєму пристрої ключем, якого в застосунку немає. На сервер потрапляє шифротекст, і власник сервера не може його розкрити навіть тоді, коли дуже хоче.

Перші два — це технічна гігієна. Третє — властивість, яку не можна скасувати обіцянкою.

Три речі, які справді можуть статися

Записи про цикл — це дані про здоров’я. Ризик тут не абстрактний, і він трьох видів.

  • Доступ ізсередини. Якщо ключ у застосунку, записи технічно може прочитати той, хто має доступ до бази. «Ми не читаємо» — це обіцянка, а не механізм.
  • Злам. База, яку можна прочитати ізсередини, читається і тим, хто отримав доступ незаконно. Кількість витоків медичних даних щороку — не гіпотеза.
  • Зміна власника або правил. Політику можна переписати будь-коли: застосунок продають, компанію купують, юрисдикція змінюється. Механізм переписати не можна: якщо ключа немає, його немає й після зміни власника.

Третій пункт найважливіший і найменш очевидний. Політика приватності — це намір на сьогодні. Архітектура — це те, що лишиться завтра.

Питання, яке варто ставити

Не «чи ви шифруєте дані» — на це відповідають «так» усі. Питання одне: де лежить ключ.

І два уточнення до нього:

  • Що саме зашифровано — усе, чи лише частина?
  • Що видно на сервері у відкритому вигляді?

Якщо на друге питання відповіді немає — це вже відповідь. Застосунок, який знає свою архітектуру, може назвати перелік полів. Застосунок, який не хоче його називати, зазвичай має що приховувати не від зловмисника, а від тебе.

Як це зроблено в Квіті

На телефоні. Локальна база зашифрована повністю. 256-бітний ключ зберігається в захищеному сховищі системи — Keychain на iOS, Keystore на Android — і пристрій не покидає. Це те саме сховище, у якому система тримає паролі й ключі твоїх власних застосунків — найзахищеніше, що вона взагалі пропонує стороннім програмам.

У хмарі. Хмарна копія необов’язкова: застосунок повністю працює й без неї. Якщо ти її увімкнула, запис шифрується безпосередньо на телефоні (AES-256-GCM) і лише потім вивантажується. На сервер потрапляє рядок виду «ідентифікатор запису, твій ідентифікатор, шифротекст, час зміни».

Чому ми не можемо прочитати твої записи. Не тому, що обіцяємо не читати, а тому, що не маємо ключа. Це різниця між «не будемо» і «не можемо», і вона єдина, що має значення.

Що на сервері все ж видно

Це найважливіша частина, і саме її зазвичай не пишуть. У відкритому вигляді видно:

  • час останньої зміни кожного запису;
  • їхня кількість;
  • чи ти увімкнула вхід за PIN-кодом або біометрією.

Плюс одна річ, яку теж треба назвати: наявність файлу в сховищі фото щоденника показує сам факт, що ти ведеш щоденник вагітності. Його вміст лишається шифротекстом.

Тобто сервер бачить, що ти щось записуєш і коли. Він не бачить, що саме. Ми називаємо це вголос, бо застосунок, який стверджує, що на сервері не видно взагалі нічого, або не розуміє власної архітектури, або описує її неточно.

Розділ 3.2 політики приватності описує, що саме лежить на сервері: непрозорий блоб, у якому не видно ні вмісту, ні навіть назв полів. Метадані вище — це те, що лишається навколо цього блоба, і ми називаємо їх тут, бо політика, яка зупиняється на «ми не можемо це прочитати», лишає за кадром цікавішу половину.

Кому передаються дані

Власних серверів у Квіта немає, тому постачальники названі поіменно — усі п’ять: Supabase (база, сховище та авторизація; ЄС, регіон Ірландія), Qonversion (статус підписки, без даних про здоров’я), Apple і Google (оплата, керування підпискою й вхід), Google (Firebase) (технічні ідентифікатори встановлення й доставка сповіщень, коли вони увімкнені) і Cloudflare (розміщення сторінок на kvitcare.com — бачить IP-адресу, коли ти відкриваєш цей сайт, і нічого з застосунку).

Поіменний перелік — це теж механізм, а не ввічливість: назвавши постачальника, ми позбавляємо себе можливості тихо додати ще одного. Хто саме що бачить і скільки це живе — розібрано по рядках у матеріалі Хто бачить твої записи.

Ціна такого підходу

Тут є ціна, і про неї краще знати заздалегідь.

Якщо ти налаштувала відновлення доступу, на сервер додатково лягає ключ відновлення — у «конверті», зашифрованому твоєю парольною фразою відновлення (або одноразовим кодом відновлення, якщо ти його згенерувала). Без них конверт не відкривається, а цих даних у нас немає. Сам ключ шифрування при цьому так само лишається на пристрої: на сервер потрапляє тільки конверт, який ми відкрити не можемо.

Обидві властивості одночасно мати неможливо. Або застосунок може відновити тобі доступ — і тоді він може прочитати твої дані. Або не може ні того, ні іншого. Ми вибрали друге й кажемо про це до того, як ти щось втратиш, а не після.

Практичний висновок один: парольну фразу відновлення варто зберегти там, де ти зберігаєш важливе, а не в нотатках на тому самому телефоні.

Що станеться, якщо видалити акаунт

Ще одне питання, яке варто ставити будь-якому застосунку заздалегідь, бо відповідь на нього перевіряється лише один раз.

У Квіті видалення акаунта стирає хмарну копію. Видалений запис одразу зникає із застосунку, а з сервера остаточно стирається не пізніше ніж за 90 днів — цей строк потрібен, щоб видалення дійшло до інших твоїх пристроїв, а не «про всяк випадок». Видалити акаунт можна, не встановлюючи застосунок: для цього є окрема сторінка.

Чекліст для будь-якого застосунку

П’ять питань, на які відповідь має бути в документі, а не в описі в сторі:

  1. 1.Де зберігається ключ шифрування?
  2. 2.Що саме зашифровано, а що ні?
  3. 3.Що видно на сервері у відкритому вигляді?
  4. 4.Хто ще отримує дані — і чи названі вони поіменно?
  5. 5.Що станеться з даними, якщо видалити акаунт?

Відсутність відповіді на будь-яке з них — це теж відповідь. І ще одна перевірка, яка займає хвилину: відкрий політику приватності застосунку й пошукай слово «рекламні партнери» або «афілійовані особи». Якщо перелік не названий поіменно, він відкритий.

Чого в Квіті немає

Рекламних бібліотек у застосунку немає, рекламних ідентифікаторів ми не збираємо, аналітики поведінки застосунок не веде. Дані не продаються й не передаються брокерам даних, і відслідковування між застосунками та сайтами немає.

Ще одна деталь, яку варто знати: прогноз циклу — це інформація для тебе, а не рішення про тебе. Автоматизованих рішень із юридичними наслідками щодо тебе Квіт не приймає, і в політиці це сказано прямо.

Що це не означає

Наостанок — межа, яку теж треба назвати. Наскрізне шифрування захищає дані на сервері. Воно не захищає від того, хто взяв до рук розблокований телефон, і не робить застосунок медичним виробом.

Квіт — застосунок для самопочуття. Він не діагностує, не заміняє лікаря й не є засобом контрацепції. Про те, як він рахує й де межі його прогнозу, — у матеріалі Як рахують овуляцію.

Часті питання

Чи можуть розробники застосунку прочитати мої записи про цикл?

Залежить від того, де зберігається ключ шифрування. Якщо ключ у застосунку, розробники технічно можуть прочитати записи, і «ми не читаємо» лишається обіцянкою. Якщо ключ зберігається лише на твоєму пристрої — у Keychain на iOS або Keystore на Android — прочитати їх не може ніхто, включно з розробниками, бо ключа в них просто немає.

Що видно на сервері, якщо дані зашифровані на телефоні?

Вміст записів не видно — на сервер потрапляє шифротекст. Але у відкритому вигляді лишаються метадані: час останньої зміни кожного запису, їх кількість і те, чи увімкнено PIN-код. Наявність файлу у сховищі фото щоденника показує сам факт ведення щоденника вагітності, хоча його вміст лишається зашифрованим.

Чим наскрізне шифрування відрізняється від «шифрування даних»?

Шифрування каналу (HTTPS) захищає дані лише поки вони летять до сервера — там вони знову у відкритому вигляді. Шифрування на сервері захищає диск, але ключ належить власнику сервера. Наскрізне шифрування означає, що дані шифруються на твоєму пристрої ключем, якого в застосунку немає, — і власник сервера не може їх розкрити навіть тоді, коли дуже хоче.

Що станеться з моїми даними, якщо я видалю акаунт?

Видалення акаунта стирає хмарну копію. Видалений запис одразу зникає із застосунку, а з сервера остаточно стирається не пізніше ніж за 90 днів — цей строк потрібен, щоб видалення дійшло до інших твоїх пристроїв. Видалити акаунт можна, не встановлюючи застосунок: для цього є окрема сторінка на сайті.

Чи можна відновити дані, якщо я втратила телефон і фразу відновлення?

Ні. Якщо ти налаштувала відновлення доступу, на сервері лежить «конверт» із ключем відновлення, зашифрований твоєю парольною фразою або одноразовим кодом, — і без них він не відкривається, а цих даних у нас немає. Сам ключ шифрування так само лишається на пристрої. Це прямий наслідок того, що ключа в нас ніколи не було: застосунок, який може відновити тобі доступ, може й прочитати твої дані.

Читати далі