Herkos

Beveiligingsbeleid

Herkos verwerkt geheime sleutels en versleutelde berichten, dus we nemen beveiligingsmeldingen serieus en horen liever vroeg dan laat over een probleem.

Een kwetsbaarheid melden

Open voor beveiligingsproblemen alstublieft geen openbare issue.

Meld het vertrouwelijk per e-mail aan security@herkos.email.

Nuttig om te vermelden: wat het probleem is, hoe het te reproduceren is, welk platform en welke versie u hebt getest, en wat een aanvaller ermee zou kunnen bereiken. Een proof of concept helpt enorm.

Voeg nooit uw eigen nsec, geheime sleutel of bunkergeheim toe aan een melding.

We streven ernaar meldingen binnen enkele dagen te bevestigen. Omdat Herkos een klein project is, vragen we u een redelijke termijn voor een oplossing te geven voordat u iets openbaar maakt. We vermelden u graag in de advisory, tenzij u dat liever niet hebt.

Wat binnen de reikwijdte valt

De Herkos-applicatie zelf: het beheer en de opslag van sleutels, het versleutelen en ontsleutelen van berichten (inclusief de NIP-59-afzendercontroles en de Bcc-isolatie in local_packages/nostr_mail), de app-vergrendeling, de communicatie met relays en bridges, de verwerking van bijlagen, en de build- en releasepipeline. Voor Herkos Drive ook het protocolpakket ervan (packages/herkos_drive_protocol) en de pagina die de links ervan opent (herkos.app/f/); zie de eigen sectie ervan hieronder.

Wat buiten de reikwijdte valt

Bekende beperkingen, onomwonden

Dit zijn ontwerpafwegingen, geen kwetsbaarheden. We schrijven ze liever op dan dat iemand ze op de harde manier ontdekt:

Herkos Local Relay: wat het beschermt en wat niet

Herkos Local Relay bewaart de gebeurtenissen van uw apps op uw apparaat, ook de privégebeurtenissen (concepten, privélijsten, de enveloppen die u ontvangt). Dit is wat ze beschermt en waar de grens ligt, platform per platform. Beveiligingsproblemen in het relay meldt u op dezelfde manier als alle andere (zie hierboven).

De hele database is versleuteld, inclusief het journaal (SQLite3 Multiple Ciphers, AEGIS-256). De sleutel bestaat uit 32 willekeurige bytes die op het apparaat worden aangemaakt en in de beveiligde opslag van het besturingssysteem worden bewaard: de Keystore op Android, DPAPI op Windows, de sleutelhanger (libsecret) op Linux. Er zit geen wachtwoord van u op, omdat het relay vanzelf moet kunnen starten. Zonder de sleutel start het relay niet en zegt het dat: het opent of maakt nooit een onversleutelde database, en het verwijdert nooit een database die het niet kan openen.

Als… Android Windows Linux
iemand het databasebestand kopieert (een back-up, een gesynchroniseerde map, een schijfkopie) Beschermd Beschermd Beschermd
het apparaat of de schijf uitgeschakeld wordt gestolen Beschermd: de sleutel staat in de Keystore Beschermd, tenzij men uw Windows-aanmeldwachtwoord kent: DPAPI beschermt de sleutel daarmee Beschermd, tenzij men het wachtwoord van uw sleutelhanger kent (bijna altijd dat van uw sessie)
een ander gebruikersaccount op hetzelfde apparaat Beschermd Beschermd: DPAPI werkt per gebruiker Beschermd: de sleutelhanger is per gebruiker
een andere app of een ander programma dat als uw gebruiker draait Beschermd: Android houdt elke app apart en de Keystore geeft de sleutel alleen aan het relay Nee: DPAPI versleutelt per gebruiker, niet per app; een programma dat als u draait, kan de sleutel net zo goed opvragen als het relay Nee: de sleutelhanger van uw sessie houdt apps niet van elkaar gescheiden
een geroote telefoon, of een tool die code uitvoert als de app Nee — —
iemand het ontgrendelde apparaat in handen heeft Alleen de pincode of vingerafdruk van het relay, als u die instelt Idem Idem
iemand het geheugen van het relay leest terwijl het draait Nee Nee Nee

Op een desktop is de grens van DPAPI en van de sleutelhanger die van elk programma: ze beschermen tegen andere gebruikers en tegen wie de schijf meeneemt, niet tegen een kwaadaardig programma dat al als u draait. Maakt u zich zorgen over dat geval, dan beschermt u zich door de systeemschijf te versleutelen (BitLocker, LUKS) en geen programma's uit te voeren die u niet vertrouwt. Op een Linux zonder sleutelhanger (geen Secret Service) start het relay niet en legt het uit waarom: het bewaart de sleutel nooit onversleuteld.

Wie er binnenkomt, op het apparaat zelf. Het relay luistert alleen op 127.0.0.1, en elke app op het apparaat, of een webpagina in de browser, kan dat adres bereiken. Daarom:

Wat het hier niet beschermt:

Het lokale netwerk, als u het inschakelt (standaard staat het uit):

Wat het hier niet beschermt: iedereen op hetzelfde netwerk ziet dat het apparaat een open poort heeft en hoeveel verkeer erdoor gaat, maar niet wat; en als het apparaat een openbaar adres heeft (geen router ertussen), is die poort vanaf het internet zichtbaar, al vraagt hij nog steeds om een sleutel op uw lijst.

Kopieën. De versleutelde kopie heeft een wachtwoord (scrypt en XChaCha20-Poly1305): zonder dat wachtwoord kan niemand haar openen, ook wij niet. De JSONL-export is niet versleuteld en bevat uw privégebeurtenissen in platte tekst; de app waarschuwt u daarvoor.

De vergrendeling (een pincode, plus vingerafdruk of Windows Hello) wordt gevraagd wanneer de app opent, na 30 seconden weg te zijn geweest, en om een koppeling goed te keuren. Het is een gemaksdrempel, zoals in Mail: ze versleutelt niets. Op Android zijn er met een ingestelde pincode geen schermafbeeldingen en geen miniatuur bij de recente apps, en sinds Android 12 kan geen venster van een andere app over dat van het relay heen liggen terwijl u het gebruikt.

Herkos Drive: wat het beschermt en wat niet

Herkos Drive bewaart uw bestanden op Blossom-servers en de lijst van uw bestanden en mappen op Nostr-relays, beide versleuteld op uw apparaat. Dit is wat ze beschermt en waar de grenzen liggen. Alle details staan in spec-drive.md en het dreigingsmodel amenazas-drive.md, in packages/herkos_drive_protocol/; wat elke relay en elke server ziet, staat in het privacybeleid. Meld beveiligingsproblemen in Drive op dezelfde manier als alle andere (zie hierboven).

Wat relays en servers niet kunnen:

Wat het niet beschermt:

Hoe het wordt gecontroleerd. Twee interne reviews aan de hand van het dreigingsmodel (2 november 2026) en de correcties ervan; tests van wat elke gebeurtenis en elk blok laat zien; fuzzing van elke lezer van wat van buiten komt (gebeurtenissen, zegels, manifesten, links, back-ups). Nog geen externe audit: er is er een gepland vóór de openbare bèta, en het rapport ervan wordt volledig gepubliceerd. Drive is nog in ontwikkeling.

Ondersteunde versies

Beveiligingsoplossingen worden toegepast op de nieuwste uitgebrachte versie. Gezien de omvang van het project worden oudere versies niet onderhouden — werk alstublieft bij voordat u iets meldt.