Tietoturvakäytäntö
Herkos käsittelee yksityisiä avaimia ja salattuja viestejä, joten otamme tietoturvailmoitukset vakavasti ja kuulemme ongelmasta mieluummin aikaisin kuin myöhään.
Haavoittuvuuden ilmoittaminen
Älä avaa julkista issueta tietoturvaongelmista.
Ilmoita siitä yksityisesti sähköpostilla osoitteeseen security@herkos.email.
Hyödyllistä kerrottavaa: mikä ongelma on, miten sen voi toistaa, millä alustalla ja versiolla testasit ja mitä hyökkääjä voisi saavuttaa. Konseptitodiste (proof of concept) auttaa paljon.
Älä koskaan liitä ilmoitukseen omaa nsec-avaintasi, salaista avaintasi tai bunkerisi salaisuutta.
Pyrimme kuittaamaan ilmoitukset muutamassa päivässä. Koska Herkos on pieni projekti, annathan kohtuullisesti aikaa korjaukselle ennen julkista paljastamista. Mainitsemme sinut mielellämme tiedotteessa, ellet toivo toisin.
Mikä kuuluu piiriin
Itse Herkos-sovellus: avainten käsittely ja tallennus, viestien salaus ja
purku (mukaan lukien NIP-59-lähettäjätarkistukset ja Bcc-eristys
hakemistossa local_packages/nostr_mail), sovelluslukko, viestintä releiden ja
siltojen kanssa, liitteiden käsittely sekä koonti- ja julkaisuketju. Herkos
Driven osalta myös sen protokollapaketti (packages/herkos_drive_protocol) ja
sen linkit avaava sivu (herkos.app/f/); ks. sen omaa osiota alempana.
Mikä ei kuulu piiriin
- Itse Nostr-protokolla ja sen NIPit — ilmoita niistä alkulähteelle.
- Kolmansien osapuolten ylläpitämät releet, sillat ja Blossom-palvelimet. Herkosissa on oletukset, mutta se ei ylläpidä niitä; ilmoita ongelmista niiden ylläpitäjille.
- Alkuperäinen projekti Nostr Mail Client, ellei ongelma liity nimenomaan Herkosissa tehtyihin muutoksiin.
- Puuttuva koventaminen, jonka olemme jo dokumentoineet tunnetuksi rajoitukseksi (ks. alla).
Tunnetut rajoitukset suoraan sanottuina
Nämä ovat suunnitteluun liittyviä kompromisseja, eivät haavoittuvuuksia. Kirjoitamme ne mieluummin auki kuin annamme jonkun löytää ne kantapään kautta:
- Perinteisiin osoitteisiin menevä posti ei ole päästä päähän salattua. Nostr-käyttäjien väliset viestit käyttävät NIP-17-gift wrapia ja ovat päästä päähän salattuja. Kun kirjoitat tavalliseen sähköpostiosoitteeseen, silta muuntaa viestin ja voi lukea sen.
- Sovelluslukko (PIN ja biometriikka) on mukavuuseste, ei tallennettujen tietojen salaus. Se pysäyttää jonkun, joka nostaa lukitsemattoman laitteen käteensä; se ei suojaa hyökkääjältä, jolla on täysi pääsy laitteeseen tai sen tallennustilaan.
- Windowsissa pelkkää biometristä tunnistusta ei voi pakottaa. Windows Hello ei anna valita menetelmää, joten järjestelmän PIN-koodi on aina käytettävissä varavaihtoehtona.
- Avaimen menettäminen tarkoittaa tilin menettämistä. Palautusta ei ole, tarkoituksella.
- Metatietoja ei ole täysin piilotettu. Releet voivat havaita yhteysmalleja, ja jokainen rele näkee IP-osoitteesi, vaikka ne eivät voisi lukea viestien sisältöä. Mitä Herkos ei paljasta (30.9.2026 alkaen), on se, kuka kirjoittaa kenelle, kun rele pyytää NIP-42-tunnistautumista:
- Toimitusosoitteen selvittäminen. Vastaanottajan rele- ja Blossom-listoja
pyydetään erillisellä yhteydellä, joka ei koskaan tunnista sinua, ensin
releiltä, jotka eivät vaadi tunnistautumista (
purplepag.es,user.kindpag.es,nos.lol,offchain.pub). - Profiilit ja ajastin. Muiden ihmisten nimi ja kuva (kind 0) sekä ajastus-DVM:n relelista, kun ajastat tai perut sähköpostin, pyydetään samalla tavalla: ensin anonyymisti ja, jos rele vaatii, alla kuvatulla väliaikaisella avaimella, ei koskaan omallasi (1.10.2026 alkaen; aiemmin tunnistautumista pyytänyt rele sai avaimesi ja saattoi päätellä, kenen profiilia katsoit). Vain oma profiilisi luetaan yhä sinuna.
- Toimittaminen. Gift wrapit menevät vastaanottajan yksityisviestien releille samaa erillistä yhteyttä pitkin. Jos jokin niistä vaatii tunnistautumista, Herkos vastaa tähän tarkoitukseen luodulla, vain muistissa säilytettävällä avaimella, ei koskaan omallasi; jokaisella laitteen tilillä on omansa. Rele voi silti nähdä, että sama laite (sama IP, sama väliaikainen avain) lähetti useita kirjekuoria istunnon aikana.
- Suuret sähköpostit. Yli 32 kt:n sähköpostin salattu kopio ladataan Blossom-palvelimille, myös vastaanottajien palvelimille. Vain omat palvelimesi (oma Blossom-listasi) saavat avaimellasi valtuutetun latauksen. Kaikki muut palvelimet saavat sen anonyymisti ja, jos ne vaativat valtuutusta, samalla väliaikaisella avaimella allekirjoitettuna kuin edellä (1.10.2026 alkaen; aiemmin jokainen palvelin sai avaimesi). Palvelin, joka hyväksyy vain tunnetut avaimet, hylkää sen, ja kopio jää muille palvelimille.
- Omat tietosi. Postilaatikon, tunnisteiden, asetusten ja luonnosten synkronointi tunnistautuu, jos rele sitä pyytää, sinä tilinä, jolle tiedot kuuluvat, myös tilinvaihdon aikana. Omille releillesi se ei kerro mitään, mitä ne eivät jo tietäisi: pyynnöt nimeävät avaimesi joka tapauksessa. Omat rele- ja Blossom-listasi ovat julkisia, ja ne pyydetään tunnistamatta sinua, kuten myös sähköpostin linkissä mainitut releet.
- Lukutila ja kansiot ovat julkista metatietoa (toistaiseksi). Sähköpostin merkitseminen luetuksi, tähdellä, arkistoiduksi tai siirretyksi julkaisee salaamattoman NIP-32-tunnistetapahtuman, joka on sidottu julkiseen avaimeesi, mukaan lukien omien kansioiden nimet. Lähettäjä, joka tietää sinulle lähettämänsä sähköpostin tunnisteen, voi päätellä, milloin käsittelit sen. Näiden tunnisteiden salaus on suunnitteilla; siihen asti pidä kansioiden nimiä julkisina.
- Push-ilmoitukset ja ajastettu lähetys käyttävät kolmansien osapuolten palveluja.
Push-palvelin, jos valitset sellaisen (oletuksena ei mitään;
api.nmail.lijarelay.nmail.lipyynnöstä), saa tietää julkisen avaimesi, push-tunnisteen ja milloin saat postia; ajastus-DVM saa tietää julkisen avaimesi ja ne jo salatut viestit, jotka sen on julkaistava. Molemmat ovat valinnaisia ja dokumentoitu tiedostossaPRIVACY.md. Push-ilmoituksen tekstin valitsee push-palvelin, ja Herkos luottaa siihen vain, kun UnifiedPush toimittaa sen salattuna (RFC 8291); salaamaton sisältö vain herättää sovelluksen hakemaan postin itse. - Verkkoversio säilyttää avaintasi selaimessa, joka on sille heikoin paikka. Asennetut sovellukset antavat salaisen avaimesi käyttöjärjestelmän suojattuun säilöön (Android Keystore, DPAPI Windowsissa, libsecret, iOS:n/macOS:n avainnippu). Selaimessa ei ole mitään näistä: avain on sivuston tallennustilassa ja kulkee JavaScriptin läpi jokaisessa allekirjoituksessa, kaiken sivulla suoritettavan koodin ulottuvilla — kaikille sivuille pääsevän selainlaajennuksen, sovelluksen tai sen riippuvuuden XSS-haavoittuvuuden, muokatun julkaisun — sekä minkä tahansa selainprofiilin kopioivan tietovarkaan (infostealer) ulottuvilla. Lisäksi ei ole hetkeä, jolloin tarkistaisit koodin kerran: allekirjoitettu binääri tarkistetaan asennettaessa, kun taas verkkosivu toimittaa uutta koodia joka käynnillä. Kirjaudu verkkoversioon etäallekirjoittajalla (NIP-46-bunker, Amber), jotta avain ei koskaan päädy selaimeen, tai pidä sitä kertakäyttöisenä identiteettinä ja säilytä oikea avaimesi asennetussa sovelluksessa.
- Sillan kautta tullut posti on vain niin luotettavaa kuin silta. Herkos tarkistaa, että
sillan kautta tulleeksi merkitty viesti on todella allekirjoitettu sillalla, jonka olet
määrittänyt (tai jollakin oletussilloista). Se ei voi tarkistaa mitään sillan välittämästä
perinteisestä
From:-osoitteesta. - Liitteet avaa käyttöjärjestelmä. Herkos ei koskaan käynnistä suoritettavia tiedostoja tai skriptitiedostoja ja kysyy ennen kuin antaa minkään muun esikatselukelvottoman liitteen järjestelmän oletussovellukselle, mutta tiedoston avaava sovellus on hallintamme ulkopuolella.
Herkos Local Relay: mitä se suojaa ja mitä ei
Herkos Local Relay säilyttää sovellustesi tapahtumat laitteellasi, myös yksityiset (luonnokset, yksityiset listat, vastaanottamasi kirjekuoret). Tässä kerrotaan, mikä niitä suojaa ja missä raja kulkee, alusta kerrallaan. Ilmoita relen tietoturvaongelmista samalla tavalla kuin muistakin (ks. yllä).
Koko tietokanta on salattu, myös sen journaali (SQLite3 Multiple Ciphers, AEGIS-256). Avain on 32 satunnaista tavua, jotka luodaan laitteella ja joita säilytetään järjestelmän suojatussa säilössä: Androidissa Keystoressa, Windowsissa DPAPI:lla, Linuxissa avainnipussa (libsecret). Sitä ei suojaa mikään sinun salasanasi, koska relen on käynnistyttävä itsestään. Ilman avainta rele ei käynnisty ja kertoo sen: se ei koskaan avaa tai luo salaamatonta tietokantaa eikä koskaan poista tietokantaa, jota se ei pysty avaamaan.
| Jos… | Android | Windows | Linux |
|---|---|---|---|
| joku kopioi tietokantatiedoston (varmuuskopio, synkronoitu kansio, levykuva) | Suojattu | Suojattu | Suojattu |
| laite tai levy varastetaan sammutettuna | Suojattu: avain on Keystoressa | Suojattu, ellei varas tiedä Windows-kirjautumissalasanaasi: DPAPI suojaa avaimen sillä | Suojattu, ellei varas tiedä avainnippusi salasanaa (lähes aina sama kuin istuntosi salasana) |
| toinen käyttäjätili samalla laitteella | Suojattu | Suojattu: DPAPI on käyttäjäkohtainen | Suojattu: avainnippu on käyttäjäkohtainen |
| toinen sovellus tai ohjelma, joka toimii sinun käyttäjänäsi | Suojattu: Android pitää jokaisen sovelluksen erillään, ja Keystore antaa avaimen vain relelle | Ei: DPAPI salaa käyttäjäkohtaisesti, ei sovelluskohtaisesti; sinuna toimiva ohjelma voi pyytää avainta samoin kuin rele | Ei: istuntosi avainnippu ei erottele sovelluksia toisistaan |
| rootattu puhelin tai työkalu, joka suorittaa koodia sovelluksena | Ei | — | — |
| jollakulla on lukitsematon laite kädessään | Vain relen PIN tai sormenjälki, jos otat ne käyttöön | Sama | Sama |
| joku lukee relen muistia sen ollessa käynnissä | Ei | Ei | Ei |
Työpöytäkoneella DPAPI:n ja avainnipun raja on sama kuin minkä tahansa ohjelman: ne suojaavat muilta käyttäjiltä ja siltä, joka vie levyn, mutta eivät haitalliselta ohjelmalta, joka jo toimii sinun käyttäjänäsi. Jos tämä tapaus huolestuttaa sinua, sinua suojaa järjestelmälevyn salaus (BitLocker, LUKS) ja se, ettet suorita ohjelmia, joihin et luota. Linuxissa ilman avainnippua (ei Secret Serviceä) rele ei käynnisty ja kertoo miksi: se ei koskaan säilytä avainta salaamattomana.
Kuka pääsee sisään itse laitteella. Rele kuuntelee vain osoitteessa
127.0.0.1, ja mikä tahansa laitteen sovellus tai selaimen verkkosivu voi
tavoittaa tämän osoitteen. Siksi:
- Sovellus on pariliitettävä: se näkyy relen näytöllä, ja sinä hyväksyt sen (PIN-koodilla tai sormenjäljellä, jos olet ottanut ne käyttöön). Mikä tahansa sovellus voi antaa itselleen minkä tahansa nimen: hyväksy vain, jos pyysit sitä juuri äsken siitä sovelluksesta.
- Verkkosivu on aina pariliitettävä, ja pariliitos on voimassa vain siellä, missä se tehtiin: laitteen sovelluksen pariliitos ei avaa mitään verkkosivulle, vaikka sivu allekirjoittaisi samalla avaimella.
- Pariliitetty sovellus lukee ja kirjoittaa vain niitä tapahtumatyyppejä, jotka annoit sille, ja poistaa vain niitä, joita se saa kirjoittaa. Sen oikeuden peruminen katkaisee sen yhteyden heti.
- Pariliittämätön sovellus lukee vain julkisia tapahtumiasi (jotka ovat joka tapauksessa julkisia) eikä kirjoita mitään, ellet ota käyttöön asetusta, joka päästää laitteen pariliittämättömät sovellukset sisään.
- Yksityiset tapahtumat annetaan vain sille, joka todistaa NIP-42:lla, että hänellä on avain, johon ne kuuluvat, ja kirjekuori vain sen vastaanottajalle.
Mitä se ei tässä suojaa:
- Laitteen haitallinen sovellus voi hidastaa relettä tai saada sen kuluttamaan muistia. Mitään yksityistä se ei pysty sillä tavalla lukemaan.
- Kun rele on levossa tai ei ole käynnissä, sen portti on vapaana. Androidissa se menee lepoon 10 minuutin jälkeen ilman yhteyksiä; työpöytäkoneella portti on vapaana niin kauan kuin et ole käynnistänyt relettä. Toinen sovellus voisi kuunnella siinä ja esiintyä relenä. Herkos-sovellukset tulevat tarkistamaan relen avaimen ennen kuin lähettävät sille mitään yksityistä; ne eivät vielä tee niin, ja siihen asti tämä on todellinen raja.
- Työpöytäkoneella tietokoneen muut käyttäjät voivat muodostaa yhteyden pariliittämättömänä sovelluksena: lukea julkisia tapahtumiasi ja pyytää pariliitosta.
Lähiverkko, jos otat sen käyttöön (oletuksena se on pois päältä):
- Vain
wss://, relen omalla varmenteella; laitteen ulkopuolella ei koskaan salaamatontaws://-yhteyttä. - Ei mitään ennen tunnistautumista (NIP-42) listallasi olevalla avaimella. Yhteys, joka ei tee sitä 30 sekunnissa, suljetaan, ja lähiverkolla on oma yhteysmääränsä: se ei koskaan vie laitteen sovellusten yhteyksiä.
- Listalla oleva avain lukee julkisia tapahtumiasi ja omia yksityisiä tapahtumiaan ja kirjoittaa vain tapahtumia, jotka se on allekirjoittanut. Sen poistaminen listalta katkaisee sen yhteyden.
- Varmenne kelpaa vain kodin nimille (
localhost,.local, yksityiset osoitteet): vaikka joku varastaisi sen avaimen, siitä ei olisi hyötyä internet-verkkotunnuksen allekirjoittamiseen laitteilla, joihin varmenne on asennettu.
Mitä se ei tässä suojaa: kuka tahansa samassa verkossa näkee, että laitteella on avoin portti ja kuinka paljon liikennettä sen kautta kulkee, joskaan ei sitä, mitä; ja jos laitteella on julkinen osoite (ei reititintä välissä), portti näkyy internetiin, vaikka se edelleen vaatii listallasi olevan avaimen.
Kopiot. Salatulla kopiolla on salasana (scrypt ja XChaCha20-Poly1305): ilman sitä kukaan ei voi avata sitä, emme mekään. JSONL-vienti ei ole salattu, ja se sisältää yksityiset tapahtumasi selkokielisinä; sovellus varoittaa sinua siitä.
Lukko (PIN sekä sormenjälki tai Windows Hello) kysytään, kun sovellus avataan, kun olet ollut poissa 30 sekuntia ja kun hyväksyt pariliitoksen. Se on mukavuuseste, kuten Mailissa: se ei salaa mitään. Androidissa, kun PIN on asetettu, kuvakaappauksia ei voi ottaa eikä pikkukuvaa näy viimeisimpien sovellusten joukossa, ja Android 12:sta alkaen minkään muun sovelluksen ikkuna ei voi asettua relen ikkunan päälle, kun käytät sitä.
Herkos Drive: mitä se suojaa ja mitä ei
Herkos Drive säilyttää tiedostosi Blossom-palvelimilla ja tiedostojesi ja
kansioidesi luettelon Nostr-releillä, molemmat laitteellasi salattuina. Tässä
on se, mikä niitä suojaa, ja missä rajat ovat. Kaikki yksityiskohdat ovat
tiedostossa spec-drive.md ja uhkamallissa amenazas-drive.md hakemistossa
packages/herkos_drive_protocol/; se, mitä kukin rele ja palvelin näkee, on
tietosuojaselosteessa. Ilmoita Driven
tietoturvaongelmista samalla tavalla kuin muistakin (edellä).
Mitä releet ja palvelimet eivät voi tehdä:
- Lukea tiedostojasi tai niiden nimiä. Tiedoston jokainen lohko salataan AES-256-GCM:llä tiedoston kyseisen version omalla avaimella; nimet, kansiot, koot, päivämäärät ja avaimet kulkevat XChaCha20-Poly1305:llä sinetöityinä sen kansion avaimella, jossa ne ovat. Mitään ei johdeta sisällöstä: sama tiedosto kahdesti lähetettynä tuottaa eri lohkot.
- Muuttaa, vaihtaa tai siirtää mitään huomaamatta. Jokainen lohko tarkistetaan sen tiedoston merkintään sinetöityä manifestia vasten, ja jokaisen merkinnän allekirjoittaa taltion avain ja se on sinetöity omaan paikkaansa (taltio, tunniste ja kansio): rele ei voi esittää yhtä merkintää toisena eikä yhtä lohkoa toisena.
- Palauttaa vanhaa versiota. Sovellus ei koskaan hyväksy merkintää, joka on vanhempi kuin se, joka sillä jo on samalle tunnisteelle.
- Kirjoittaa sinun nimissäsi pelkällä taltion avaimella. Laitteidesi kirjoittamassa on omistajan merkki, HMAC avaimella, jota mikään linkki ei anna; merkintää tai poistoa ilman sitä ei hyväksytä, ja sovellus varoittaa sinua.
Mitä se ei suojaa:
- Drivesi kuviota. Releet voivat laskea tiedostosi ja kansiosi, nähdä puun muodon ja sen, milloin kukin merkintä muuttuu; palvelimet näkevät suunnilleen, kuinka suuri kukin tiedosto on (lohkot täytetään 64 KiB:hen, merkinnät kahden potenssiin). Jokainen rele ja palvelin näkee IP-osoitteesi. Käytä Toria tai Orbotia järjestelmätasolla, jos sillä on sinulle merkitystä.
- Sitä, minkä joku on jo ladannut. Linkin tai henkilön poistaminen antaa heti uudet avaimet sille, minkä hän pystyi avaamaan, joten hän ei avaa sitä, mitä lisäät myöhemmin; se ei voi ottaa takaisin sitä, minkä hän jo tallensi.
- Vuotanutta linkkiä. Linkki ilman salasanaa on avain. Selain voi tallentaa sen historiaansa ennen kuin sivu poistaa sen osoiteriviltä. Kaikessa arkaluonteisessa anna linkille salasana, joka lähetetään muuta kautta, tai jaa henkilön tilille. Heikon salasanan voi murtaa ajan kanssa: jolla linkki on, voi yrittää offline-tilassa.
- Sivua
herkos.app/f/, joka toimii linkin avaavan henkilön selaimessa. Se tarjoillaan tiukalla Content-Security-Policyllä, Subresource Integrityllä ja ilman kolmannen osapuolen koodia, mutta verkkoisännän hallitsija voisi tarjoilla toisenlaisen sivun. Se on jokaisen selaimessa salausta purkavan verkkosivun raja. - Sitä, jolla taltion avain oli (sinun, tai kansion linkin mukana annettu): hän voi yhä poistaa lohkot, jotka sillä lähetettiin, kunnes ne lähetetään uudelleen. Voit vaihtaa taltion avaimen (Asetukset → Taltion avain): muut laitteesi seuraavat itsestään.
- Laitettasi. Tiedostoluettelo on välimuistissa salattuna, ja sen avain on järjestelmän suojatussa tallennustilassa; lataamasi tai avaamasi tiedosto kirjoitetaan salaamattomana valitsemaasi paikkaan. Driven PIN on mukavuuseste, kuten Mailissa.
- Kvanttitietokonetta myöhemmin. Lohkot ja sinetit ovat symmetrisiä (AES-256, XChaCha20), mutta paikantimesi on salattu NIP-44:llä secp256k1:n päällä: joku, joka säilyttää sen tänään ja murtaa secp256k1:n huomenna, voisi avata koko Driven.
Miten sitä tarkistetaan. Kaksi sisäistä katselmointia uhkamallia vasten (2. marraskuuta 2026) ja niiden korjaukset; testit siitä, mitä kukin tapahtuma ja lohko näyttää; kaikkien ulkoa tulevaa sisältöä lukevien osien (tapahtumat, sinetit, manifestit, linkit, varmuuskopiot) fuzz-testaus. Ulkoista auditointia ei vielä ole: sellainen on suunniteltu ennen julkista betaa, ja sen raportti julkaistaan kokonaisuudessaan. Drive on vielä kehitteillä.
Tuetut versiot
Tietoturvakorjaukset tehdään uusimpaan julkaistuun versioon. Projektin koon vuoksi vanhempia versioita ei ylläpidetä — päivitä ennen kuin ilmoitat.