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ą.
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:
- Aplikacja – nie ma w niej żadnej funkcji zmiany ani usuwania wpisów, a próba zrobienia tego w kodzie kończy się błędem.
- Baza danych – wyzwalacz (trigger) w bazie odrzuca każdą próbę zmiany lub usunięcia wpisu, także z ręcznie wpisanego zapytania SQL.
- 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.
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.
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.



