Kebijakan Keamanan
Herkos menangani kunci privat dan pesan terenkripsi, jadi kami menanggapi laporan keamanan dengan serius dan lebih suka mengetahui masalah sejak dini daripada terlambat.
Melaporkan kerentanan
Mohon jangan membuka issue publik untuk masalah keamanan.
Laporkan secara pribadi melalui fitur pelaporan kerentanan pribadi GitHub, atau melalui email ke security@herkos.email.
Hal-hal yang berguna untuk disertakan: apa masalahnya, cara mereproduksinya, platform dan versi yang Anda uji, serta apa yang dapat dicapai penyerang. Bukti konsep (proof of concept) sangat membantu.
Jangan pernah menyertakan nsec, kunci rahasia, atau rahasia bunker Anda sendiri dalam laporan.
Kami berupaya mengonfirmasi penerimaan laporan dalam beberapa hari. Karena Herkos adalah proyek kecil, mohon beri waktu yang wajar untuk perbaikan sebelum mengungkapkannya secara publik. Kami dengan senang hati mencantumkan nama Anda dalam advisori, kecuali Anda tidak menginginkannya.
Yang termasuk cakupan
Aplikasi Herkos itu sendiri: penanganan dan penyimpanan kunci, enkripsi dan
dekripsi pesan (termasuk pemeriksaan pengirim NIP-59 dan isolasi Bcc
di local_packages/nostr_mail), kunci aplikasi, komunikasi dengan relay dan jembatan,
penanganan lampiran, serta pipeline build dan rilis.
Yang tidak termasuk cakupan
- Protokol Nostr dan NIP-nya itu sendiri — laporkan ke pihak hulu.
- Relay, jembatan, dan server Blossom yang dioperasikan oleh pihak ketiga. Herkos disertai setelan default tetapi tidak menjalankannya; laporkan masalah kepada operatornya.
- Proyek hulu Nostr Mail Client, kecuali masalahnya khusus terkait perubahan yang dibuat di Herkos.
- Kurangnya penguatan keamanan yang sudah kami dokumentasikan sebagai batasan yang diketahui (lihat di bawah).
Batasan yang diketahui, dinyatakan apa adanya
Ini adalah kompromi desain, bukan kerentanan. Kami lebih suka menuliskannya daripada membiarkan seseorang mengetahuinya dengan cara yang menyakitkan:
- Email ke alamat tradisional tidak terenkripsi end-to-end. Pesan antarpengguna Nostr menggunakan gift wrap NIP-17 dan terenkripsi E2E. Saat Anda menulis ke alamat email biasa, jembatan mengonversi pesan tersebut dan dapat membacanya.
- Kunci aplikasi (PIN dan biometrik) adalah penghalang praktis, bukan enkripsi data tersimpan. Kunci ini menghentikan orang yang mengambil perangkat yang tidak terkunci; kunci ini tidak melindungi dari penyerang yang memiliki akses penuh ke perangkat atau penyimpanannya.
- Di Windows, autentikasi khusus biometrik tidak dapat diwajibkan. Windows Hello tidak mengizinkan pemilihan metode, sehingga PIN sistem selalu tetap tersedia sebagai cadangan.
- Kehilangan kunci berarti kehilangan akun. Tidak ada pemulihan, memang dirancang demikian.
- Metadata tidak sepenuhnya tersembunyi. Relay dapat mengamati pola koneksi, dan setiap relay melihat alamat IP Anda, bahkan ketika relay tersebut tidak dapat membaca isi pesan. Yang tidak dibocorkan Herkos (sejak 30-09-2026) adalah siapa menulis kepada siapa ketika relay meminta autentikasi NIP-42:
- Mencari tujuan pengiriman. Daftar relay dan daftar Blossom milik penerima
diminta melalui koneksi terpisah yang tidak pernah mengidentifikasi Anda, pertama-tama
di relay yang tidak mewajibkan autentikasi (
purplepag.es,user.kindpag.es,nos.lol,offchain.pub). - Profil dan penjadwal. Nama dan gambar yang ditampilkan untuk orang lain (kind 0), serta daftar relay DVM penjadwal saat Anda menjadwalkan atau membatalkan email, diminta dengan cara yang sama: secara anonim terlebih dahulu dan, jika relay bersikeras, dengan kunci sementara yang dijelaskan di bawah, tidak pernah dengan kunci Anda (sejak 01-10-2026; sebelumnya, relay yang meminta autentikasi mendapatkan kunci Anda, dan dapat mengetahui profil siapa yang sedang Anda lihat). Hanya profil Anda sendiri yang masih dibaca sebagai Anda.
- Pengiriman. Gift wrap dikirim ke relay DM milik penerima, melalui koneksi terpisah yang sama. Jika salah satunya mewajibkan autentikasi, Herkos menjawab dengan kunci yang dibuat khusus untuk keperluan itu dan hanya disimpan di memori, tidak pernah dengan kunci Anda; setiap akun di perangkat memiliki kuncinya sendiri. Relay tetap dapat melihat bahwa perangkat yang sama (IP yang sama, kunci sementara yang sama) mengirim beberapa amplop selama satu sesi.
- Email berukuran besar. Salinan terenkripsi dari email yang lebih besar dari 32 KB diunggah ke server Blossom, termasuk server milik penerima. Hanya server Anda sendiri (daftar Blossom Anda) yang menerima unggahan yang diotorisasi dengan kunci Anda. Server lain mana pun menerimanya secara anonim dan, jika server itu bersikeras meminta otorisasi, otorisasi yang ditandatangani dengan kunci sementara yang sama seperti di atas (sejak 01-10-2026; sebelumnya, setiap server mendapatkan kunci Anda). Server yang hanya menerima kunci yang dikenal akan menolaknya, dan salinannya tetap berada di server-server lainnya.
- Data Anda sendiri. Sinkronisasi kotak surat, label, setelan, dan draf Anda melakukan autentikasi, jika relay memintanya, sebagai akun pemilik data tersebut, bahkan saat beralih akun. Di relay Anda sendiri, hal itu tidak memberi tahu apa pun yang belum mereka ketahui: permintaan tersebut memang menyebutkan kunci Anda. Daftar relay dan daftar Blossom Anda sendiri bersifat publik dan diminta tanpa mengidentifikasi Anda, begitu pula relay yang disebutkan dalam tautan email.
- Status baca dan folder adalah metadata publik (untuk saat ini). Menandai email sebagai sudah dibaca, berbintang, diarsipkan, atau dipindahkan akan menerbitkan event label NIP-32 yang tidak terenkripsi dan terkait dengan kunci publik Anda, termasuk nama folder kustom. Pengirim yang mengetahui id email yang ia kirim kepada Anda dapat mengetahui kapan Anda menindaklanjutinya. Enkripsi label ini sudah direncanakan; sampai saat itu, anggaplah nama folder bersifat publik.
- Notifikasi push dan pengiriman terjadwal menggunakan layanan pihak ketiga. Server
push (
api.nmail.lisecara default) mengetahui kunci publik Anda, token push, dan kapan Anda menerima email; DVM penjadwal mengetahui kunci publik Anda dan pesan yang sudah terenkripsi yang harus diterbitkannya. Keduanya bersifat opsional (harus diaktifkan) dan didokumentasikan diPRIVACY.md. Teks notifikasi push dipilih oleh server push, dan Herkos hanya memercayainya ketika UnifiedPush mengirimkannya dalam keadaan terenkripsi (RFC 8291); payload yang tidak terenkripsi hanya membangunkan aplikasi untuk mengambil email itu sendiri. - Versi web menyimpan kunci Anda di browser, tempat paling lemah untuknya. Aplikasi yang terinstal menyerahkan kunci rahasia Anda ke penyimpanan aman sistem operasi (Android Keystore, Windows Credential Manager, libsecret, iOS/macOS Keychain). Browser tidak memiliki semua itu: kunci berada di penyimpanan origin dan diproses lewat JavaScript pada setiap tanda tangan, dalam jangkauan kode apa pun yang berjalan di halaman — ekstensi browser yang memiliki akses ke semua situs, bug XSS di aplikasi atau di dependensi, deployment yang telah dimanipulasi — dan dalam jangkauan infostealer apa pun yang menyalin profil browser. Selain itu, tidak ada saat di mana Anda memverifikasi kode sekali saja: biner yang ditandatangani diperiksa saat instalasi, sedangkan halaman web mengirimkan kode baru pada setiap kunjungan. Masuklah ke versi web dengan penanda tangan jarak jauh (bunker NIP-46, Amber), agar kunci tidak pernah mencapai browser, atau perlakukan versi web sebagai identitas sekali pakai dan simpan kunci asli Anda di aplikasi yang terinstal.
- Email lewat jembatan hanya dapat dipercaya sejauh jembatannya dapat dipercaya. Herkos memverifikasi bahwa
pesan yang ditandai berasal dari jembatan benar-benar ditandatangani oleh jembatan yang telah
Anda konfigurasi (atau salah satu jembatan default). Herkos tidak dapat memverifikasi apa pun tentang
alamat
From:lama yang diteruskan oleh jembatan. - Lampiran dibuka oleh sistem operasi. Herkos tidak pernah menjalankan jenis file yang dapat dieksekusi atau skrip, dan meminta konfirmasi sebelum menyerahkan lampiran lain yang tidak dapat dipratinjau ke aplikasi default sistem, tetapi aplikasi yang membuka file tersebut berada di luar kendali kami.
Versi yang didukung
Perbaikan keamanan diterapkan pada versi rilis terbaru. Mengingat ukuran proyek ini, versi lama tidak dipelihara — mohon perbarui sebelum melapor.