Güvenlik politikası
Herkos özel anahtarları ve şifreli mesajları işler; bu yüzden güvenlik bildirimlerini ciddiye alırız ve bir sorunu geç değil, erken duymayı tercih ederiz.
Bir güvenlik açığını bildirme
Lütfen güvenlik sorunları için herkese açık bir issue açmayın.
Sorunu security@herkos.email adresine e-postayla gizli olarak bildirin.
Eklemeniz yararlı olacaklar: sorunun ne olduğu, nasıl yeniden üretileceği, hangi platformu ve sürümü denediğiniz ve bir saldırganın ne elde edebileceği. Bir kavram kanıtı (proof of concept) çok yardımcı olur.
Bir bildirime asla kendi nsec'inizi, özel anahtarınızı veya bunker sırrınızı eklemeyin.
Bildirimleri birkaç gün içinde onaylamayı hedefliyoruz. Herkos küçük bir proje olduğundan, herkese açıklamadan önce lütfen bir düzeltme için makul bir süre tanıyın. Aksini tercih etmediğiniz sürece güvenlik bülteninde adınızı anmaktan memnuniyet duyarız.
Kapsamda olanlar
Herkos uygulamasının kendisi: anahtarların işlenmesi ve saklanması, mesajların
şifrelenmesi ve çözülmesi (local_packages/nostr_mail içindeki NIP-59 gönderici
denetimleri ve Bcc yalıtımı dâhil), uygulama kilidi, relay ve köprü iletişimi,
eklerin işlenmesi ve derleme ile yayım süreci. Herkos Drive için ayrıca protokol
paketi (packages/herkos_drive_protocol) ve bağlantılarını açan sayfa
(herkos.app/f/); aşağıdaki kendi bölümüne bakın.
Kapsam dışında olanlar
- Nostr protokolünün ve NIP'lerinin kendisi — bunları kaynağına bildirin.
- Üçüncü taraflarca işletilen relay'ler, köprüler ve Blossom sunucuları. Herkos varsayılanlarla gelir ama onları işletmez; sorunları işletmecilerine bildirin.
- Kaynak proje Nostr Mail Client, sorun Herkos'ta yapılan değişikliklere özgü değilse.
- Bilinen bir sınırlama olarak zaten belgelediğimiz eksik sıkılaştırmalar (aşağıya bakın).
Bilinen sınırlamalar, açıkça
Bunlar güvenlik açığı değil, tasarım tercihleridir. Birinin bunları zor yoldan keşfetmesindense yazıya dökmeyi tercih ediyoruz:
- Geleneksel adreslere giden posta uçtan uca şifreli değildir. Nostr kullanıcıları arasındaki mesajlar NIP-17 gift wrap kullanır ve uçtan uca şifrelidir. Sıradan bir e-posta adresine yazdığınızda mesajı bir köprü dönüştürür ve onu okuyabilir.
- Uygulama kilidi (PIN ve biyometri) bir kolaylık engelidir, beklemedeki veri şifrelemesi değil. Kilidi açık bir cihazı eline alan birini durdurur; cihaza veya deposuna tam erişimi olan bir saldırgana karşı korumaz.
- Windows'ta yalnızca biyometrik kimlik doğrulama zorunlu kılınamaz. Windows Hello yöntemin seçilmesine izin vermez; bu yüzden sistem PIN'i her zaman yedek olarak kullanılabilir kalır.
- Anahtarınızı kaybetmek hesabı kaybetmek demektir. Tasarım gereği kurtarma yoktur.
- Üst veri tamamen gizlenmez. Relay'ler bağlantı örüntülerini gözlemleyebilir ve mesaj içeriğini okuyamasalar bile her relay IP adresinizi görür. Herkos'un (30-09-2026'dan beri) ele vermediği şey, bir relay NIP-42 kimlik doğrulaması istediğinde kimin kime yazdığıdır:
- Nereye teslim edileceğini bulmak. Bir alıcının relay ve Blossom listeleri,
sizi hiçbir zaman tanıtmayan ayrı bir bağlantı üzerinden, önce kimlik doğrulaması
istemeyen relay'lerde (
purplepag.es,user.kindpag.es,nos.lol,offchain.pub) sorulur. - Profiller ve zamanlayıcı. Başka herhangi biri için gösterilen ad ve resim (kind 0) ile bir e-postayı zamanladığınızda veya iptal ettiğinizde zamanlayıcı DVM'nin relay listesi aynı şekilde sorulur: önce anonim olarak ve bir relay ısrar ederse aşağıda açıklanan geçici anahtarla, asla sizinkiyle (01-10-2026'dan beri; öncesinde kimlik doğrulaması isteyen bir relay anahtarınızı alıyor ve kimin profiline baktığınızı anlayabiliyordu). Yalnızca kendi profiliniz hâlâ siz olarak okunur.
- Teslim etmek. Gift wrap'ler alıcının DM relay'lerine, yine o ayrı bağlantı üzerinden gider. Bunlardan biri kimlik doğrulaması isterse Herkos, bu amaçla oluşturulmuş ve yalnızca bellekte tutulan bir anahtarla yanıt verir, asla sizinkiyle; cihazdaki her hesabın kendine ait bir anahtarı vardır. Relay yine de bir oturum boyunca aynı cihazın (aynı IP, aynı geçici anahtar) birkaç zarf gönderdiğini görebilir.
- Büyük e-postalar. 32 KB'tan büyük bir e-postanın şifreli kopyası, alıcılarınki dâhil Blossom sunucularına yüklenir. Yüklemeyi anahtarınızla yetkilendirilmiş olarak yalnızca kendi sunucularınız (Blossom listeniz) alır. Diğer her sunucu onu anonim olarak alır ve bir yetkilendirmede ısrar ederse yukarıdaki aynı geçici anahtarla imzalanmış bir yetkilendirme alır (01-10-2026'dan beri; öncesinde her sunucu anahtarınızı alıyordu). Yalnızca bilinen anahtarları kabul eden bir sunucu onu reddeder ve kopya diğer sunucularda kalır.
- Kendi verileriniz. Posta kutunuzun, etiketlerinizin, ayarlarınızın ve taslaklarınızın eşitlenmesi, bir relay istediğinde, bir hesap değişimi sırasında bile verinin ait olduğu hesap olarak kimlik doğrular. Kendi relay'lerinizde bu, onlara bilmedikleri hiçbir şey söylemez: istekler zaten anahtarınızı adlandırır. Kendi relay ve Blossom listeleriniz herkese açıktır ve sizi tanıtmadan sorulur; bir e-posta bağlantısında adı geçen relay'ler de öyle.
- Okunma durumu ve klasörler (şimdilik) herkese açık üst veridir. Bir e-postayı okundu, yıldızlı, arşivlendi veya taşındı olarak işaretlemek, özel klasör adları dâhil, açık anahtarınıza bağlı şifrelenmemiş bir NIP-32 etiket olayı yayımlar. Size gönderdiği bir e-postanın kimliğini bilen bir gönderici, onunla ne zaman işlem yaptığınızı anlayabilir. Bu etiketleri şifrelemek planlanıyor; o zamana kadar klasör adlarını herkese açık sayın.
- Anlık bildirimler ve zamanlanmış gönderim üçüncü taraf hizmetlerini kullanır.
Push sunucusu, bir tane seçerseniz (varsayılan olarak yok; istenirse
relay.nmail.liileapi.nmail.li), açık anahtarınızı, bir bildirim belirtecini ve posta aldığınız zamanı öğrenir; zamanlayıcı DVM açık anahtarınızı ve yayımlaması gereken, hâlihazırda şifreli mesajları öğrenir. İkisi de isteğe bağlıdır vePRIVACY.mdiçinde belgelenmiştir. Bir anlık bildirimin metnini push sunucusu seçer ve Herkos ona yalnızca UnifiedPush onu şifreli olarak teslim ettiğinde (RFC 8291) güvenir; şifrelenmemiş bir yük yalnızca uygulamayı postayı kendisi getirsin diye uyandırır. - Web sürümü anahtarınızı tarayıcıda tutar; bu, anahtar için en zayıf yerdir. Kurulu uygulamalar özel anahtarınızı işletim sisteminin güvenli deposuna teslim eder (Android Keystore, Windows'ta DPAPI, libsecret, iOS/macOS anahtar zinciri). Bir tarayıcıda bunların hiçbiri yoktur: anahtar sitenin deposunda durur ve her imzada JavaScript'ten geçer; sayfada çalışan her kodun — tüm sitelere erişimi olan bir tarayıcı eklentisi, uygulamada veya bir bağımlılıkta bir XSS açığı, kurcalanmış bir dağıtım — ve tarayıcı profilini kopyalayan her bilgi hırsızının (infostealer) erişimi içindedir. Kodu bir kez doğruladığınız bir an da yoktur: imzalı bir ikili dosya kurulum sırasında denetlenir, bir web sayfası ise her ziyarette yeni kod sunar. Web sürümüne bir uzak imzalama uygulamasıyla (NIP-46 bunker, Amber) giriş yapın, böylece anahtar tarayıcıya hiç ulaşmaz; ya da onu harcanabilir bir kimlik olarak görün ve gerçek anahtarınızı kurulu bir uygulamada tutun.
- Köprüden gelen posta, ancak köprü kadar güvenilirdir. Herkos, bir köprüden geldiği
belirtilen bir mesajın gerçekten yapılandırdığınız bir köprü (veya varsayılanlardan biri)
tarafından imzalandığını doğrular. Köprünün aktardığı geleneksel
From:adresi hakkında ise hiçbir şeyi doğrulayamaz. - Ekleri işletim sistemi açar. Herkos çalıştırılabilir veya betik dosya türlerini asla başlatmaz ve önizlenemeyen diğer her eki sistemin varsayılan uygulamasına vermeden önce sorar; ancak dosyayı açan uygulama bizim denetimimizin dışındadır.
Herkos Local Relay: neyi korur, neyi korumaz
Herkos Local Relay, uygulamalarınızın olaylarını, özel olanlar da dâhil (taslaklar, özel listeler, aldığınız zarflar), cihazınızda saklar. Onları neyin koruduğu ve sınırın nerede olduğu, platform platform aşağıdadır. Relay'in güvenlik sorunlarını diğerleri gibi bildirin (yukarıya bakın).
Veritabanının tamamı şifrelidir, işlem günlüğü (journal) de dâhil (SQLite3 Multiple Ciphers, AEGIS-256). Anahtar, cihazda üretilen ve sistemin güvenli deposunda tutulan 32 rastgele bayttır: Android'de Keystore, Windows'ta DPAPI, Linux'ta anahtar zinciri (libsecret). Sizin bir parolanızla korunmaz, çünkü relay'in kendi kendine başlaması gerekir. Anahtar olmadan relay başlamaz ve bunu söyler: asla şifresiz bir veritabanı açmaz veya oluşturmaz ve açamadığı bir veritabanını asla silmez.
| Eğer… | Android | Windows | Linux |
|---|---|---|---|
| biri veritabanı dosyasını kopyalarsa (bir yedek, eşitlenen bir klasör, bir disk görüntüsü) | Korunur | Korunur | Korunur |
| cihaz veya disk kapalıyken çalınırsa | Korunur: anahtar Keystore'dadır | Korunur, Windows oturum açma parolanızı bilmiyorlarsa: DPAPI anahtarı onunla korur | Korunur, anahtar zincirinizin parolasını bilmiyorlarsa (neredeyse her zaman oturumunuzun parolasıdır) |
| aynı cihazda başka bir kullanıcı hesabı varsa | Korunur | Korunur: DPAPI kullanıcı başınadır | Korunur: anahtar zinciri kullanıcı başınadır |
| sizin kullanıcınızla başka bir uygulama veya program çalışıyorsa | Korunur: Android her uygulamayı ayrı tutar ve Keystore anahtarı yalnızca relay'e verir | Hayır: DPAPI uygulama başına değil, kullanıcı başına şifreler; sizin olarak çalışan bir program anahtarı tıpkı relay gibi isteyebilir | Hayır: oturumunuzun anahtar zinciri uygulamaları birbirinden ayırmaz |
| telefon root'luysa veya uygulama olarak kod çalıştıran bir araç varsa | Hayır | — | — |
| biri kilidi açık cihazı elinde tutuyorsa | Ayarladıysanız yalnızca relay'in PIN'i veya parmak izi | Aynı | Aynı |
| biri relay çalışırken belleğini okuyorsa | Hayır | Hayır | Hayır |
Masaüstünde DPAPI'nin ve anahtar zincirinin sınırı her programınkiyle aynıdır: diğer kullanıcılara ve diski alıp götüren kişiye karşı korurlar, ama zaten sizin kullanıcınızla çalışan kötü amaçlı bir programa karşı korumazlar. Bu durum sizi endişelendiriyorsa, sizi koruyan şey sistem diskinin şifrelenmesi (BitLocker, LUKS) ve güvenmediğiniz programları çalıştırmamaktır. Anahtar zinciri olmayan (Secret Service olmayan) bir Linux'ta relay başlamaz ve nedenini açıklar: anahtarı asla açık olarak saklamaz.
Cihazın kendisinde kim girer. Relay yalnızca 127.0.0.1 üzerinde dinler
ve cihazdaki her uygulama ya da tarayıcıdaki bir web sayfası bu adrese
ulaşabilir. Bu yüzden:
- Bir uygulamanın eşleşmesi gerekir: relay'in ekranında görünür ve siz onu onaylarsınız (ayarladıysanız PIN veya parmak iziyle). Her uygulama kendine istediği adı verebilir: yalnızca az önce o uygulamadan istediyseniz onaylayın.
- Bir web sayfası her zaman eşleşir ve bir eşleştirme yalnızca yapıldığı yerden geçerlidir: cihazdaki bir uygulamanın eşleştirmesi, aynı anahtarla imzalasa bile bir web sayfasına hiçbir şey açmaz.
- Eşleştirilmiş bir uygulama yalnızca ona verdiğiniz olay türlerini okur ve yazar ve yalnızca yazabildiklerini siler. Eşleştirmesini kaldırmak onun bağlantısını hemen keser.
- Eşleştirilmemiş bir uygulama yalnızca herkese açık olaylarınızı (zaten herkese açıktırlar) okur ve hiçbir şey yazmaz; cihazın eşleştirilmemiş uygulamalarını içeri alan ayarı açmadığınız sürece.
- Özel olaylar yalnızca ait oldukları anahtara sahip olduğunu NIP-42 ile kanıtlayana, bir zarf da yalnızca alıcısına verilir.
Burada neyi korumaz:
- Cihazdaki kötü amaçlı bir uygulama relay'i yavaşlatabilir veya ona bellek harcatabilir. Bu yolla özel hiçbir şeyi okuyamaz.
- Relay uyurken veya çalışmıyorken portu boştadır. Android'de 10 dakika bağlantı olmazsa uykuya geçer; masaüstünde siz başlatmadığınız sürece port boştur. Başka bir uygulama orada dinleyip kendini relay olarak tanıtabilir. Herkos uygulamaları, relay'e özel bir şey göndermeden önce onun anahtarını denetleyecek; henüz bunu yapmıyorlar ve o zamana kadar bu gerçek bir sınırdır.
- Masaüstünde, bilgisayarın diğer kullanıcıları eşleştirilmemiş bir uygulama olarak bağlanabilir: herkese açık olaylarınızı okuyabilir ve eşleştirme isteyebilir.
Yerel ağ, açarsanız (varsayılan olarak kapalıdır):
- Yalnızca
wss://, relay'in kendi sertifikasıyla; cihazın dışında asla şifresizws://yok. - Listenizdeki bir anahtarla kimlik doğrulamadan (NIP-42) önce hiçbir şey. Bunu 30 saniye içinde yapmayan bir bağlantı kapatılır ve yerel ağın kendi bağlantı sayısı vardır: cihazın uygulamalarınınkini asla almaz.
- Listedeki bir anahtar herkese açık olaylarınızı ve kendi özel olaylarını okur ve yalnızca kendi imzaladığı olayları yazar. Listeden çıkarılması onun bağlantısını keser.
- Sertifika yalnızca ev içi adlar (
localhost,.local, özel adresler) için geçerlidir: biri onun anahtarını çalsa bile, bu anahtar onu yükleyen cihazlarda bir İnternet alan adını imzalamaya yaramaz.
Burada neyi korumaz: aynı ağdaki herkes cihazın açık bir portu olduğunu ve oradan ne kadar trafik geçtiğini görür, ama neyin geçtiğini görmez; cihazın herkese açık bir adresi varsa (arada yönlendirici yoksa) o port İnternet'ten görülebilir, ancak yine de listenizdeki bir anahtarı ister.
Yedekler. Şifreli yedeğin bir parolası vardır (scrypt ve XChaCha20-Poly1305): parola olmadan, biz dâhil, kimse onu açamaz. JSONL dışa aktarımı şifreli değildir ve özel olaylarınızı açık metin olarak taşır; uygulama sizi uyarır.
Kilit (bir PIN, artı parmak izi veya Windows Hello) uygulama açılırken, uygulamadan 30 saniye uzak kaldıktan sonra ve bir eşleştirmeyi onaylamak için istenir. Mail'de olduğu gibi bir kolaylık engelidir: hiçbir şeyi şifrelemez. Android'de PIN ayarlıyken ekran görüntüsü alınamaz ve son uygulamalar arasında küçük resim görünmez; Android 12'den itibaren de siz relay'i kullanırken başka hiçbir uygulamanın penceresi onun penceresinin üstüne çıkamaz.
Herkos Drive: neyi korur, neyi korumaz
Herkos Drive dosyalarınızı Blossom sunucularında, dosyalarınızın ve
klasörlerinizin listesini ise Nostr relay'lerinde tutar; her ikisi de
cihazınızda şifrelenmiştir. Onları koruyan şey budur ve sınırlar buradadır.
Ayrıntıların tamamı packages/herkos_drive_protocol/ içindeki spec-drive.md
ile amenazas-drive.md tehdit modelindedir; her relay'in ve sunucunun ne
gördüğü gizlilik politikasında yer alır.
Drive'ın güvenlik sorunlarını diğerleri gibi bildirin (yukarıda).
Relay'lerin ve sunucuların yapamadıkları:
- Dosyalarınızı veya adlarını okumak. Bir dosyanın her bloğu, kendi revizyonunun anahtarıyla AES-256-GCM ile şifrelenir; adlar, klasörler, boyutlar, tarihler ve anahtarlar, içinde bulundukları klasörün anahtarıyla XChaCha20-Poly1305 ile mühürlenmiş olarak gider. Hiçbir şey içerikten türetilmez: aynı dosya iki kez yüklendiğinde farklı bloklar verir.
- Fark edilmeden bir şeyi değiştirmek, takas etmek veya taşımak. Her blok, dosyasının kaydında mühürlü manifeste göre denetlenir; her kayıt birim anahtarıyla imzalanır ve kendi yeri (birim, tanımlayıcı ve klasör) için mühürlenir: bir relay bir kaydı başka bir kayıt, bir bloğu da başka bir blok yerine geçiremez.
- Eski bir sürümü geri getirmek. Uygulama, aynı tanımlayıcı için elinde olandan daha eski bir kaydı asla kabul etmez.
- Yalnızca birim anahtarıyla sizin adınıza yazmak. Cihazlarınızın yazdıkları sahibin işaretini taşır: hiçbir bağlantının vermediği bir anahtarla oluşturulan bir HMAC; bu işaret olmayan bir kayıt veya silme kabul edilmez ve uygulama sizi uyarır.
Korumadıkları:
- Drive'ınızın örüntüsü. Relay'ler dosyalarınızı ve klasörlerinizi sayabilir, ağacın biçimini ve her kaydın ne zaman değiştiğini görebilir; sunucular her dosyanın kabaca ne büyüklükte olduğunu görür (bloklar 64 KiB'ye, kayıtlar ikinin bir kuvvetine doldurulur). Her relay ve sunucu IP adresinizi görür. Bu sizin için önemliyse sistem düzeyinde Tor veya Orbot kullanın.
- Birinin zaten indirdikleri. Bir bağlantıyı veya bir kişiyi kaldırmak, onun açabildiklerine hemen yeni anahtarlar verir; böylece sonradan eklediklerinizi açamaz; ancak zaten kaydettiklerini geri alamaz.
- Sızmış bir bağlantı. Parolasız bir bağlantının kendisi anahtardır. Tarayıcı, sayfa onu adres çubuğundan kaldırmadan önce geçmişinde tutabilir. Hassas her şey için bağlantıya başka bir yoldan gönderilen bir parola verin ya da kişinin hesabıyla paylaşın. Zayıf bir parola zamanla kırılabilir: bağlantıya sahip olan kişi çevrimdışı deneyebilir.
herkos.app/f/sayfası, bir bağlantıyı açan kişinin tarayıcısında çalışır. Sıkı bir Content-Security-Policy, Subresource Integrity ile ve üçüncü taraf kodu olmadan sunulur, ancak web barındırmayı denetleyen kişi farklı bir sayfa sunabilir. Bu, tarayıcıda şifre çözen her web sayfasının sınırıdır.- Birim anahtarına sahip olmuş kişi (sizinki ya da bir klasör bağlantısıyla verilmiş olanı): onunla yüklenmiş blokları yeniden yüklenene kadar hâlâ silebilir. Birim anahtarını değiştirebilirsiniz (Ayarlar → Birim anahtarı): diğer cihazlarınız kendiliğinden uyar.
- Cihazınız. Dosya listesi, anahtarı sistemin güvenli depolamasında olmak üzere şifreli olarak önbellekte tutulur; indirdiğiniz veya açtığınız bir dosya seçtiğiniz yere şifresiz yazılır. Drive'ın PIN'i, Mail'de olduğu gibi bir kolaylık engelidir.
- İleride bir kuantum bilgisayar. Bloklar ve mühürler simetriktir (AES-256, XChaCha20), ancak bulucunuz secp256k1 üzerinde NIP-44 ile şifrelenir: onu bugün saklayıp yarın secp256k1'i kıran biri Drive'ın tamamını açabilir.
Nasıl denetlendiği. Tehdit modeline göre iki iç inceleme (2 Kasım 2026) ve bunların düzeltmeleri; her olayın ve bloğun neyi gösterdiğine dair testler; dışarıdan gelen her şeyi (olaylar, mühürler, manifestler, bağlantılar, yedekler) okuyan her bileşenin fuzzing ile test edilmesi. Henüz harici bir denetim yok: herkese açık betadan önce bir denetim planlanmıştır ve raporu eksiksiz yayımlanacaktır. Drive hâlâ geliştirme aşamasındadır.
Desteklenen sürümler
Güvenlik düzeltmeleri yayımlanmış en son sürüme uygulanır. Projenin boyutu göz önüne alındığında eski sürümler sürdürülmez — lütfen bildirmeden önce güncelleyin.