Pobrane faktury XML, dane kontrahentów i schematy dekretacji są zapisywane wyłącznie w IndexedDB Twojej przeglądarki. Treść (metadane faktury, plik XML, dane kontaktowe kontrahenta) jest dodatkowo szyfrowana AES-256-GCM kluczem właściwym dla każdej firmy — dane różnych firm nigdy się nie mieszają. Serwer nie przechowuje ani nie przetwarza treści faktur — pełni jedynie rolę pośrednika do API KSeF.
indexedDB.open('KSeFStorage2') → store'y invoices, contractors, posting_schemes · pole _enc (AES-256-GCM)Plik certyfikatu (.CRT) i klucz prywatny (.KEY) są przechowywane w IndexedDB — nigdy nie są wysyłane na serwer w postaci jawnej. Do API KSeF trafia jedynie podpisany token wygenerowany przez serwer po otrzymaniu zaszyfrowanych danych, które mogą być odszyfrowane tylko przy użyciu Twojego klucza.
indexedDB → object store certificates → klucz activeHasło do klucza prywatnego jest szyfrowane algorytmem AES-256-GCM kluczem wyprowadzonym z odcisku maszyny (PBKDF2) i przechowywane w IndexedDB. Nie opuszcza przeglądarki. Odszyfrowanie jest możliwe wyłącznie na tym samym urządzeniu i profilu przeglądarki, na którym certyfikat został dodany.
Opcjonalna ochrona hasłem interfejsu (moduł Użytkownicy) trzyma konta w IndexedDB, lokalnie — serwer o nich nie wie. Hasła są haszowane MD5 bez soli — to lekka blokada dostępu do ekranu logowania, nie kryptograficzne zabezpieczenie danych. Kto ma bezpośredni dostęp do profilu przeglądarki, może odczytać faktury niezależnie od tego hasła.
users · MD5(hasło) · localStorage['k2AuthEnabled']
Pełne dane firm (NIP, nazwa, kolor, klucz szyfrujący) są zapisane w IndexedDB, w store companies. localStorage przechowuje tylko wskaźnik na aktualnie aktywną firmę (guid, NIP, nazwę) — nie same dane firmowe. Nic z tego nigdy nie jest przesyłane na serwer.
companies + localStorage['_ksef_settings'] (pola companyGuid, nip, companyName, env)