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

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

Коли ви відкриваєте більшість додатків для відстеження витрат, у фоновому режимі відбувається дещо, чого ви можете навіть не помітити: ваші дані про транзакції, залишки на рахунках та звички витрачання завантажуються на сервери, які ви не контролюєте. Ці сервери можуть розташовуватися будь-де у світі, обслуговуватися командами, яких ви ніколи не зустрічали, та захищатися практиками безпеки, які ви не можете перевірити.
Budgie обирає принципово інший підхід. Ваші фінансові дані ніколи не залишають ваш пристрій. Це не маркетинговий слоган і не спрощене пояснення складнішої реальності. Це буквальний опис того, як додаток працює на рівні коду.
У цій статті ми детально розглянемо, як саме Budgie зберігає ваші фінансові дані поза хмарою. Ми розповімо про архітектуру бази даних, реалізацію шифрування, механізми синхронізації та практики безпеки, які це забезпечують. Якщо ви розглядаєте Budgie і хочете зрозуміти, чому йому можна довіряти, цей посібник дасть вам повну технічну картину.
В основі Budgie лежить локально-орієнтована архітектура, побудована на SQLite — найбільш поширеному рушії баз даних у світі. SQLite працює на мільярдах пристроїв і перевірений на практиці протягом понад двох десятиліть. Це та сама база даних, яка зберігає історію вашого браузера, контакти вашого телефону та безліч інших застосунків, що потребують надійного локального сховища.
Хмарні трекери витрат зазвичай використовують бази даних на кшталт PostgreSQL, MySQL або MongoDB, що працюють на віддалених серверах. Коли ви додаєте транзакцію, вона подорожує через інтернет до дата-центру, обробляється, а потім підтвердження повертається на ваш пристрій. Така архітектура створює кілька проблем:
Залежність від мережі: Ви не можете отримати доступ до своїх даних без підключення до інтернету. Спробуйте додати витрату в метро під землею або в зоні з поганим покриттям — і ви застрягнете.
Затримка: Кожна операція потребує подорожі до сервера й назад. Навіть із швидким з'єднанням це додає помітну затримку до кожної дії.
Відкритість даних: Ваші фінансові дані існують на серверах, які можуть бути зламані, викликані повісткою до суду або доступні для працівників з адміністративними привілеями.
Залежність від сервісу: Якщо компанія закривається, продається або переживає тривалий збій, ваш доступ до власної фінансової історії зникає.
SQLite усуває всі ці проблеми. Файл бази даних знаходиться на вашому пристрої, операції виконуються за мікросекунди, а ваші дані залишаються під вашим фізичним контролем.
Коли ви створюєте транзакцію в Budgie, на технічному рівні відбувається наступне:
Немає фонової синхронізації, що тихо завантажує ваші дані. Немає аналітичної події, що записує, на що ви витратили гроші. Операція починається і закінчується на вашому пристрої.
Файл бази даних SQLite зберігається в захищеній директорії, доступ до якої має лише Budgie. На iOS це ізольована директорія Documents додатка. На Android це внутрішнє сховище додатка, яке інші програми не можуть прочитати.
Багато додатків, які заявляють про повагу до приватності, все одно збирають анонімізовані дані про використання, звіти про збої або аналітичні події. Ці потоки даних можуть розкрити більше, ніж ви могли б очікувати. Навіть без прив'язки вашого імені, патерни використання можуть вас ідентифікувати.
Budgie не містить жодних аналітичних SDK. Ми не використовуємо Firebase Analytics, Mixpanel, Amplitude чи будь-який подібний сервіс. Ми не збираємо звіти про збої через сторонні служби. Ми не записуємо, які функції ви використовуєте, як часто відкриваєте додаток або в яких категоріях витрачаєте гроші.
Це не тому, що нам байдуже до покращення продукту. Нам не байдуже. Але ми обрали збирати зворотний зв'язок через прямі розмови з користувачами та внесок спільноти відкритого коду, а не через інфраструктуру стеження.
Локальне зберігання даних — це перший рівень захисту. Шифрування — другий. Навіть якщо хтось отримає фізичний доступ до вашого пристрою, ваші фінансові дані повинні залишатися нечитабельними без вашого дозволу.
Budgie шифрує вашу базу даних за допомогою AES-256 — того самого стандарту шифрування, який використовується урядами та фінансовими установами по всьому світу. AES-256 ніколи не був зламаний жодною публічно відомою атакою. Спроба грубої сили зламати 256-бітний ключ потребувала б більше енергії, ніж існує у всьому спостережуваному Всесвіті.
Коли ваша база даних зашифрована, файл на диску виглядає як випадкові бінарні дані. Без правильного ключа обчислювально неможливо витягти будь-яку змістовну інформацію.
Ключ шифрування ніколи не залишає ваш пристрій і ніколи не потрапляє на наші сервери, тому що у нас немає серверів, які обробляють дані користувачів. Ось як працює управління ключами:
Деривація ключа: Ваш ключ шифрування генерується з облікових даних вашого пристрою за допомогою стандартних функцій деривації ключів. Це означає, що ключ унікальний для вашого пристрою і не може бути відтворений деінде.
Безпечне зберігання: Згенерований ключ зберігається у платформо-специфічних захищених сховищах. На iOS це Keychain. На Android це Android Keystore, підкріплений апаратними модулями безпеки, коли вони доступні.
Ізоляція ключа: Кожен пристрій має власний ключ шифрування. Не існує майстер-ключа, який міг би розшифрувати всі бази даних користувачів, тому що такий ключ просто не існує.
Захист пам'яті: Ключі зберігаються в пам'яті лише тоді, коли вони потрібні для операцій з базою даних, і очищуються, коли додаток переходить у фоновий режим або закривається.
Ця архітектура означає, що навіть якщо хтось вкраде ваш пристрій, він не зможе прочитати ваші фінансові дані, не скомпрометувавши також безпеку вашого пристрою (розблокувавши його за допомогою біометрії або коду доступу).
Шифрування бази даних захищає ваші дані в кількох сценаріях:
Крадіжка пристрою: Злодій не зможе підключити ваш телефон до комп'ютера і витягти читабельні фінансові дані.
Криміналістичний аналіз: Навіть із використанням складних криміналістичних інструментів зашифрована база даних не може бути змістовно проаналізована без ключа.
Компрометація резервних копій: Якщо резервна копія вашого пристрою буде скомпрометована, зашифрована база даних у ній залишається захищеною.
Видобуток даних додатку: На рутованих або джейлбрейкнутих пристроях, де ізоляцію додатків можна обійти, шифрування все одно захищає дані.
Одне з найпоширеніших запитань щодо офлайн-перших додатків: як мені перенести дані на новий пристрій? Budgie вирішує це через синхронізацію між пристроями без хмарного посередника.
Коли ви хочете перенести дані на новий пристрій, Budgie використовує пряме однорангове з'єднання. Ось як це працює:
Ключовий момент полягає в тому, що жодного разу читабельні фінансові дані не проходять через будь-яку стороннюю інфраструктуру. Навіть тимчасовий ретранслятор, що використовується для виявлення, коли пристрої не в одній мережі, бачить лише зашифровані дані, які він не може інтерпретувати.
Традиційна хмарна синхронізація покладається на центральний сервер як джерело істини при виникненні конфліктів. Якщо ви редагуєте транзакцію на двох пристроях, сервер вирішує, яка версія перемагає.
Budgie використовує інший підхід, заснований на безконфліктних реплікованих типах даних (CRDT) та операційних трансформаціях. Кожна зміна записується як операція з міткою часу та ідентифікатором пристрою. Під час синхронізації:
Це означає, що ви можете використовувати Budgie на кількох пристроях, які періодично синхронізуються, коли знаходяться в одній мережі, і ваші дані зрештою прийдуть до узгодженого стану без втрати даних.
Скажемо прямо про компроміси. Хмарна синхронізація зручніша. Вам не потрібно бути в одній мережі. Вам не потрібно запускати синхронізацію вручну. Зміни поширюються автоматично у фоновому режимі.
Синхронізація між пристроями в Budgie потребує більше залученості користувача. Вам потрібно явно ініціювати синхронізацію, коли ви хочете передати дані. Обидва пристрої повинні бути доступні — або в одній локальній мережі, або обидва підключені до інтернету для рукопотиску через ретранслятор.
Ми вважаємо, що цей компроміс вартий для фінансових даних. Зручність автоматичної хмарної синхронізації обходиться ціною існування ваших даних на серверах, які ви не контролюєте. Для багатьох типів даних такий компроміс прийнятний. Для вашої повної фінансової історії ми вважаємо, що локальний контроль вартий додаткових кроків.
Більшість додатків для відстеження витрат, що пропонують банківську синхронізацію, використовують Plaid, Yodlee або подібні агрегаційні сервіси. Ці сервіси працюють, збираючи ваші банківські облікові дані або OAuth-токени, а потім отримуючи доступ до вашого рахунку від вашого імені. Ваша історія транзакцій проходить через їхні сервери, перш ніж потрапити до вашого додатку.
Budgie обирає інший підхід до імпорту банківських даних.
Найбільш приватний спосіб отримати банківські дані в Budgie — це ручний імпорт. Більшість банків дозволяють завантажити історію транзакцій у стандартних форматах, таких як CSV, OFX або QIF. Ви завантажуєте цей файл безпосередньо з вашого банку, і Budgie імпортує його локально на вашому пристрої.
Жодна третя сторона ніколи не бачить ваші банківські дані. Жодні облікові дані не передаються нікому. Процес виглядає так:
Розбір та категоризація відбуваються повністю на вашому пристрої. Budgie включає розпізнавання шаблонів для поширених форматів транзакцій від основних банків, і ви можете налаштувати правила категоризації, що застосовуються локально.
Ми могли б інтегрувати Plaid. Це було б простіше для нас у реалізації та зручніше для користувачів. Один клік — і ваші транзакції з'являються автоматично.
Але ця зручність супроводжується витратами, які часто невидимі для користувачів:
Збереження даних: Агрегаційні сервіси зберігають вашу історію транзакцій на своїх серверах, іноді безстроково.
Доступ третіх сторін: Ваші банківські дані проходять через інфраструктуру, якою керують компанії, чия бізнес-модель залежить від даних.
Відкритість облікових даних: Деякі сервіси зберігають ваші банківські облікові дані, створюючи цінну мішень для зловмисників.
Регуляторний ризик: Ваші дані підпадають під юрисдикцію та запити органів влади тих країн, де розташовані ці сервери.
Ручний імпорт потребує більше зусиль, але гарантує, що ваші банківські дані мають ті самі гарантії конфіденційності, що й решта Budgie: вони ніколи не залишають ваш пристрій, і жодна третя сторона ніколи не має до них доступу.
Ми досліджуємо варіанти автоматизованого банківського імпорту, які збережуть гарантії конфіденційності. Це може включати локальний аналіз банківських електронних листів, інтеграцію з API відкритого банкінгу, що використовують OAuth без передачі облікових даних, або партнерство з провайдерами фінансових даних, орієнтованими на конфіденційність, які працюють за суворими угодами про обробку даних.
Будь-яке майбутнє рішення збереже наш основний принцип: ваші фінансові дані залишаються на вашому пристрої, зашифровані та під вашим контролем.
Все, що ми описали в цій статті, можна перевірити, вивчивши наш вихідний код. Budgie має відкритий код, і ми вважаємо, що ця прозорість необхідна для будь-якого додатку, що працює з конфіденційними фінансовими даними.
Наш повний вихідний код доступний на GitHub. Ви можете знайти його, відвідавши наш [розділ відкритого коду](/#open-source), де надано посилання на репозиторій.
Репозиторій включає:
Немає приватних репозиторіїв, що містять "справжній" код, який обробляє ваші дані інакше. Те, що ви бачите — це те, що працює на вашому пристрої.
Якщо ви хочете перевірити наші заяви щодо конфіденційності, ось ключові області для вивчення:
Мережевий рівень: Пошукайте будь-які HTTP-клієнти, виклики fetch або з'єднання через сокети. Ви побачите, що використання мережі обмежене:
Рівень бази даних: Вивчіть схеми Drizzle ORM та класи репозиторіїв. Ви можете простежити, як саме дані потрапляють від введення користувача до зберігання в базі — все локально.
Аналітика та відстеження: Пошукайте ініціалізацію будь-яких аналітичних SDK. Ви не знайдете Firebase, Amplitude, Mixpanel чи будь-яку подібну інтеграцію.
Сторонні SDK: Перегляньте дерево залежностей. Ми мінімізуємо зовнішні залежності, і кожна з них ретельно обирається, щоб уникнути бібліотек, що порушують конфіденційність.
Ми запрошуємо дослідників безпеки, захисників конфіденційності та технічно допитливих користувачів перевіряти наш код. Якщо ви знайдете щось, що суперечить нашим заявам про конфіденційність, ми хочемо про це дізнатися.
Ми працюємо над повністю відтворюваними збірками, які дозволять вам самостійно скомпілювати вихідний код і перевірити, що бінарний файл відповідає тому, що розповсюджується через магазини додатків. Це золотий стандарт верифікованого програмного забезпечення, і це є в нашому плані розвитку.
Окрім самої архітектури, те, як ми розробляємо та підтримуємо Budgie, має значення для вашої безпеки.
Кожна залежність у Budgie оцінюється на предмет впливу на конфіденційність перед включенням. Ми свідомо уникаємо:
Це суттєво обмежує наш вибір у порівнянні з розробниками, які не ставлять конфіденційність на перше місце. Але це означає, що ви можете довіряти, що відкриття Budgie не призводить до тихого звітування про вашу активність десятку різних служб збору даних.
Програмне забезпечення з відкритим кодом залежить від ланцюжка залежностей, і будь-яка ланка в цьому ланцюжку може внести вразливості або проблеми з конфіденційністю. Наші практики безпеки включають:
Регулярні аудити залежностей: Ми використовуємо автоматизовані інструменти для пошуку відомих вразливостей у нашому дереві залежностей.
Філософія мінімальних залежностей: Ми надаємо перевагу власній реалізації функціональності над додаванням залежностей, зменшуючи поверхню атаки.
Перевірка коду критичних шляхів: Залежності, що стосуються шифрування, операцій з базою даних або будь-яких чутливих шляхів обробки даних, перевіряються вручну.
Цілісність lock-файлу: Версії залежностей зафіксовані для запобігання атакам через ланцюг постачання через скомпрометовані оновлення пакетів.
Якщо ви виявите вразливість безпеки в Budgie, ми хочемо працювати з вами над її відповідальним виправленням. Контактна інформація для звітів про безпеку доступна в нашому репозиторії. Ми зобов'язуємося:
Ваші дані існують лише на вашому пристрої. Якщо ви загубите телефон, не синхронізувавши дані з іншим пристроєм або не створивши зашифровану резервну копію, ваші дані будуть втрачені. Це компроміс конфіденційності: ми не можемо допомогти вам відновити дані, тому що ми їх не маємо. Ми рекомендуємо регулярне резервне копіювання на ваше власне сховище.
Ми не можемо надати ваші дані правоохоронним органам чи будь-кому іншому, тому що ми їх не маємо. Немає сервера для повістки до суду, немає бази даних для запиту, немає резервної копії для передачі. Ваші дані знаходяться на вашому пристрої, захищені безпекою вашого пристрою та шифруванням Budgie.
Наше шифрування використовує стандартні бібліотечні реалізації AES-256 від платформних фреймворків безпеки (iOS CryptoKit, Android Keystore). Ці реалізації розроблені та перевірені Apple і Google. Наша інтеграція задокументована у коді з відкритим доступом для перегляду спільнотою.
Budgie підтримує експорт вашої повної фінансової історії у стандартних форматах (CSV, JSON). Ви є власником своїх даних і можете забрати їх із собою. Експорт відбувається локально, створюючи файл, який ви можете використовувати з будь-яким іншим додатком.
Ми збираємо анонімізовані звіти про збої через механізми магазинів додатків (App Store Connect для iOS, Google Play Console для Android). Ці звіти не містять фінансових даних. Ми використовуємо їх для виправлення помилок, що спричиняють збої. Жодні інші дані не збираються через будь-який канал.
Наскрізне зашифрована хмарна синхронізація потребувала б серверів для зберігання зашифрованих блобів. Хоча вміст був би зашифрований, метадані все одно були б видимі: коли ви синхронізуєте, скільки даних у вас є, патерни синхронізації, які можуть розкрити звички використання. Синхронізація між пристроями усуває навіть цю метадану.
Ваші фінансові дані розповідають повну історію вашого життя. Де ви живете, де ви робите покупки, що вас цікавить, з якими труднощами ви стикаєтесь, які надії ви плекаєте. Ці дані цінні саме тому, що вони такі відверті.
Budgie існує, тому що ми вважаємо, що вам не потрібно обмінювати цю інтимну інформацію на зручність відстеження витрат. Кожне архітектурне рішення — від SQLite до локального шифрування та синхронізації між пристроями — розроблене для того, щоб ця інформація залишалася там, де їй місце: під вашим контролем.
Ми описали наш підхід у деталях не тому, що вважаємо, що кожному потрібно розуміти архітектури баз даних, а тому, що вважаємо, що ви заслуговуєте знати, що саме додаток робить з вашими конфіденційними даними. Ми запрошуємо вас перевірити наші заяви, вивчити наш код і тримати нас відповідальними за стандарти конфіденційності, які ми встановили.
Щоб дізнатися більше про нашу архітектуру безпеки, відвідайте наш [розділ безпеки](/#security). Щоб переглянути повний вихідний код і перевірити все, що ми описали, завітайте до нашого [розділу відкритого коду](/#open-source).
Готові спробувати трекер витрат, який поважає вашу конфіденційність? [Приєднуйтесь до списку очікування](/#waitlist) і будьте серед перших, хто випробує фінансове управління без стеження.
2025-01-27
Детальний технічний аналіз того, як хмарні бюджетні додатки збирають, поширюють та розкривають ваші фінансові дані через інтеграції з Plaid, витоки даних та агрегацію третіх сторін.
Читати статтю→2025-02-12
Дізнайтеся, чому офлайн-орієнтована архітектура є єдиним способом гарантувати фінансову конфіденційність. Відкрийте приховані небезпеки хмарних додатків та як Budgie захищає ваші дані.
Читати статтю→Приєднайтеся до списку очікування Budgie та станьте першими, хто відчує справді приватний облік витрат.
Приєднатися до списку очікування