← Назад до блогу

Як Budgie зберігає ваші фінансові дані поза хмарою

Технічне занурення в офлайн-орієнтовану архітектуру Budgie: як SQLite, шифрування AES-256 та синхронізація між пристроями забезпечують повну конфіденційність ваших фінансових даних.

конфіденційність
безпека
архітектура
шифрування
відкритий-код
offline-first
10 лютого 2025 р.
15 хв читання
Автор Budgie Team
Як Budgie зберігає ваші фінансові дані поза хмарою

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

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

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

Архітектура: SQLite та локально-орієнтований дизайн

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

Чому SQLite, а не хмарні бази даних

Хмарні трекери витрат зазвичай використовують бази даних на кшталт PostgreSQL, MySQL або MongoDB, що працюють на віддалених серверах. Коли ви додаєте транзакцію, вона подорожує через інтернет до дата-центру, обробляється, а потім підтвердження повертається на ваш пристрій. Така архітектура створює кілька проблем:

Залежність від мережі: Ви не можете отримати доступ до своїх даних без підключення до інтернету. Спробуйте додати витрату в метро під землею або в зоні з поганим покриттям — і ви застрягнете.

Затримка: Кожна операція потребує подорожі до сервера й назад. Навіть із швидким з'єднанням це додає помітну затримку до кожної дії.

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

Залежність від сервісу: Якщо компанія закривається, продається або переживає тривалий збій, ваш доступ до власної фінансової історії зникає.

SQLite усуває всі ці проблеми. Файл бази даних знаходиться на вашому пристрої, операції виконуються за мікросекунди, а ваші дані залишаються під вашим фізичним контролем.

Як працює зберігання даних у Budgie

Коли ви створюєте транзакцію в Budgie, на технічному рівні відбувається наступне:

  1. Додаток валідує введені дані за допомогою схем Zod для забезпечення цілісності даних
  2. Транзакція записується в базу даних SQLite, що зберігається в захищеному сховищі вашого пристрою
  3. База даних використовує Drizzle ORM для типобезпечних операцій
  4. Запис завершується локально без будь-якої мережевої активності

Немає фонової синхронізації, що тихо завантажує ваші дані. Немає аналітичної події, що записує, на що ви витратили гроші. Операція починається і закінчується на вашому пристрої.

Файл бази даних SQLite зберігається в захищеній директорії, доступ до якої має лише Budgie. На iOS це ізольована директорія Documents додатка. На Android це внутрішнє сховище додатка, яке інші програми не можуть прочитати.

Жодної аналітики, жодного відстеження, жодної телеметрії

Багато додатків, які заявляють про повагу до приватності, все одно збирають анонімізовані дані про використання, звіти про збої або аналітичні події. Ці потоки даних можуть розкрити більше, ніж ви могли б очікувати. Навіть без прив'язки вашого імені, патерни використання можуть вас ідентифікувати.

Budgie не містить жодних аналітичних SDK. Ми не використовуємо Firebase Analytics, Mixpanel, Amplitude чи будь-який подібний сервіс. Ми не збираємо звіти про збої через сторонні служби. Ми не записуємо, які функції ви використовуєте, як часто відкриваєте додаток або в яких категоріях витрачаєте гроші.

Це не тому, що нам байдуже до покращення продукту. Нам не байдуже. Але ми обрали збирати зворотний зв'язок через прямі розмови з користувачами та внесок спільноти відкритого коду, а не через інфраструктуру стеження.

Наскрізне шифрування: пояснення

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

Шифрування AES-256 у стані спокою

Budgie шифрує вашу базу даних за допомогою AES-256 — того самого стандарту шифрування, який використовується урядами та фінансовими установами по всьому світу. AES-256 ніколи не був зламаний жодною публічно відомою атакою. Спроба грубої сили зламати 256-бітний ключ потребувала б більше енергії, ніж існує у всьому спостережуваному Всесвіті.

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

Як керуються ключі локально

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

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

Безпечне зберігання: Згенерований ключ зберігається у платформо-специфічних захищених сховищах. На iOS це Keychain. На Android це Android Keystore, підкріплений апаратними модулями безпеки, коли вони доступні.

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

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

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

Від чого захищає шифрування

Шифрування бази даних захищає ваші дані в кількох сценаріях:

Крадіжка пристрою: Злодій не зможе підключити ваш телефон до комп'ютера і витягти читабельні фінансові дані.

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

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

Видобуток даних додатку: На рутованих або джейлбрейкнутих пристроях, де ізоляцію додатків можна обійти, шифрування все одно захищає дані.

Що відбувається при синхронізації між пристроями

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

Архітектура синхронізації між пристроями

Коли ви хочете перенести дані на новий пристрій, Budgie використовує пряме однорангове з'єднання. Ось як це працює:

  1. Виявлення: Обидва пристрої знаходять один одного в локальній мережі або через тимчасовий ретранслятор, який бачить лише зашифровані блоби
  2. Автентифікація: Ви підтверджуєте передачу на обох пристроях, зазвичай порівнюючи візуальний код
  3. Зашифрована передача: База даних передається в зашифрованому вигляді
  4. Локальне дешифрування: Приймаючий пристрій використовує протоколи обміну ключами для встановлення можливості дешифрувати передані дані

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

Вирішення конфліктів без серверів

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

Budgie використовує інший підхід, заснований на безконфліктних реплікованих типах даних (CRDT) та операційних трансформаціях. Кожна зміна записується як операція з міткою часу та ідентифікатором пристрою. Під час синхронізації:

  1. Операції з обох пристроїв обмінюються
  2. Детерміністичний алгоритм злиття об'єднує операції
  3. Обидва пристрої приходять до однакового кінцевого стану без потреби в сервері для арбітражу

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

Компроміс: зручність синхронізації проти конфіденційності

Скажемо прямо про компроміси. Хмарна синхронізація зручніша. Вам не потрібно бути в одній мережі. Вам не потрібно запускати синхронізацію вручну. Зміни поширюються автоматично у фоновому режимі.

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

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

Банківські підключення без Plaid

Більшість додатків для відстеження витрат, що пропонують банківську синхронізацію, використовують Plaid, Yodlee або подібні агрегаційні сервіси. Ці сервіси працюють, збираючи ваші банківські облікові дані або OAuth-токени, а потім отримуючи доступ до вашого рахунку від вашого імені. Ваша історія транзакцій проходить через їхні сервери, перш ніж потрапити до вашого додатку.

Budgie обирає інший підхід до імпорту банківських даних.

Ручний імпорт: варіант з пріоритетом конфіденційності

Найбільш приватний спосіб отримати банківські дані в Budgie — це ручний імпорт. Більшість банків дозволяють завантажити історію транзакцій у стандартних форматах, таких як CSV, OFX або QIF. Ви завантажуєте цей файл безпосередньо з вашого банку, і Budgie імпортує його локально на вашому пристрої.

Жодна третя сторона ніколи не бачить ваші банківські дані. Жодні облікові дані не передаються нікому. Процес виглядає так:

  1. Увійдіть до свого банку безпосередньо в браузері
  2. Завантажте історію транзакцій
  3. Імпортуйте файл у Budgie
  4. Budgie розбирає та категоризує транзакції локально

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

Чому ми обрали конфіденційність, а не зручність

Ми могли б інтегрувати Plaid. Це було б простіше для нас у реалізації та зручніше для користувачів. Один клік — і ваші транзакції з'являються автоматично.

Але ця зручність супроводжується витратами, які часто невидимі для користувачів:

Збереження даних: Агрегаційні сервіси зберігають вашу історію транзакцій на своїх серверах, іноді безстроково.

Доступ третіх сторін: Ваші банківські дані проходять через інфраструктуру, якою керують компанії, чия бізнес-модель залежить від даних.

Відкритість облікових даних: Деякі сервіси зберігають ваші банківські облікові дані, створюючи цінну мішень для зловмисників.

Регуляторний ризик: Ваші дані підпадають під юрисдикцію та запити органів влади тих країн, де розташовані ці сервери.

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

Перспективи на майбутнє

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

Будь-яке майбутнє рішення збереже наш основний принцип: ваші фінансові дані залишаються на вашому пристрої, зашифровані та під вашим контролем.

Відкритий код: перевірте наші заяви самостійно

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

Посилання на репозиторій

Наш повний вихідний код доступний на GitHub. Ви можете знайти його, відвідавши наш [розділ відкритого коду](/#open-source), де надано посилання на репозиторій.

Репозиторій включає:

  • Повний вихідний код React Native додатку
  • Схеми бази даних та файли міграцій
  • Деталі реалізації шифрування
  • Реалізацію протоколу синхронізації
  • Скрипти збірки та конфігурацію CI

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

Як провести аудит коду

Якщо ви хочете перевірити наші заяви щодо конфіденційності, ось ключові області для вивчення:

Мережевий рівень: Пошукайте будь-які HTTP-клієнти, виклики fetch або з'єднання через сокети. Ви побачите, що використання мережі обмежене:

Рівень бази даних: Вивчіть схеми Drizzle ORM та класи репозиторіїв. Ви можете простежити, як саме дані потрапляють від введення користувача до зберігання в базі — все локально.

Аналітика та відстеження: Пошукайте ініціалізацію будь-яких аналітичних SDK. Ви не знайдете Firebase, Amplitude, Mixpanel чи будь-яку подібну інтеграцію.

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

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

Відтворювані збірки

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

Практики безпеки та прозорість

Окрім самої архітектури, те, як ми розробляємо та підтримуємо Budgie, має значення для вашої безпеки.

Жодних сторонніх SDK з відстеженням

Кожна залежність у Budgie оцінюється на предмет впливу на конфіденційність перед включенням. Ми свідомо уникаємо:

  • Аналітичних SDK та SDK для звітів про збої, що збирають дані про поведінку користувачів
  • Рекламних SDK, що створюють профілі користувачів
  • SDK соціального входу, що передають дані провайдерам платформ
  • Будь-яких SDK, що потребують підключення до мережі для базової функціональності

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

Аудит залежностей

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

Регулярні аудити залежностей: Ми використовуємо автоматизовані інструменти для пошуку відомих вразливостей у нашому дереві залежностей.

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

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

Цілісність lock-файлу: Версії залежностей зафіксовані для запобігання атакам через ланцюг постачання через скомпрометовані оновлення пакетів.

Відповідальне розкриття

Якщо ви виявите вразливість безпеки в Budgie, ми хочемо працювати з вами над її відповідальним виправленням. Контактна інформація для звітів про безпеку доступна в нашому репозиторії. Ми зобов'язуємося:

  • Підтвердити отримання звітів про вразливості протягом 48 годин
  • Надавати регулярні оновлення щодо прогресу виправлення
  • Зазначати дослідників, які повідомили про дійсні вразливості (з їхнього дозволу)
  • Не переслідувати юридично добросовісні дослідження безпеки

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

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

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

Чи можуть правоохоронні органи отримати мої дані через Budgie?

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

Чи перевірена реалізація шифрування?

Наше шифрування використовує стандартні бібліотечні реалізації AES-256 від платформних фреймворків безпеки (iOS CryptoKit, Android Keystore). Ці реалізації розроблені та перевірені Apple і Google. Наша інтеграція задокументована у коді з відкритим доступом для перегляду спільнотою.

Як мені експортувати дані, якщо я перестану користуватися Budgie?

Budgie підтримує експорт вашої повної фінансової історії у стандартних форматах (CSV, JSON). Ви є власником своїх даних і можете забрати їх із собою. Експорт відбувається локально, створюючи файл, який ви можете використовувати з будь-яким іншим додатком.

Які дані ви збираєте через магазин додатків?

Ми збираємо анонімізовані звіти про збої через механізми магазинів додатків (App Store Connect для iOS, Google Play Console для Android). Ці звіти не містять фінансових даних. Ми використовуємо їх для виправлення помилок, що спричиняють збої. Жодні інші дані не збираються через будь-який канал.

Чому не використовувати наскрізне зашифровану хмарну синхронізацію?

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

Візьміть контроль над фінансовою конфіденційністю

Ваші фінансові дані розповідають повну історію вашого життя. Де ви живете, де ви робите покупки, що вас цікавить, з якими труднощами ви стикаєтесь, які надії ви плекаєте. Ці дані цінні саме тому, що вони такі відверті.

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

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

Щоб дізнатися більше про нашу архітектуру безпеки, відвідайте наш [розділ безпеки](/#security). Щоб переглянути повний вихідний код і перевірити все, що ми описали, завітайте до нашого [розділу відкритого коду](/#open-source).

Готові спробувати трекер витрат, який поважає вашу конфіденційність? [Приєднуйтесь до списку очікування](/#waitlist) і будьте серед перших, хто випробує фінансове управління без стеження.

Готові взяти під контроль свою фінансову конфіденційність?

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

Приєднатися до списку очікування