Herkos

Säkerhetspolicy

Herkos hanterar privata nycklar och krypterade meddelanden, så vi tar säkerhetsrapporter på allvar och hör hellre om ett problem tidigt än sent.

Rapportera en sårbarhet

Öppna inte ett offentligt ärende (issue) för säkerhetsproblem.

Rapportera det privat via e-post till security@herkos.email.

Bra att ta med: vad problemet är, hur det kan återskapas, vilken plattform och version du testade och vad en angripare skulle kunna uppnå. Ett konceptbevis (proof of concept) hjälper mycket.

Ta aldrig med din egen nsec, hemliga nyckel eller bunker-hemlighet i en rapport.

Vi försöker bekräfta rapporter inom några dagar. Eftersom Herkos är ett litet projekt ber vi dig ge oss rimlig tid för en åtgärd innan du offentliggör något. Vi nämner dig gärna i säkerhetsmeddelandet, om du inte föredrar något annat.

Vad som omfattas

Själva Herkos-appen: hantering och lagring av nycklar, kryptering och dekryptering av meddelanden (inklusive NIP-59-kontrollerna av avsändaren och isoleringen av Bcc i local_packages/nostr_mail), applåset, kommunikationen med reläer och bryggor, hanteringen av bilagor samt bygg- och releaseprocessen. För Herkos Drive även dess protokollpaket (packages/herkos_drive_protocol) och sidan som öppnar dess länkar (herkos.app/f/); se dess eget avsnitt nedan.

Vad som inte omfattas

Kända begränsningar, rakt på sak

Det här är avvägningar i designen, inte sårbarheter. Vi skriver hellre ut dem än låter någon upptäcka dem den hårda vägen:

Herkos Local Relay: vad det skyddar och vad det inte skyddar

Herkos Local Relay förvarar dina appars händelser på din enhet, även de privata (utkast, privata listor, de kuvert du tar emot). Här är vad som skyddar dem och var gränsen går, plattform för plattform. Säkerhetsproblem i reläet rapporterar du på samma sätt som alla andra (ovan).

Hela databasen är krypterad, journalen inräknad (SQLite3 Multiple Ciphers, AEGIS-256). Nyckeln är 32 slumpmässiga byte som skapas på enheten och förvaras i systemets säkra lagring: Keystore på Android, DPAPI på Windows, nyckelringen (libsecret) på Linux. Den är inte skyddad av något lösenord från dig, eftersom reläet måste kunna starta av sig självt. Utan nyckeln startar reläet inte och säger det: det öppnar eller skapar aldrig en okrypterad databas, och det raderar aldrig en som det inte kan öppna.

Om… Android Windows Linux
någon kopierar databasfilen (en säkerhetskopia, en synkroniserad mapp, en diskavbild) Skyddat Skyddat Skyddat
enheten eller disken blir stulen medan den är avstängd Skyddat: nyckeln finns i Keystore Skyddat, om inte någon känner till ditt inloggningslösenord för Windows: DPAPI skyddar nyckeln med det Skyddat, om inte någon känner till lösenordet för din nyckelring (nästan alltid detsamma som för din session)
ett annat användarkonto på samma enhet Skyddat Skyddat: DPAPI gäller per användare Skyddat: nyckelringen gäller per användare
en annan app eller ett annat program som körs som din användare Skyddat: Android håller isär varje app och Keystore lämnar nyckeln bara till reläet Nej: DPAPI krypterar per användare, inte per app; ett program som körs som du kan be om nyckeln precis som reläet Nej: din sessions nyckelring håller inte isär apparna
en rootad telefon, eller ett verktyg som kör kod som appen Nej — —
någon har den olåsta enheten i handen Bara reläets PIN-kod eller fingeravtryck, om du ställer in dem Samma Samma
någon läser reläets minne medan det körs Nej Nej Nej

På en dator är gränsen för DPAPI och nyckelringen densamma som för vilket program som helst: de skyddar mot andra användare och mot den som tar med sig disken, inte mot ett skadligt program som redan körs som du. Om det fallet oroar dig är det som skyddar dig att kryptera systemdisken (BitLocker, LUKS) och att inte köra program du inte litar på. På en Linux utan nyckelring (utan Secret Service) startar reläet inte och förklarar varför: det förvarar aldrig nyckeln i klartext.

Vem som kommer in, på själva enheten. Reläet lyssnar bara på 127.0.0.1, och vilken app som helst på enheten, eller en webbsida i webbläsaren, kan nå den adressen. Därför:

Vad det inte skyddar, här:

Det lokala nätverket, om du slår på det (det är avstängt som standard):

Vad det inte skyddar, här: den som är på samma nätverk ser att enheten har en öppen port och hur mycket trafik som går genom den, men inte vad; och om enheten har en offentlig adress (ingen router emellan) syns porten från internet, även om den fortfarande kräver en nyckel på din lista.

Kopior. Den krypterade kopian har ett lösenord (scrypt och XChaCha20-Poly1305): utan det kan ingen öppna den, inte heller vi. JSONL-exporten är inte krypterad och innehåller dina privata händelser i klartext; appen varnar dig för det.

Låset (en PIN-kod, plus fingeravtryck eller Windows Hello) begärs när appen öppnas, efter 30 sekunder borta och för att godkänna en parkoppling. Det är en bekvämlighetsspärr, som i Mail: det krypterar ingenting. På Android finns det med PIN-kod inga skärmdumpar och ingen miniatyr bland de senaste apparna, och sedan Android 12 kan inget fönster från en annan app läggas ovanpå reläets medan du använder det.

Herkos Drive: vad det skyddar och vad det inte skyddar

Herkos Drive förvarar dina filer på Blossom-servrar och listan över dina filer och mappar på Nostr-reläer, båda krypterade på din enhet. Det här är vad som skyddar dem och var gränserna går. Alla detaljer finns i spec-drive.md och i hotmodellen amenazas-drive.md, i packages/herkos_drive_protocol/; vad varje relä och server ser står i integritetspolicyn. Rapportera säkerhetsproblem i Drive på samma sätt som alla andra (ovan).

Vad reläer och servrar inte kan göra:

Vad det inte skyddar:

Hur det kontrolleras. Två interna granskningar mot hotmodellen (2 november 2026) och deras rättelser; tester av vad varje händelse och block visar; fuzzing av varje läsare av det som kommer utifrån (händelser, förseglingar, manifest, länkar, säkerhetskopior). Ingen extern granskning ännu: en är planerad före den offentliga betan, och dess rapport kommer att publiceras i sin helhet. Drive är fortfarande under utveckling.

Versioner som stöds

Säkerhetsrättelser görs i den senast släppta versionen. Med tanke på projektets storlek underhålls inte äldre versioner — uppdatera innan du rapporterar.