Bezpečnost a tok dat
Kde vaše data leží, co je zašifrované, jak je ověřené a omezené připojení AI, co Assetli loguje, co vidí poskytovatel AI a co zatím neumíme.
Naposledy aktualizováno: 30. října 2026
Tahle stránka je psaná pro technicky zdatného a skeptického čtenáře. Každé tvrzení níže bylo ověřeno proti kódu aplikace k datu uvedenému výše. Co je omezení a ne funkce, najdete v kapitole Co zatím neumíme, označené jako plánované.
Shrnutí
Dvě navazující stránky jdou hlouběji: Kdo zpracovává vaše data vypisuje každou třetí stranu a co dostane, Jak dlouho se data uchovávají uvádí dobu uchování každého záznamu.
- Assetli se nikdy nepřipojuje k vaší bance a nedrží přihlašovací údaje do bankovnictví. Data přicházejí importem souboru, ručním zadáním, nebo volitelnou synchronizací z Wallet by BudgetBakers pomocí tokenu té aplikace.
- Přiložené soubory leží v soukromém úložišti v EU bez veřejné adresy a zobrazí se jen přihlášenému vlastníkovi.
- Kdo má zapnuté dvoufaktorové ověření, zadává kód při každém přihlášení heslem. Po přihlášení přes Google nebo Apple se kód Assetli nechce, ověření tam řeší váš účet Google nebo Apple. Tlačítko Odhlásit ze všech zařízení ukončí všechna přihlášení včetně mobilní aplikace a propojení s AI.
- Připojení AI stojí na OAuth 2.1 s PKCE, souhlasnou obrazovkou, krátce platnými tokeny uloženými jako otisk, jedním profilem na konektor a odděleným oprávněním ke čtení a k zápisu. Zápis vyžaduje placený tarif.
- Vaše konverzace s AI se k Assetli nedostane. Server dostane jen volání nástrojů. Čtení se nelogují, zápisy se logují 12 měsíců.
- Na API ani v mobilních aplikacích (Android i iPhone) neběží žádná knihovna třetí strany pro sledování chyb ani analytiku. Google Analytics a Microsoft Clarity se na webových stránkách načtou až po souhlasu s cookies a provoz API nikdy nevidí; Vercel Web Analytics počítá zobrazení stránek na webu a v dashboardu bez cookies.
Kde data leží
| Co | Kde |
|---|---|
| Aplikace a API | Vercel, frankfurtský region (fra1) |
| Databáze | MongoDB Atlas, frankfurtský region (EU) |
| Přiložené soubory (fotografie, dokumenty, účtenky) | Cloudflare R2, soukromé úložiště s jurisdikcí EU (objekty leží v EU), bez veřejné adresy. Soubor se zobrazí jen přihlášenému vlastníkovi: server ověří přihlášení a vlastnictví záznamu v aktivním profilu a pak vydá podepsaný odkaz platný nejvýš 15 minut, nebo soubor pošle sám (náhled na webu, fotky cenností). Odkaz sám přihlášení nevyžaduje, proto platí jen krátce. Soubory nahrané dřív jsme 30. 10. 2026 přesunuli do EU a původní kopie smazali. Ikony předplatných a rozpočtů a dočasné soubory jsou ve Vercel Blob. Výpisy k importu se neukládají vůbec |
| Veřejná referenční data (ceníky, statistiky) | Cloudflare R2, samostatné veřejné úložiště (žádné soubory uživatelů) |
| Záloha databáze | Archiv z mongodump zašifrovaný AES-256 (s ověřením, že jde dešifrovat), uložený na vlastním počítači provozovatele v Česku; plánovaný každou noc. Zálohy starší 30 dní se mažou, posledních 7 záloh ale zůstává vždy, i když jsou starší. Druhá kopie, zašifrovaná ještě předtím, než opustí server sestavení, se ukládá jako artefakt GitHub Actions na 30 dní, jen když tam úloha běží (od 21. 10. 2026 neběží). Noční záloha teď selhává, viz Co zatím neumíme |
| Měnové kurzy | Stahují se z frankfurter.app (kurzy ECB). Dotaz nese jen kódy měn |
| Platby | Stripe. Údaje o kartě se k Assetli nedostanou |
Přihlášení do Assetli
- E-mailem a heslem. Hesla se ukládají jako otisk algoritmem bcrypt.
- Přihlášení přes Google nebo Apple (OAuth), v aplikaci pro telefon i nativně.
- Volitelné dvoufaktorové ověření aplikací TOTP se záložními kódy. Když je zapnuté, chce se kód (z autentizátoru, nebo záložní) při každém přihlášení heslem, na webu i v aplikaci, a při vstupu do administrace provozovatele.
- Po přihlášení přes Google nebo Apple se kód Assetli nechce, na webu ani v aplikaci. Ověření tam řeší váš účet Google nebo Apple (přístupový klíč neboli passkey, jejich dvoufázové ověření; Apple ho pro přihlášení přes Apple vyžaduje). Doporučujeme si tam zapnout dvoufázové ověření nebo přístupový klíč.
- Tajemství pro TOTP je zašifrované, tentýž kód nejde použít dvakrát a záložní kód projde jen jednou.
- Po 5 neúspěšných pokusech během 15 minut se účet na 15 minut uzamkne; počítají se i špatné kódy dvoufaktorového ověření, ať je zadáte při přihlášení, v aplikaci, nebo v Nastavení (vypnutí ověření, nové záložní kódy).
- Relace drží cookie s příznakem HTTP-only, vydává ji knihovna Auth.js; platí 7 dní od posledního použití.
- Odhlásit ze všech zařízení (Nastavení na webu i v aplikaci) ukončí všechny webové relace, odvolá tokeny mobilní aplikace, doplňku Google Sheets a všech propojení s AI (MCP) a smaže registrace upozornění na telefon. Totéž proběhne samo po obnově hesla. Po zapnutí nebo vypnutí dvoufaktorového ověření se odhlásí ostatní zařízení a přihlášení zůstane jen tam, kde jste změnu provedli. Ostatní instance serveru změnu převezmou nejpozději do 30 sekund.
- E-maily o zabezpečení přijdou po přihlášení z nového zařízení, po obnově hesla a po vypnutí dvoufaktorového ověření. Zařízení se pozná podle druhu, prohlížeče a systému bez verzí a bez IP adresy; v databázi je jen jejich otisk. E-mail uvádí zařízení, přibližnou zemi, čas a způsob přihlášení. Tyto e-maily nejdou odhlásit.
- Administrace pustí provozovatele jen s dvoufaktorovým ověřením zadaným v téže relaci a každý přístup zapíše do auditního záznamu (viz Logování níže).
Šifrování
- Veškerý provoz běží přes HTTPS.
- Šifrování na úrovni polí algoritmem AES-256-GCM (verzovaný zápis, náhodný inicializační vektor, autentizační značka) chrání: číslo účtu, IBAN a poznámky u bankovních účtů, token pro Wallet by BudgetBakers, tajemství dvoufaktorového ověření, vaše vlastní API klíče pro poskytovatele AI, poznámky Family Legacy a platební údaje členů skupin sdílených výdajů (číslo účtu nebo IBAN, název a kód banky, adresa kryptopeněženky; veřejný odkaz skupiny je nedostane vůbec). Zašifrovaná pole se nedají prohledávat dotazem do databáze a dešifrují se až při zobrazení záznamu. Šifrovaně se ukládá i obnovovací token přihlášení přes Apple, identifikátory nákupů z Google Play a vaše tajná adresa pro import e-mailem.
- Přístupové a obnovovací tokeny OAuth, autorizační kódy a API klíče se ukládají jako otisk SHA-256. Čitelná podoba existuje pouze ve vašem klientovi. Stejně tak tokeny z odkazů pro obnovu hesla a ověření e-mailu: v databázi je jen otisk, čitelný odkaz je jen v e-mailu a každý jde použít jednou.
Připojení AI krok za krokem
Tohle se stane, když se Claude, ChatGPT nebo Gemini zeptáte na něco, co potřebuje vaše data.
- Váš klient zavolá
POST /api/mcps tělem JSON-RPC, tedy s názvem nástroje a jeho argumenty. Nic dalšího z konverzace se neodesílá. - Middleware požadavek propustí. Na téhle cestě není heslo pro celý web a neloguje se tělo požadavku.
- Ověření tokenu. Token z hlavičky
Authorization: Bearerse zahashuje a vyhledá v databázi. Musí existovat, být neexpirovaný (1 hodina), nezrušený, a jeho příjemce musí sedět na hostitele. Ze záznamu se získá vaše ID uživatele, profil zvolený při souhlasu, oprávnění a ID klienta. - Oprávnění, tarif a token z náhledu. Každý nástroj zápisové kategorie, včetně náhledů (
prepare_*), vyžaduje oprávněníwritea tarif Premium nebo Max. Bez oprávněníwritese zápisové nástroje klientovi nenabídnou a volání skončí chybouSCOPE_REQUIRED. S oprávněnímwritese nabídnou i na tarifu Free, aby zápis po přechodu na Premium fungoval hned, ale každé volání bez tarifu Premium nebo Max skončí chybouTIER_FEATUREa nic se neprovede. Kontrola tarifu běží při každém volání, ne ve výpisu nástrojů; platí proto i po konci zkušebního období. Zápis navíc musí nést potvrzovací token, který vydal jeho náhledový nástroj pro tytéž argumenty v posledních deseti minutách; bez něj, nebo s jinými argumenty, se zápis odmítne. - Spuštění nástroje. Obsluha se dotáže MongoDB s filtrem na vašeho uživatele a profil. Výsledky se poskládají do pevně dané sady polí.
- Audit (jen u zápisů). Název nástroje, ID klienta, výsledek a shrnutí argumentů se uloží do kolekce
mcp_audit_logss expirací po 365 dnech. Částky, kategorie, symboly, data a názvy cílů zůstávají; volný text (popisy, poznámky, obchodník, obsah výpisu) se ukládá jen jako délka, obsah výpisu navíc jako otisk. Samotný záznam nese původ (createdVia: MCP a ID konektoru) — u transakcí, obchodů, odečtů, cenností, rozpočtů a pravidel kategorizace — a seznamy transakcí, obchodů, odečtů, cenností a rozpočtů ho označí štítkem „AI“, jehož popisek uvádí kanál a nástroj. Akce, které mění existující záznamy místo založení nového (spárování převodu, použití pravidla, přesun mezi obálkami, potvrzení zůstatku), zůstávají v auditním logu. - Odpověď. Výsledek v JSON se vrátí klientovi, který ho předá modelu.
Co Assetli vidí a co ne
| Vidí Assetli? | |
|---|---|
| Váš dotaz a odpovědi modelu | Ne. Zůstávají v AI klientovi. |
| Název nástroje a argumenty | Ano, po dobu zpracování požadavku. |
| Argumenty zápisových volání | Ano, jako shrnutí bez volného textu, v auditním logu na 12 měsíců. |
| Argumenty čtecích volání | Neukládají se. |
| Výsledky nástrojů | Spočítají se a vrátí, neukládají se. |
| Identita klienta | Registrovaný název konektoru a jeho ID. V běžných provozních logech hostingu také IP adresa a identifikace prohlížeče serveru AI klienta. |
Věta „vidíme jen to, co při klikání v aplikaci” platí přesně u čtení. U zápisu si Assetli nechává o něco víc než při kliknutí na webu, totiž auditní záznam.
Co vidí poskytovatel AI
Poskytovatel, který provozuje váš model (Anthropic u Claude, OpenAI u ChatGPT, Google u Gemini), vidí vaše dotazy, výsledky nástrojů, a tedy i každé číslo, které nástroj vrátí. S těmi daty se nakládá podle podmínek daného poskytovatele, ne podle podmínek Assetli. Nástroje vracejí táž data, jaká vidíte v aplikaci: zůstatky, transakce s popisem a obchodníkem, pozice, hodnoty a adresy nemovitostí, registrační značky vozidel, dluhy. Nikdy nevracejí čísla účtů, IBAN, hesla, tokeny ani data jiných uživatelů.
Asistent v aplikaci funguje jinak. Tam posílá vaše zprávy a finanční snímek Anthropicu (nebo poskytovateli, jehož klíč jste zadali) samotné Assetli a konverzaci ukládá k vašemu profilu. Viz AI asistent.
Rozsah tokenu
- Jeden uživatel, jeden profil. Token nese profil, který jste zvolili při souhlasu. Konektor profily přepínat nemůže.
- Čtení, nebo zápis. Uděluje se na souhlasné obrazovce, zápis zahrnuje čtení. Server oprávnění kontroluje při každém volání.
- Vázaný na příjemce. Token vydaný pro
assetli.appkterýkoli jiný hostitel odmítne. - Krátce platný. Přístupový token 1 hodinu, obnovovací 60 dní a při každém obnovení se vymění za nový.
- Odvolatelný. Nabídka účtu (vpravo nahoře) → Připojení AI (MCP) vypíše každý konektor a po potvrzení najednou zruší všechny jeho tokeny. Odhlásit ze všech zařízení v Nastavení zruší tokeny všech konektorů naráz.
- Bez sdílení tajemství. Klienti jsou veřejní OAuth klienti s PKCE, žádné klientské tajemství neexistuje a vaše heslo Assetli nikdy neopustí.
- Jen endpoint MCP. Token konektoru třetí strany přijímá
/api/mcpa nic jiného. REST API přijímá Bearer tokeny jen od vlastní mobilní aplikace.
Tentýž OAuth server vydává tokeny i aplikaci Assetli pro Android a iPhone, která je zatím v uzavřeném testování a není veřejně dostupná. Přihlásit se v ní jde e-mailem a heslem, přes Google nebo Apple přímo v aplikaci, nebo v systémovém prohlížeči; heslo i kód dvoufaktorového ověření ověřuje tatáž funkce jako na webu, včetně blokace pokusů (u účtu s dvoufaktorovým ověřením chce aplikace kód po přihlášení heslem; po přihlášení přes Google nebo Apple ne, tam ověření řeší účet Google nebo Apple), a tokeny vydává tatáž funkce jako /api/oauth/token (přístupový 1 hodina, obnovovací 60 dní). Souhlasnou obrazovku aplikace přeskočí, protože je naše. Tokeny drží v zabezpečeném úložišti telefonu (Android Keystore, na iPhonu Klíčenka) a odvolat je jde na téže stránce Připojení AI (MCP) nebo tlačítkem Odhlásit ze všech zařízení.
Logování
Co se zapisuje a kam:
| Log | Obsah | Uchování |
|---|---|---|
| Auditní log MCP (databáze) | Uživatel, profil, ID klienta, název nástroje, úspěch nebo chyba, shrnutí argumentů bez volného textu. Jen zápisy. Vidíte ho v nabídce účtu → Připojení AI (MCP). | 365 dní |
| Provozní log požadavků (Vercel) | Metoda, cesta, stav, doba zpracování, IP klienta. Bez těl požadavků. | Podle nastavení tarifu Vercelu |
| Výstup funkcí (Vercel) | Chybové hlášky, které aplikace vypíše při selhání, například chybu databáze. Ne těla požadavků. | Podle nastavení tarifu Vercelu |
| Administrátorský chybový log (databáze) | Chyby aplikace z vybraných endpointů, z webového rozhraní a z mobilních aplikací (Android i iPhone): text a technický výpis chyby, stránka nebo obrazovka, verze aplikace a systému, ID účtu jako pseudonym (bez jména a e-mailu), IP adresa a User-Agent. Na cestě MCP se nepoužívá. | 12 měsíců, poté se automaticky smaže |
| Záznam přístupů do administrace (databáze) | Kdo, kdy, metoda, cesta a identifikátory z adresy (ID uživatele nebo záznamu, kolekce). Žádný obsah, který administrace ukázala, žádný e-mail. Stejný požadavek do 30 sekund se zapíše jednou. Smazání účtu záznam o nahlédnutí do něj neodstraní. | 365 dní, poté se automaticky smaže |
Co tam naopak není:
- Žádný Sentry, Datadog, PostHog ani podobná knihovna v API ani v mobilních aplikacích (Android i iPhone). Závislost toho druhu v projektu neexistuje.
- Žádný middleware, který by zachytával těla požadavků nebo odpovědí.
- Google Analytics a Microsoft Clarity se načítají jen v prohlížeči na webových stránkách a až po souhlasu s cookies. Provoz API a MCP se k nim nikdy nedostane. Jedinou výjimkou je jedna událost registrace: když si založíte účet, náš server ji oznámí Google Analytics — jen pokud jste dali souhlas s analytikou (jinak cookie Analytics neexistuje a nic se neodešle). Nese anonymní identifikátor Analytics a stránku, ze které jste přišli, nikdy jméno, e-mail ani finanční údaje.
- Vercel Web Analytics počítá zobrazení stránek na webu i v dashboardu (v mobilní aplikaci ne) bez cookies a bez souhlasu; identifikátor návštěvy je otisk platný jeden den. Provoz API a MCP nevidí.
Další propojení
- Wallet by BudgetBakers (Premium a Max, k tomu vlastní účet Wallet Premium): vložíte API token z Walletu, Assetli ho uloží zašifrovaný a z Wallet API pouze čte. Nikdy do Walletu nezapisuje. Při odpojení se token smaže. Technicky by dovolil i zápis; Assetli ho používá jen ke čtení.
- API klíče (
ask_…): samostatný typ klíče jen pro čtení, určený pro datové API (ceníky energií, sazby hypoték a spoření). K vašim finančním datům přístup nedává. Ukládají se jako otisk SHA-256, dají se omezit na čtení, opatřit expirací a zrušit v Nastavení. Připojení AI je nepoužívá. - Doplněk do Google Sheets: vlastní typ tokenu, který přijímají jen dva endpointy u hypoték. Je vypsaný a odvolatelný na téže stránce připojení.
- Doplněk do prohlížeče pro prověrku nemovitosti: přečte inzerát otevřený ve vašem prohlížeči a jeho text pošle analytickému endpointu. Server na realitní portály sám nechodí. Předem má povolený přístup jen k assetli.app; po kliknutí na ikonu si vyžádá oprávnění pro web otevřené karty a Chrome se zeptá, pokud ho ještě nedostal. Při otevření panelu pošle adresu otevřené stránky, aby zjistil, jestli jste ji už prověřovali; obsah stránky čte až po kliknutí na „Analyzovat tuto stránku“.
Vaše práva k datům
- Export (na webu i v mobilní aplikaci): Nastavení → Export dat vytvoří soubor se všemi záznamy, které vlastníte, napříč kolekcemi, bez autentizačních tajemství a dočasných logů.
- Smazání: Nastavení → Smazat účet odstraní uživatele a každý záznam, který je na něj navázaný, včetně záznamů vlastněných skupinami a odkazem Family Legacy a včetně souborů. Vyžaduje se potvrzovací fráze. V mobilní aplikaci (Android i iPhone): Více → Nastavení → Smazat účet. Podrobnosti: Smazání účtu.
Co zatím neumíme
Raději to vypíšeme, než abyste to našli sami.
- Potvrzení se vynucuje jako párování, ne jako souhlas. Server odmítne zápis, který nemá token z odpovídajícího náhledu pro tytéž argumenty z posledních deseti minut. Jestli jste náhled opravdu viděli a řekli ano, je pořád na AI klientovi; Claude, ChatGPT i Gemini přidávají vlastní dotaz na povolení nástroje.
- Doba uchování logů na straně hostingu závisí na tarifu Vercelu a aplikace ji neřídí.
- Automatická noční záloha databáze od 22. 10. 2026 selhává. Opravujeme ji. Druhá kopie v GitHub Actions od 21. 10. 2026 také nevzniká.
- Vývoj pracuje s provozní databází. Provozovatel k datům přistupuje kvůli provozu, opravám chyb a vývoji, a to jen v nezbytném rozsahu. Vývoj i kontrolní skripty běží nad provozní databází a některé z nich procházejí profily uživatelů (například kontrola, že AI ukazuje stejná čísla jako web). Provozovatel při tom používá asistenta pro programování s AI od Anthropicu, takže výstup takových skriptů může zpracovat Anthropic jako zpracovatel. Oddělená vývojová databáze je naše největší otevřená položka.
- Databázový nástroj v administraci umí záznamy i měnit a mazat. Vstup do něj vyžaduje dvoufaktorové ověření a zapisuje se; šifrovaná pole ukazuje jen jako šifrový text a hesla, tokeny OAuth a API klíče jsou v databázi jen jako otisky.
- Známé zranitelnosti v knihovnách zatím nehlídá žádná automatika. Upozornění zavádíme.
Hlášení bezpečnostního problému
Napište na info@assetli.app a do předmětu uveďte „security”. Prosíme, netestujte na datech jiných uživatelů.