Herkos

Polityka bezpieczeństwa

Herkos przetwarza klucze prywatne i zaszyfrowane wiadomości, dlatego poważnie traktujemy zgłoszenia dotyczące bezpieczeństwa i wolimy dowiedzieć się o problemie wcześniej niż później.

Zgłaszanie podatności

Prosimy nie otwierać publicznego zgłoszenia (issue) w sprawie problemów z bezpieczeństwem.

Zgłoś je prywatnie e-mailem na security@herkos.email.

Warto podać: na czym polega problem, jak go odtworzyć, na jakiej platformie i wersji go testowałeś oraz co mógłby osiągnąć atakujący. Dowód koncepcji (proof of concept) bardzo pomaga.

Nigdy nie umieszczaj w zgłoszeniu swojego nsec, klucza prywatnego ani sekretu bunkera.

Staramy się potwierdzać zgłoszenia w ciągu kilku dni. Ponieważ Herkos jest małym projektem, daj nam rozsądny czas na poprawkę przed publicznym ujawnieniem. Chętnie wymienimy Cię w komunikacie bezpieczeństwa, chyba że wolisz inaczej.

Co obejmuje ta polityka

Samą aplikację Herkos: obsługę i przechowywanie kluczy, szyfrowanie i odszyfrowywanie wiadomości (w tym weryfikację nadawcy NIP-59 i izolację Bcc w local_packages/nostr_mail), blokadę aplikacji, komunikację z relayami i bridge'ami, obsługę załączników oraz proces budowania i wydawania. W przypadku Herkos Drive także jego pakiet protokołu (packages/herkos_drive_protocol) i strona, która otwiera jego linki (herkos.app/f/); zob. jego własną sekcję niżej.

Czego nie obejmuje

Znane ograniczenia, powiedziane wprost

To kompromisy projektowe, a nie podatności. Wolimy je zapisać, niż żeby ktoś odkrył je w bolesny sposób:

Herkos Local Relay: co chroni, a czego nie

Herkos Local Relay przechowuje na Twoim urządzeniu zdarzenia Twoich aplikacji, również prywatne (szkice, prywatne listy, koperty, które otrzymujesz). Oto, co je chroni i gdzie leży granica, platforma po platformie. Problemy z bezpieczeństwem relaya zgłaszaj tak samo jak wszystkie inne (wyżej).

Cała baza danych jest zaszyfrowana, łącznie z dziennikiem transakcji (SQLite3 Multiple Ciphers, AEGIS-256). Klucz to 32 losowe bajty utworzone na urządzeniu i trzymane w bezpiecznym magazynie systemu: Keystore w Androidzie, DPAPI w systemie Windows, pęk kluczy (libsecret) w systemie Linux. Nie chroni go żadne Twoje hasło, bo relay musi uruchamiać się sam. Bez klucza relay się nie uruchamia i mówi o tym: nigdy nie otwiera ani nie tworzy niezaszyfrowanej bazy i nigdy nie usuwa takiej, której nie może otworzyć.

Jeśli… Android Windows Linux
ktoś skopiuje plik bazy (kopię zapasową, synchronizowany folder, obraz dysku) Chronione Chronione Chronione
ktoś ukradnie wyłączone urządzenie lub dysk Chronione: klucz jest w Keystore Chronione, chyba że zna hasło logowania do Twojego konta Windows: DPAPI chroni nim klucz Chronione, chyba że zna hasło do Twojego pęku kluczy (prawie zawsze to hasło Twojej sesji)
inne konto użytkownika na tym samym urządzeniu Chronione Chronione: DPAPI działa osobno dla każdego użytkownika Chronione: pęk kluczy jest osobny dla każdego użytkownika
inna aplikacja lub program działający jako Twój użytkownik Chronione: Android izoluje każdą aplikację, a Keystore wydaje klucz tylko relayowi Nie: DPAPI szyfruje dla użytkownika, nie dla aplikacji; program działający jako Ty może poprosić o klucz tak samo jak relay Nie: pęk kluczy Twojej sesji nie oddziela aplikacji od siebie
zrootowany telefon lub narzędzie, które wykonuje kod jako aplikacja Nie — —
ktoś trzyma odblokowane urządzenie w ręku Tylko PIN lub odcisk palca relaya, jeśli je ustawisz Tak samo Tak samo
ktoś odczytuje pamięć relaya podczas jego działania Nie Nie Nie

Na komputerze granica DPAPI i pęku kluczy jest taka sama jak w przypadku każdego programu: chronią przed innymi użytkownikami i przed tym, kto zabierze dysk, ale nie przed złośliwym programem, który już działa jako Twój użytkownik. Jeśli niepokoi Cię ten przypadek, chroni Cię szyfrowanie dysku systemowego (BitLocker, LUKS) i nieuruchamianie programów, którym nie ufasz. W systemie Linux bez pęku kluczy (bez Secret Service) relay się nie uruchamia i wyjaśnia dlaczego: nigdy nie trzyma klucza w postaci jawnej.

Kto wchodzi, na samym urządzeniu. Relay nasłuchuje tylko na 127.0.0.1, a do tego adresu może dotrzeć każda aplikacja na urządzeniu albo strona internetowa w przeglądarce. Dlatego:

Czego tu nie chroni:

Sieć lokalna, jeśli ją włączysz (domyślnie jest wyłączona):

Czego tu nie chroni: każdy w tej samej sieci widzi, że urządzenie ma otwarty port i ile ruchu przez niego przechodzi, choć nie co; a jeśli urządzenie ma adres publiczny (bez routera pośrodku), ten port widać z internetu, choć nadal wymaga klucza z Twojej listy.

Kopie. Zaszyfrowana kopia ma hasło (scrypt i XChaCha20-Poly1305): bez niego nikt jej nie otworzy, nawet my. Eksport JSONL nie jest zaszyfrowany i zawiera Twoje zdarzenia prywatne w postaci jawnej; aplikacja o tym uprzedza.

Blokada (PIN oraz odcisk palca lub Windows Hello) jest wymagana przy otwieraniu aplikacji, po 30 sekundach poza nią i do zatwierdzenia parowania. To bariera wygody, jak w Mail: niczego nie szyfruje. W Androidzie przy ustawionym PIN-ie nie ma zrzutów ekranu ani miniatury wśród ostatnich aplikacji, a od Androida 12 żadne okno innej aplikacji nie może znaleźć się nad oknem relaya, gdy go używasz.

Herkos Drive: co chroni, a czego nie

Herkos Drive przechowuje Twoje pliki na serwerach Blossom, a listę Twoich plików i folderów na relayach Nostr, w obu przypadkach zaszyfrowane na Twoim urządzeniu. Oto, co je chroni i gdzie są granice. Pełne szczegóły są w spec-drive.md i w modelu zagrożeń amenazas-drive.md, w packages/herkos_drive_protocol/; to, co widzi każdy relay i serwer, opisuje polityka prywatności. Problemy bezpieczeństwa Drive zgłaszaj tak samo jak wszystkie inne (wyżej).

Czego relaye i serwery nie mogą zrobić:

Czego nie chroni:

Jak to jest sprawdzane. Dwa wewnętrzne przeglądy pod kątem modelu zagrożeń (2 listopada 2026) i ich poprawki; testy tego, co pokazuje każde zdarzenie i blok; fuzzing każdego czytnika tego, co przychodzi z zewnątrz (zdarzenia, pieczęcie, manifesty, linki, kopie zapasowe). Jeszcze bez zewnętrznego audytu: jeden jest planowany przed publiczną betą, a jego raport zostanie opublikowany w całości. Drive jest wciąż w fazie rozwoju.

Wspierane wersje

Poprawki bezpieczeństwa trafiają do najnowszej wydanej wersji. Ze względu na rozmiar projektu starsze wersje nie są utrzymywane — przed zgłoszeniem zaktualizuj aplikację.