Rejestracja wstrzymana – tylko tryb prywatny i zaproszenia

Bezpieczeństwo

Niekasowalny dziennik aktywności

Każde istotne działanie na koncie trafia do dziennika, którego nie da się po cichu zmienić – łańcuch skrótów HMAC i podpisane kotwice poza bazą.

BOSZKA
Ekran aplikacji: Niekasowalny dziennik aktywności

Szyfrowanie chroni to, co zapisałeś. Dziennik aktywności odpowiada na inne pytanie: co działo się na Twoim koncie i kto to zrobił. W BOSZCE każde istotne działanie zostaje zapisane w dzienniku, którego nie można edytować ani usuwać – ani z poziomu aplikacji, ani bezpośrednio w bazie danych. Jeśli ktoś mimo to spróbuje coś w nim zmienić, aplikacja to wykryje i pokaże przy najbliższym otwarciu ekranu.

Co trafia do dziennika

Dziennik obejmuje praktycznie wszystko, co ma znaczenie dla bezpieczeństwa i dla Twoich danych:

  • Logowanie i konto – udane i nieudane logowania, logowania z nowego urządzenia, wylogowania, blokady, zmiany hasła i adresu e-mail, użycie i wygenerowanie kodu odzyskiwania, zmiana waluty bazowej i okresu rozliczeniowego.
  • Bezpieczeństwo – włączenie i wyłączenie logowania dwuskładnikowego, błędne kody, użycie kodów zapasowych, zapamiętane i zaufane urządzenia, wylogowanie wybranej sesji i „wyloguj wszędzie” (także linkiem z e-maila), sprawdzanie hasła w wyciekach, fraza antyphishingowa, kolejne etapy usuwania konta.
  • Dane majątkowe – dodanie, zmiana i archiwizacja kont, operacje, wydatki i wpływy, planowane płatności i wpływy, zobowiązania i ich spłaty, lokaty, obligacje, aktywa, akcje, faktury działalności, kategorie wydatków.
  • Eksporty – każde pobranie listy do CSV, wykresu do PNG lub CSV, wydruk raportu rocznego i eksport samego dziennika.

Każdy wpis ma numer, czas z dokładnością do sekundy, rodzaj zdarzenia, opis, adres IP i identyfikator przeglądarki. Ostrzeżenia – na przykład nieudane logowanie – są wyróżnione.

Czego w dzienniku nie ma

Dziennik jest niekasowalny, więc z założenia nie zawiera niczego, co ujawniałoby Twój majątek. Wpisy o danych majątkowych zawierają wyłącznie numery obiektów, daty i nazwy zmienionych pól. Nie ma w nich kwot, nazw kont, opisów wydatków, kontrahentów, haseł ani treści frazy antyphishingowej. Zapis „zmieniono wydatek nr 214, pola: kwota, kategoria” mówi, że coś się wydarzyło, ale nie mówi, ile wydałeś ani na co.

To ważne, bo dziennik zostaje nawet po usunięciu konta – jako dowód tego, co się stało, ale bez danych majątkowych.

Niekasowalność na trzech poziomach

Słowo „niekasowalny” łatwo napisać. Dlatego zabezpieczenie jest zbudowane warstwowo, tak żeby obejście jednej warstwy nie wystarczało:

  1. Aplikacja – nie ma w niej żadnej funkcji zmiany ani usuwania wpisów, a próba zrobienia tego w kodzie kończy się błędem.
  2. Baza danych – wyzwalacz (trigger) w bazie odrzuca każdą próbę zmiany lub usunięcia wpisu, także z ręcznie wpisanego zapytania SQL.
  3. Uprawnienia – sama aplikacja może do dziennika tylko dopisywać i czytać; zmiana ani usunięcie wpisu nie są jej dozwolone.

Łańcuch HMAC i kotwice poza bazą

A gdyby ktoś mimo to próbował zmienić zapis bezpośrednio w bazie? Na tę sytuację odpowiada kryptografia.

Wpisy każdego użytkownika tworzą łańcuch: każdy wpis zawiera skrót poprzedniego, a jego własny skrót jest liczony algorytmem HMAC-SHA256 z całej treści wpisu. Klucz HMAC jest przechowywany poza bazą danych. Osoba, która ma dostęp tylko do bazy, nie przeliczy poprawnie skrótów – zmiana, usunięcie albo wstawienie wpisu w środku łańcucha zostanie wykryte.

Sam łańcuch ma jedną słabość: jeśli ktoś usunie kilka ostatnich wpisów, krótszy łańcuch nadal jest spójny. Dlatego usługa działająca na serwerze regularnie zapisuje poza bazą kotwice – numer i skrót ostatniego wpisu Twojego dziennika – podpisane osobnym kluczem, innym niż klucz dziennika. Plik kotwic można tylko dopisywać, a usługa czyta z bazy wyłącznie numery i skróty wpisów, bez opisów i adresów IP. Gdy zakotwiczonego wpisu zabraknie albo zmieni się jego skrót, rozbieżność jest od razu widoczna.

Ekran Bezpieczeństwo konta z kartami hasła, kodu odzyskiwania, 2FA, adresu e-mail i frazy
Każda zmiana na ekranie „Bezpieczeństwo konta” – od hasła po frazę antyphishingową – zostawia ślad w dzienniku.

Weryfikacja przy każdym otwarciu

Nie musisz wierzyć nam na słowo. Przy każdym otwarciu ekranu „Dziennik aktywności” aplikacja sprawdza cały łańcuch i porównuje go z kotwicami. Wynik widzisz od razu:

  • zielony komunikat „Integralność dziennika potwierdzona” z liczbą sprawdzonych wpisów,
  • informację, z którą kotwicą dziennik się zgadza i ile nowszych wpisów czeka na zakotwiczenie,
  • czerwony komunikat ze wskazaniem numeru wpisu, jeśli ktoś ingerował w zapis w bazie albo w plik kotwic.

Każda z tych warstw jest niezależna od pozostałych, a ekran dziennika pokazuje wynik sprawdzenia przy każdym otwarciu – stan zabezpieczeń widzisz sam, nie musisz go zakładać.

Eksport – Twoja niezależna kopia

Przycisk Eksportuj do CSV pobiera cały dziennik – bez limitu 5000 wpisów widocznych w tabeli. Na początku pliku są czas wygenerowania oraz wynik sprawdzenia łańcucha i kotwic. Dalej są wszystkie wpisy razem ze skrótem HMAC każdego z nich. Taki plik to Twoja niezależna kopia: jeśli ktoś później zmieni dane na serwerze, kopia u Ciebie zostanie bez zmian i można ją z nim porównać.

Sam eksport jest zapisywany w dzienniku jeszcze przed odczytem, więc pobrany plik zawiera wpis o sobie samym. Wartości mogące wyglądać jak formuła arkusza są zabezpieczone apostrofem. Liczba eksportów w krótkim czasie jest ograniczona.

Jak z tego korzystać

Zaglądaj do dziennika co jakiś czas, szczególnie po e-mailu o logowaniu z nowego urządzenia. Logowanie albo nieudane próby z nieznanego adresu IP to sygnał, żeby zmienić hasło i sprawdzić zabezpieczenia konta. Raz na jakiś czas warto też pobrać eksport i zachować go u siebie.