Czy moje dane są bezpieczne?

Dane przechowywane na Twoim urządzeniu

Podstawową zasadą Capitally jest to, że wszystkie Twoje dane są szyfrowane i przechowywane na Twoim urządzeniu. Nasze serwery przechowują jedynie kopię Twojego projektu do synchronizacji między urządzeniami, ale ponieważ tylko Ty masz dostęp do kluczy szyfrujących, nie możemy zobaczyć faktycznych danych — i nic się nie stanie, jeśli zablokujesz te żądania synchronizacji.

Konkretnie mówiąc, ta kopia przechowywana jest w bazie danych Twojej przeglądarki (IndexedDB), a nie jako plik, który możesz otworzyć w Eksploratorze plików czy Finderze. Tam również jest zaszyfrowana – tekst jawny istnieje wyłącznie w pamięci operacyjnej, gdy masz otwartą aplikację. Każda przeglądarka posiada własny magazyn danych, a zainstalowana aplikacja ma magazyn oddzielony od przeglądarki, z której została zainstalowana (zobacz Aplikacja na komputer i urządzenia mobilne). Dlatego też zalogowanie się w nowym miejscu rozpoczyna się od ponownej synchronizacji, a nie od natychmiastowego pobrania danych.

Warto znać dwie konsekwencje: jeśli chcesz mieć kopię, którą możesz zachować, wykonaj eksport do JSON – zobacz Tworzenie kopii zapasowej i przywracanie projektu. Jeśli na dwóch urządzeniach widzisz inne liczby, problemem jest synchronizacja lub pamięć podręczna cen na jednym z nich, a nie same dane – zobacz Rozwiązywanie problemów z aplikacją.

Jedyne, co „widzimy", to symbole instrumentów, z którymi wchodziłeś w interakcję — wyszukiwanych lub pobieranych cen — ale nie łączymy tego z Twoim kontem.

Capitally to również tracker portfela bez Plaid, Yodlee ani żadnego innego agregatora łączącego się z brokerami. Nie prosimy o Twoją nazwę użytkownika i hasło do brokera, nie czytamy Twojego rachunku bankowego. Importy odbywają się wyłącznie przez bezpośrednie przesłanie pliku (CSV/XLS/XML/JSON) lub ręczne wprowadzenie. To wybór podyktowany prywatnością, ale też precyzją — eksporty CSV od brokerów sięgają dnia otwarcia rachunku i zawierają działania korporacyjne, reinwestycje dywidend oraz konwersje FX, które agregatory zazwyczaj pomijają, a to właśnie te szczegóły decydują o dokładnym koszcie nabycia (i rozliczeniu podatkowym).

Projekty są domyślnie szyfrowane

Każdy projekt w Capitally korzysta z szyfrowania AES-256 po stronie klienta (AES-GCM) z kluczami wyprowadzonymi z Twojego hasła za pomocą PBKDF2 i zabezpieczonymi owijaniem kluczy RSA-OAEP. To szyfrowanie zero-knowledge: klucze szyfrujące nigdy nie opuszczają Twojego urządzenia, a nasze serwery przechowują wyłącznie szyfrogram.

Szyfrując Twoje dane, chronimy je przed:

  • nieautoryzowanym dostępem do danych przechowywanych w naszych bazach danych — ze strony pracowników, hakerów lub instytucji rządowych
  • nieautoryzowanym dostępem na Twoim urządzeniu — o ile chronisz profil przeglądarki przed bezpośrednim dostępem i nie wybierasz opcji „Zapamiętaj mnie" podczas logowania

Nie możemy natomiast chronić przed:

  • atakami typu supply-chain lub man-in-the-middle, w których atakujący podmieniają nasz kod źródłowy
  • nieautoryzowanymi zapisami lub usunięciami danych w naszych bazach lub na urządzeniu klienta
  • wykrywaniem aktywności w projekcie — metadane projektu, takie jak typ operacji (utworzenie, aktualizacja, usunięcie transakcji itp.) oraz znaczniki czasu (kiedy wprowadziłeś zmianę, a nie faktyczna data transakcji) nie są szyfrowane

Jak działa szyfrowanie

Tworząc projekt, masz do wyboru trzy tryby szyfrowania:

  1. Hasło użytkownika — gdy się logujesz, używamy PBKDF2, aby z jednego wpisanego hasła wyprowadzić dwa hasła, stosując dwie oddzielne sole. Pierwsze hasło uwierzytelnia Cię, dzięki czemu nasze serwery uwierzytelniania (Google Identity Platform) nigdy nie otrzymują wpisanego przez Ciebie hasła, a drugiego nie można z niego wyprowadzić. Drugie hasło szyfruje (za pomocą AES-GCM) zestaw kluczy prywatnych używanych do szyfrowania projektu. Możesz wybrać bezpieczne przechowywanie tego klucza w przeglądarce, aby nie trzeba było go wpisywać ponownie.
  2. Hasło projektu — tak samo jak powyżej, ale ustawiasz oddzielne hasło projektu, z którego wyprowadzany jest klucz szyfrujący, różne od hasła logowania.
  3. Klucz zdalny — po zalogowaniu aplikacja pobiera klucz szyfrujący z serwera. Klucz nie jest przechowywany w bazie danych; jest wyprowadzany na bieżąco z Twoich danych uwierzytelniających, soli i naszego własnego klucza prywatnego. Endpoint przechowujący ten klucz prywatny jest odseparowany od wszystkich pozostałych endpointów.

Informacje o tym, co oznacza każdy tryb na ekranie logowania, który z nich domyślnie otrzymuje konto Google oraz co czyści przycisk Wyloguj, znajdziesz w Twoje konto i logowanie.

Każdy użytkownik projektu (system jest przygotowany na współdzielenie projektów, choć obecnie obsługiwany jest tylko jeden użytkownik) posiada parę kluczy RSA-OAEP. Klucz prywatny jest szyfrowany głównym kluczem szyfrującym opisanym powyżej i służy do odszyfrowywania kluczy współdzielenia (kolejny AES-GCM), które z kolei szyfrują i odszyfrowują dane projektu. W jednym projekcie może być wiele kluczy współdzielenia — np. po jednym dla każdego zestawu danych współdzielonych między tymi samymi użytkownikami.

Klucz publiczny służy do szyfrowania kluczy współdzielenia wydawanych użytkownikowi oraz do podpisywania wiadomości generowanych przez backend (np. nowych transakcji od brokera), tak aby tylko zamierzony użytkownik mógł je odczytać.

Po wpisaniu hasła nie jest ono nigdzie przechowywane ani wysyłane. Wyprowadzone klucze szyfrujące mogą być przechowywane w Twojej przeglądarce, ale są nieeksportowalne — mogą odszyfrować Twoje dane, ale sam materiał klucza nie może zostać odczytany, nawet przez kod aplikacji Capitally.

Logowanie i bezpieczeństwo konta

Capitally posiada dwie niezależne warstwy: uwierzytelnianie, które decyduje o tym, kto może zalogować się na Twoje konto, oraz szyfrowanie, które decyduje o tym, kto może odczytać dane. Większość ochrony znajduje się w drugiej warstwie – ktoś, kto uzyskałby dostęp do Twojego konta, nadal widziałby jedynie szyfrogram, jeśli projekt posiada własne hasło.

Uwierzytelnianie dwuskładnikowe. Logowanie przez Google zapewnia własną weryfikację dwuetapową Google, co jest obecnie najprostszym sposobem na dodanie drugiego składnika zabezpieczającego konto Capitally. Natywne 2FA – aplikacje typu TOTP, takie jak Google Authenticator czy Authy, a także weryfikacja przez e-mail i SMS – znajdują się na roadmapie.

Drugi sekret dla samych danych. Hasło projektu (nazywane również „bring your own key”) szyfruje projekt niezależnie od sposobu logowania, dzięki czemu sam dostęp do konta nie wystarczy, aby cokolwiek odczytać. Jest to opisane jako tryb 2 w sekcji Jak działa szyfrowanie powyżej.

Klucze sprzętowe. Twój klucz szyfrujący jest generowany z hasła na Twoim urządzeniu i nigdy nie trafia na nasze serwery, więc klucz sprzętowy, taki jak YubiKey, byłby jedynie udogodnieniem przy logowaniu i zarządzaniu kluczami – nie stanowiłby przeszkody między atakującym a Twoimi danymi, jak miałoby to miejsce w przypadku serwisu przechowującego klucze po stronie serwera. Obsługa kluczy Passkey, obejmująca zarówno logowanie, jak i szyfrowanie projektu, również znajduje się na roadmapie.

Jeśli zgubisz hasło projektu

Nie możemy zresetować hasła projektu ani odzyskać danych, które są za nim ukryte: klucz jest generowany z Twojego hasła i istnieje tylko na Twoim urządzeniu, a nasze serwery przechowują jedynie szyfrogram. Zanim stwierdzisz, że dane przepadły, sprawdź trzy rzeczy – i przeczytaj pierwszą z nich, zanim cokolwiek zmienisz.

1. Czy nadal jesteś zalogowany w innym miejscu? Klucze szyfrujące pozostają w sesji przeglądarki, dopóki wyraźnie nie klikniesz Wyloguj – zamknięcie karty, zakończenie pracy przeglądarki lub ponowne uruchomienie komputera ich nie usuwa. Dlatego każde urządzenie lub przeglądarka, w której otworzyłeś projekt i nigdy się nie wylogowałeś, jest aktywną drogą powrotną: otwórz tam projekt i ustaw nowe hasło w sekcji Ustawienia → Szyfrowanie. Nie wylogowuj się z tej sesji, by „spróbować ponownie” – znajduje się tam jedyna pozostała kopia Twojego klucza.

2. Czy hasło zostało zapisane? Zaloguj się normalnie i pozwól przeglądarce lub pękowi kluczy na automatyczne uzupełnienie hasła projektu. Jeśli to zadziała, natychmiast ustaw nowe hasło projektu lub zmień szyfrowanie projektu na hasło użytkownika, aby pozostał tylko jeden sekret do zapamiętania.

3. W jakim trybie szyfrowania jest projekt? W trybie Hasło użytkownika nie ma oddzielnego sekretu projektu – projekt odblokowuje się hasłem do logowania. W trybie Klucz zdalny klucz jest generowany na bieżąco z Twoich danych logowania, więc standardowa procedura resetowania konta przywróci Ci dostęp. Tylko Hasło projektu nakłada na Ciebie drugi sekret, którego nic nie może zresetować. Jeśli straciłeś hasło do logowania, rozwiązania 1 i 2 są tymi, z których możesz skorzystać.

Jeśli żadna z tych opcji nie ma zastosowania, danych w tym projekcie nie da się odzyskać – ani przez Ciebie, ani przez nas, ani przez atakującego, ani na mocy wezwania sądowego. To właśnie ta sama właściwość, która sprawia, że szyfrowanie ma taką wartość.

Hosting, RODO i rezydencja danych w UE

Capitally jest budowane w Europie dla inwestorów z całego świata i działa zgodnie z unijnym prawem o ochronie prywatności.

  • Hostowane w Europie. Wszystkie serwery i bazy danych znajdują się w europejskich centrach danych — Twoje zaszyfrowane dane nigdy nie opuszczają jurysdykcji europejskiej. Korzystamy z Google Cloud, Railway, Hetzner, MongoDB i Cloudflare.
  • Zgodność z RODO. Masz prawo do wyeksportowania i trwałego usunięcia swoich danych w dowolnym momencie; obie operacje są dostępne jednym kliknięciem w aplikacji, bez konieczności wysyłania e-maila.
  • Standardowa higiena serwerów branży na bazie szyfrowania end-to-end: HTTPS dla całego ruchu, szyfrowanie at rest, dostęp na zasadzie need-to-know w naszym zespole, uwierzytelnianie dwuskładnikowe i logi dostępu.
  • Brak zewnętrznych brokerów danych. Nie udostępniamy danych reklamodawcom, a żaden SDK analityczny nie ma dostępu do Twojego portfolio — możesz też całkowicie zrezygnować z analityki (zobacz Analityka i śledzenie błędów poniżej).

Czy kod jest otwartoźródłowy i zweryfikowany?

Capitally to projekt o zamkniętym kodzie źródłowym, ale aplikacja kliencka jest napisana w TypeScript, a wszelka obsługa danych odbywa się po stronie klienta. Całą komunikację sieciową można łatwo zweryfikować w narzędziach deweloperskich przeglądarki.

Jak w przypadku każdego oprogramowania, ostatecznie sprowadza się to do zaufania. Musisz nam zaufać, że my (ani haker) nie zmienimy potajemnie tego kodu i nie wykradniemy kluczy szyfrujących ani haseł.

Większość innych trackerów portfela opisuje siebie jako „zaszyfrowane na poziomie banku", co oznacza, że dostawca przechowuje Twoje klucze i może odczytać Twoje dane. Capitally jest szyfrowane end-to-end, co oznacza, że tylko Ty możesz odczytać swoje dane — nawet nasi inżynierowie nie mogą, z założenia.

Analityka i śledzenie błędów

Nie chcemy znać Twoich danych finansowych, jednak aby ulepszać aplikację i pomagać Ci w razie problemów, zbieramy pewne dane o sposobie korzystania z niej — jeśli nam na to pozwolisz. Zbieramy konkretnie:

  • Twoje ID użytkownika
  • URL strony, który może zawierać ID aktywa
  • URL żądań sieciowych (które będą zawierać ID aktywów rynkowych)
  • elementy, które klikasz (tylko ich systemowe ID)
  • systemowe komunikaty dziennika (które mogą zawierać ID aktywów rynkowych)

Jeśli nie zezwolisz nam na identyfikację, nie będziemy przechowywać żadnego z wymienionych powyżej ID. W takim przypadku rejestrujemy jedynie błędy oraz minimalne dane o użyciu funkcji — w całkowicie anonimowy sposób, bez ID ani szczegółowych logów.

Ta zgoda jest oddzielna od zgody na pliki cookie funkcjonalne, które zapamiętują wybrany projekt oraz kolumny tabeli między sesjami. Odrzucenie analityki nie wpływa na te elementy; odrzucenie plików cookie funkcjonalnych powoduje, że projekt demonstracyjny otwiera się za każdym razem – zobacz Ustawienia i preferencje wyświetlania.

Rzeczy, których nigdy nie zbieramy:

  • wielkość ani wartość Twoich inwestycji
  • nazwy, notatki ani żaden tekst tworzony przez Ciebie
  • niestandardowe źródła kursów