Wszystkie artykuły

    Poradnik7 min czytania

    Błąd 435 w KSeF: dlaczego KSeF nie może odszyfrować faktury

    Zespół FakturaFlow

    Praktycy automatyzacji KSeF dla biur rachunkowych w Polsce.

    W historii wysyłki przy fakturze widzisz kod 435 i komunikat „Błąd odszyfrowania pliku”. Czasem ten sam numer stoi przy całej sesji wsadowej, z opisem „Błąd odszyfrowania zaszyfrowanych części archiwum”. Faktura wygląda dobrze, a mimo to Krajowy System e-Faktur (KSeF) jej nie przyjął.

    Tu znajdziesz wyjaśnienie, dlaczego ten kod prawie nigdy nie dotyczy treści faktury, oraz konkretne kroki dla biura i dla programisty. Inne kody opisujemy na pełnej liście kodów błędów KSeF.

    Co oznacza kod 435

    Program, który wysyła fakturę, najpierw ją szyfruje. KSeF po odebraniu pliku go odszyfrowuje i dopiero wtedy sprawdza treść. Kod 435 mówi, że zawiódł ten pierwszy krok. KSeF dostał plik, ale nie umiał go odczytać. Do sprawdzania NIP-ów, dat czy stawek w ogóle nie doszło.

    Numer 435 występuje w dokumentacji API KSeF 2.0 w dwóch miejscach. Oba omawiamy na tej stronie.

    Status faktury 435: „Błąd odszyfrowania pliku”. Dotyczy jednej faktury w sesji. Pozostałe faktury z tej samej sesji mogą przejść bez problemu.

    Status sesji wsadowej 435: „Błąd odszyfrowania zaszyfrowanych części archiwum”. W sesji wsadowej program pakuje faktury do archiwum ZIP, dzieli je na części i szyfruje każdą część. Ten status oznacza, że KSeF nie odszyfrował tych części. Problem dotyczy wtedy całej paczki, a nie jednej faktury. Jak działa wysyłka paczkami, opisujemy w tekście o hurtowej wysyłce faktur do KSeF.

    Nie myl tego z kodem 415 w statusie sesji. Brzmi on „Błąd odszyfrowania dostarczonego klucza” i oznacza, że KSeF nie odczytał samego klucza sesji. Przy 435 klucz został odczytany, a zawiódł dopiero plik. Kodowi 415 poświęciliśmy osobny tekst: błąd 415 w KSeF.

    Dokumentacja MF nie podaje przyczyn kodu 435 wprost. Opisuje za to, jak faktura ma być zaszyfrowana, w sekcji „Poprawne szyfrowanie” dokumentu o weryfikacji faktury. Przyczyny poniżej wynikają z tego opisu i z naszej własnej praktyki.

    Najczęstsze przyczyny

    1. Usterka szyfrowania w programie, która psuje tylko niektóre pliki

    To najbardziej podstępny wariant. Program szyfruje większość faktur poprawnie, a tylko część źle. Usterka zależy wtedy od cechy pliku, a nie od jego treści. U nas była to długość: kłopot sprawiały tylko pliki, których rozmiar był dokładną wielokrotnością 16 bajtów. Szczegóły opisujemy niżej, w części „Z naszej praktyki”.

    Jak rozpoznać: 435 dostają pojedyncze faktury, a inne z tej samej sesji przechodzą. Ta sama faktura wysłana ponownie znów dostaje 435, bo jej plik się nie zmienił. Nowa sesja niczego tu nie zmienia.

    2. Klucz z innej sesji albo pomylony klucz

    Klucz szyfrujący i wektor inicjujący (IV, dodatkowa losowa wartość potrzebna do szyfrowania) program tworzy osobno dla każdej sesji. Przy otwarciu sesji przekazuje je do KSeF, klucz w postaci zaszyfrowanej. Jeżeli zaszyfruje fakturę kluczem z wcześniejszej sesji albo pomyli klucze dwóch sesji, KSeF użyje innego klucza niż program. Odszyfrowanie się nie uda.

    Jak rozpoznać: 435 dostają wszystkie faktury z danej sesji, bez względu na treść i rozmiar. Jeżeli pomyłka była jednorazowa, ponowna wysyłka w nowej sesji przechodzi.

    3. Paczka zaszyfrowana inaczej, niż zgłoszono (sesja wsadowa)

    W sesji wsadowej obowiązuje ta sama zasada, tylko na poziomie części archiwum. Jeżeli części zaszyfrowano innym kluczem niż zgłoszony przy otwarciu sesji albo z usterką w procedurze szyfrowania, KSeF nie odczyta paczki.

    Jak rozpoznać: kod 435 widzisz w statusie całej sesji, a nie przy pojedynczych fakturach.

    Czego kod 435 nie oznacza

    • Błędu w treści faktury. Błędy treści FA(3) KSeF zgłasza innym kodem: 450, „Błąd weryfikacji semantyki dokumentu faktury”. Opisaliśmy go w tekście o błędzie 450 w KSeF.
    • Wadliwego pliku XML. Plik, który KSeF odszyfrował, ale uznał za wadliwy, dostaje kod 430, „Błąd weryfikacji pliku faktury”. Więcej: błąd 430 w KSeF.
    • Problemu z tokenem KSeF. Bez poprawnego logowania program nie otworzyłby nawet sesji.

    Co zrobić krok po kroku

    1. Nie poprawiaj treści faktury. Kod 435 nie mówi nic o NIP-ie, kwotach ani stawkach. Uwaga na pułapkę: drobna zmiana treści może zmienić rozmiar pliku, więc faktura może nagle przejść. To jednak ukrywa usterkę programu, zamiast ją usunąć. Przy następnej fakturze o „pechowym” rozmiarze błąd wróci.
    2. Sprawdź, gdzie stoi kod. Przy jednej fakturze to status faktury. Przy całej sesji wsadowej to status sesji. Programy pokazują to zwykle w historii wysyłki albo w dzienniku zdarzeń.
    3. Wyślij fakturę jeszcze raz, najlepiej w nowej sesji. Faktura z kodem 435 nie została przyjęta i nie ma numeru KSeF. Ponowna wysyłka nie utworzy więc duplikatu. Jeżeli przejdzie, sprawa zamknięta.
    4. Jeżeli ta sama faktura znów dostaje 435, zgłoś to dostawcy programu. Błąd, który wraca tylko przy niektórych fakturach, to prawie na pewno usterka szyfrowania w programie. Ty jej nie naprawisz. Podaj w zgłoszeniu numer faktury, datę i godzinę wysyłki, numer referencyjny sesji i rozmiar pliku XML w bajtach.
    5. Porównaj rozmiary plików. Jeżeli program pozwala wyeksportować XML, sprawdź rozmiar odrzuconych plików we właściwościach pliku. Podziel go przez 16. Jeżeli przy odrzuconych fakturach zawsze wychodzi liczba całkowita, a przy przyjętych nie, masz mocną wskazówkę dla dostawcy. Przykład: 2 256 bajtów to dokładnie 141 razy 16. Eksport może się minimalnie różnić od pliku, który program zaszyfrował, więc traktuj to jako wskazówkę, nie dowód.
    6. Sprawdź, czy masz aktualną wersję programu. Usterki szyfrowania dostawcy usuwają poprawkami. Aktualizacja może rozwiązać problem od razu.
    7. Przy kodzie 435 w statusie sesji wsadowej sprawdź, które faktury z paczki mają numer KSeF. Faktury bez numeru wyślij ponownie w nowej sesji. Jeżeli kolejna paczka też kończy się kodem 435, przekaż sprawę dostawcy programu.
    8. Do MF pisz dopiero na końcu. Ma to sens wtedy, gdy dostawca potwierdzi, że szyfrowanie jest zgodne z dokumentacją, a błąd się powtarza. Użyj formularza MF albo adresu jpk.helpdesk@mf.gov.pl. Dołącz numer referencyjny sesji i godzinę wysyłki.

    Jak temu zapobiec

    Po każdej aktualizacji programu przejrzyj historię pierwszych wysyłek. Nie lekceważ pojedynczego kodu 435. Jeżeli przyczyną jest usterka szyfrowania, wróci przy kolejnych fakturach o tej samej cesze pliku, na przykład o rozmiarze będącym wielokrotnością 16 bajtów, i to bez ostrzeżenia. Zgłoś go dostawcy od razu, nawet gdy sprawa wygląda na jednorazową.

    Dla programisty. Według dokumentacji MF faktura jest szyfrowana algorytmem AES-256-CBC: klucz 256-bitowy, wektor IV 128-bitowy, dopełnienie PKCS#7. Klucz i IV generujesz dla każdej sesji od nowa i nie używasz ich w innej sesji. Klucz symetryczny szyfrujesz algorytmem RSAES-OAEP (SHA-256, MGF1) aktualnym kluczem publicznym MF. Certyfikaty pobierasz z GET /security/public-key-certificates i wybierasz aktualny, o właściwym przeznaczeniu (usage), jak opisuje dokumentacja kluczy publicznych. Przy PKCS#7 plik o długości będącej dokładną wielokrotnością 16 bajtów dostaje cały dodatkowy blok: 16 bajtów o wartości 0x10. Ten przypadek musi być w testach. Sprawdź pliki o długości równej wielokrotności 16 bajtów oraz o jeden bajt krótsze i dłuższe. Szyfrogram odszyfruj niezależną implementacją, na przykład OpenSSL, bo test tą samą biblioteką w obie strony może nie wykryć jej własnej usterki. Na koniec wyślij takie pliki na środowisko DEMO lub TEST KSeF.

    Z naszej praktyki

    24 września 2026 r. KSeF odrzucił jedną z faktur, które wysłaliśmy w produkcji. Status 435, „Błąd odszyfrowania pliku”, a w szczegółach „Plik niepoprawnie zaszyfrowany”. Plik XML faktury miał 2 256 bajtów. Treść faktury była poprawna.

    Przyczyna leżała po naszej stronie, w programie wysyłającym. Procedura szyfrowania AES-256-CBC z zewnętrznej biblioteki, uruchamiana w środowisku Deno, psuła ostatni blok szyfrogramu. Działo się to zawsze wtedy, gdy długość XML była dokładną wielokrotnością 16 bajtów. W takim przypadku dopełnienie PKCS#7 musi dodać cały dodatkowy blok. Statystycznie dotyczyło to mniej więcej co szesnastej faktury.

    Tego samego dnia odtworzyliśmy błąd na środowisku DEMO KSeF. Faktura testowa zbudowana tak, by miała dokładnie 2 256 bajtów, dostała 435. Faktury o innych długościach przeszły. Jeszcze tego dnia przeszliśmy na standardowe szyfrowanie AES-CBC z Web Crypto. Pojedynczy kod 435 na naszym własnym koncie testowym w lipcu miał, jak się okazało, tę samą przyczynę.

    Wnioski są trzy. Kod 435 prawie nigdy nie dotyczy treści faktury. Jeżeli błąd dotyczy tylko części faktur, porównaj rozmiary odrzuconych plików. A ta sama faktura wysłana ponownie przez poprawiony program przechodzi bez żadnej zmiany w treści.

    FakturaFlow pokazuje każdy błąd KSeF po polsku, z informacją, co poprawić. W oknie „Szczegóły KSeF” widzisz historię statusów faktury, jej numer KSeF i wysłany plik XML. Faktury idą pojedynczo albo w sesjach wsadowych, a UPO (Urzędowe Poświadczenie Odbioru) pobiera automatycznie. FakturaFlow działa obok Twojego programu księgowego, nie zamiast niego. Załóż konto i sprawdź.

    Podsumowanie

    Kod 435 oznacza, że KSeF nie odszyfrował faktury („Błąd odszyfrowania pliku”) albo części paczki w sesji wsadowej („Błąd odszyfrowania zaszyfrowanych części archiwum”). To sprawa szyfrowania w programie wysyłającym, nie treści faktury. Wyślij fakturę ponownie, a jeśli błąd wraca przy tych samych plikach, zgłoś go dostawcy programu razem z rozmiarem pliku w bajtach. Pozostałe kody znajdziesz na pełnej liście kodów błędów KSeF.

    Stan na październik 2026 r. Opis na podstawie dokumentacji API KSeF 2.0 (wersja 2.8). Kody i komunikaty mogą się zmienić wraz z nowymi wersjami API.