Herkos

Bezpečnostní zásady

Herkos pracuje se soukromými klíči a šifrovanými zprávami, proto bereme hlášení o bezpečnosti vážně a o problému se raději dozvíme dřív než později.

Hlášení zranitelnosti

Bezpečnostní problémy prosím nehlaste ve veřejném issue.

Nahlaste je soukromě e-mailem na security@herkos.email.

Hodí se uvést: v čem problém spočívá, jak ho reprodukovat, na jaké platformě a verzi jste testovali a čeho by mohl útočník dosáhnout. Hodně pomůže proof of concept.

Do hlášení nikdy nevkládejte svůj nsec, tajný klíč ani tajemství bunkeru.

Snažíme se hlášení potvrdit během několika dní. Herkos je malý projekt, proto prosím před zveřejněním ponechte přiměřený čas na opravu. V bezpečnostním oznámení vás rádi uvedeme jako autora nálezu, pokud si nepřejete jinak.

Co do rozsahu patří

Samotná aplikace Herkos: práce s klíči a jejich ukládání, šifrování a dešifrování zpráv (včetně kontrol odesílatele NIP-59 a izolace Bcc v local_packages/nostr_mail), zámek aplikace, komunikace s relé a mosty, práce s přílohami a proces sestavení a vydávání. U Herkos Drive také jeho protokolový balíček (packages/herkos_drive_protocol) a stránka, která otevírá jeho odkazy (herkos.app/f/); viz jeho vlastní oddíl níže.

Co do rozsahu nepatří

Známá omezení, řečeno na rovinu

Jde o kompromisy v návrhu, ne o zranitelnosti. Raději je sepíšeme, než aby je někdo objevil na vlastní kůži:

Herkos Local Relay: co chrání a co ne

Herkos Local Relay uchovává události vašich aplikací ve vašem zařízení, i ty soukromé (koncepty, soukromé seznamy, obálky, které přijímáte). Tady je, co je chrání a kde je hranice, platformu po platformě. Bezpečnostní chyby relé hlaste stejně jako všechny ostatní (viz výše).

Celá databáze je šifrovaná, včetně žurnálu (SQLite3 Multiple Ciphers, AEGIS-256). Klíč tvoří 32 náhodných bajtů vytvořených v zařízení a uložených v zabezpečeném úložišti systému: v Keystore v Androidu, pomocí DPAPI ve Windows, v klíčence (libsecret) v Linuxu. Nechrání ho žádné vaše heslo, protože relé se musí spustit samo. Bez klíče se relé nespustí a řekne to: nikdy neotevře ani nevytvoří nešifrovanou databázi a nikdy nesmaže databázi, kterou nedokáže otevřít.

Pokud… Android Windows Linux
někdo zkopíruje soubor databáze (záloha, synchronizovaná složka, obraz disku) Chráněno Chráněno Chráněno
někdo ukradne vypnuté zařízení nebo disk Chráněno: klíč je v Keystore Chráněno, pokud zloděj nezná vaše přihlašovací heslo do Windows: DPAPI jím klíč chrání Chráněno, pokud zloděj nezná heslo vaší klíčenky (téměř vždy je to heslo vaší relace)
jiný uživatelský účet ve stejném zařízení Chráněno Chráněno: DPAPI je pro každého uživatele zvlášť Chráněno: klíčenka je pro každého uživatele zvlášť
jiná aplikace nebo program spuštěný pod vaším uživatelem Chráněno: Android od sebe aplikace odděluje a Keystore dá klíč jen relé Ne: DPAPI šifruje pro uživatele, ne pro aplikaci; program spuštěný jako vy si může o klíč říct stejně jako relé Ne: klíčenka vaší relace od sebe aplikace neodděluje
telefon s rootem nebo nástroj, který spouští kód jako aplikace Ne — —
někdo drží odemčené zařízení v ruce Jen PIN nebo otisk prstu relé, pokud je nastavíte Stejně Stejně
někdo čte paměť relé, zatímco běží Ne Ne Ne

Na počítači je hranice DPAPI i klíčenky stejná jako u každého programu: chrání před jinými uživateli a před tím, kdo odnese disk, ne před škodlivým programem, který už běží pod vaším uživatelem. Pokud vás tento případ znepokojuje, chrání vás šifrování systémového disku (BitLocker, LUKS) a to, že nespouštíte programy, kterým nedůvěřujete. V Linuxu bez klíčenky (bez Secret Service) se relé nespustí a vysvětlí proč: klíč nikdy neukládá nešifrovaný.

Kdo se dostane dovnitř, přímo v zařízení. Relé naslouchá jen na 127.0.0.1 a na tuto adresu se dostane každá aplikace v zařízení i webová stránka v prohlížeči. Proto:

Co tady nechrání:

Místní síť, pokud ji zapnete (ve výchozím stavu je vypnutá):

Co tady nechrání: kdokoli ve stejné síti vidí, že zařízení má otevřený port a kolik provozu jím prochází, i když ne co; a pokud má zařízení veřejnou adresu (bez routeru mezi ním a internetem), je ten port vidět z internetu, i když stále vyžaduje klíč z vašeho seznamu.

Zálohy. Šifrovaná záloha má heslo (scrypt a XChaCha20-Poly1305): bez něj ji nikdo neotevře, ani my. Export JSONL šifrovaný není a obsahuje vaše soukromé události v prostém textu; aplikace vás na to upozorní.

Zámek (PIN a k tomu otisk prstu nebo Windows Hello) se vyžaduje při otevření aplikace, po 30 sekundách mimo ni a ke schválení spárování. Je to pohodlná bariéra, jako v Mailu: nic nešifruje. V Androidu s nastaveným PINem nejdou pořizovat snímky obrazovky a v nedávných aplikacích se nezobrazuje náhled, a od Androidu 12 se přes okno relé nemůže položit okno žádné jiné aplikace, zatímco ho používáte.

Herkos Drive: co chrání a co ne

Herkos Drive uchovává vaše soubory na serverech Blossom a seznam vašich souborů a složek na relé Nostr, obojí šifrované ve vašem zařízení. Toto je to, co je chrání, a kde jsou hranice. Všechny podrobnosti jsou v spec-drive.md a v modelu hrozeb amenazas-drive.md, v packages/herkos_drive_protocol/; co vidí každé relé a server, popisují zásady ochrany soukromí. Bezpečnostní problémy Drive hlaste stejně jako všechny ostatní (výše).

Co relé a servery udělat nemohou:

Co nechrání:

Jak se to ověřuje. Dvě interní revize vůči modelu hrozeb (2. listopadu 2026) a jejich opravy; testy toho, co ukazuje každá událost a každý blok; fuzzing každého čtenáře toho, co přichází zvenčí (události, pečeti, manifesty, odkazy, zálohy). Zatím žádný externí audit: jeden se plánuje před veřejnou betou a jeho zpráva bude zveřejněna celá. Drive je stále ve vývoji.

Podporované verze

Bezpečnostní opravy se vydávají pro nejnovější vydanou verzi. Vzhledem k velikosti projektu se starší verze neudržují — před nahlášením prosím aktualizujte.