Lewati ke konten
Kembali ke Nymchat

Basis pengetahuan Di bawah tenda

Protokol dan acara

Apa yang sebenarnya dilakukan Nymchat, bagi siapa pun yang menentangnya, mengauditnya, atau membaca peristiwa dari klien Nostr lain.

Jenis acara

BaikDigunakan untukCatatan
0Metadata profilProfil Nostr standar: nama, gambar, spanduk, tentang, lud16.
5Permintaan penghapusanNIP-09.
7ReaksiNIP-25, dengan a ['k', originalKind] tag sehingga reaksi diajukan terhadap jenis saluran yang tepat.
13SegelLapisan tengah pesan NIP-17.
14Rumor pesan pribadiTidak ditandatangani, dan tidak pernah diterbitkan sendiri. Sebuah jawaban thread membawa ['nymthread', rootId] tag di dalam rumor yang dienkripsi, merujuk ke id pesan yang dibagikan dari akar.
1059Bungkus kadoNIP-59. Apa yang sebenarnya mencapai relay untuk pesan pribadi dan obrolan grup.
1984PelaporanNIP-56.
9734 / 9735Permintaan zap dan tanda terima zapNIP-57.
10030Daftar paket emoji khususNIP-30.
20000Pesan saluran geohashSingkat, ditandai ['g', geohash]Sebuah jawaban thread menambahkan NIP-10 yang ditandai ['e', rootId, '', 'root'] Hari ini
23333Pesan saluran bernamaSingkat, ditandai ['d', channel]Sebuah jawaban thread menambahkan NIP-10 yang ditandai ['e', rootId, '', 'root'] Hari ini
24420 / 24421Indikator pengetikan publik dan tanda terima telah dibacaKhusus Nymchat, untuk saluran publik.
25051 / 25052Pensinyalan peer-to-peer dan status transfer fileKhusus Nymchat.
30030Kumpulan emoji khususNIP-30.
30078data aplikasiNIP-78. Jajak pendapat, sinkronisasi pengaturan terenkripsi, dan pengumuman kunci pasca-kuantum (diberi tag nym-pq, membawa kunci publik ML-KEM-768 dengan masa berlaku NIP-40).
69420Tanda terima baca pribadi dan status pengirimanKhusus Nymchat, dibawa sebagai rumor di dalam bungkus kado. Jenis yang terpisah dari 14 sengaja, agar klien NIP-17 lainnya tidak memberikan pesan langsung kosong untuk setiap tanda terima.

NIP Nymchat mengimplementasikan

GIGITApa yang diberikannya kepada Nymchat
NIP-07Masuk dengan ekstensi browser.
NIP-09Permintaan penghapusan.
NIP-10Tag jawaban yang ditandai – bagaimana thread saluran menandai jawaban pada pesan akarnya.
NIP-13Bukti kerja. Pesan keluar ditambang setidaknya hingga 16 bit.
NIP-17Pesan langsung pribadi, dan dasar untuk obrolan grup.
NIP-25Reaksi.
NIP-30Emoji khusus.
NIP-40Stempel waktu kedaluwarsa — pesan menghilang.
NIP-44Enkripsi berversi, digunakan untuk segel, pembungkus, dan sinkronisasi pengaturan.
NIP-46Penandatanganan jarak jauh — bunker://.
NIP-56Pelaporan.
NIP-57Sambaran petir.
NIP-59Bungkus kado.
NIP-78Data aplikasi sewenang-wenang.
NIP-98Otentikasi HTTP, untuk titik akhir yang dihosting.

Kriptografi

Di manaApa
Identitas dan tanda tangansecp256k1 dengan tanda tangan Schnorr (BIP-340), seperti yang ditentukan Nostr.
Pesan pribadi dan obrolan grupNIP-44 v2: ECDH pada secp256k1, HKDF-SHA256, ChaCha20 dengan HMAC-SHA256, dan padding sehingga panjang ciphertext tidak memberikan panjang pesan.
Pesan pribadi dan obrolan grup, antar pengguna NymchatKelebihan NIP-44 v2 yang sama, tidak dimodifikasi, ditutup untuk kedua kalinya di dalam ChaCha20-Poly1305 yang dikunci dari encapsulation ML-KEM-768 (FIPS 203) melalui HKDF-SHA256. pq2. prefix sehingga pembaca memilih jalur dengan memeriksa payload. kedua lapisan harus rusak untuk memulihkan pesan. lihat enkripsi tahan kuantum.
Sesi mesh BluetoothNoise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 untuk tanda tangan pengumuman, SHA-256 dan HMAC di bawahnya.
Identitas saat istirahatAES-GCM-256. Kuncinya berasal dari PBKDF2-SHA256 dengan 310.000 iterasi untuk kata sandi atau PIN, atau dari output WebAuthn PRF melalui HKDF-SHA256 untuk kunci sandi atau biometrik.
Panggilan dan transfer fileDTLS-SRTP milik WebRTC, dinegosiasikan melalui sinyal yang dibungkus NIP-17.
KeserampanganSeluruh platform CSPRNG — kunci, nonce, dan jitter stempel waktu bungkus kado.

Perlindungan metadata

Dua detail dalam jalur bungkus kado patut disebutkan, karena itulah yang membedakan NIP-59 dari "terenkripsi, tapi jelas dari Anda kepada mereka":

  • Setiap bungkus ditandatangani oleh a kunci satu kali dihasilkan untuk pesan itu saja, jadi tidak ada dua bungkus yang berbagi pengirim.
  • Setiap bungkusnya created_at adalah secara acak dimundurkan hingga dua jam menggunakan CSPRNG, jadi waktu kirim dan terima tidak bisa disejajarkan.

Obrolan grup menambah kefanaan yang berputar penerima kunci di atas itu — lihat Cara kerja enkripsi grup.

Membaca sumbernya

Primitif kripto ada di dalamnya js/nym-crypto.js Dan js/modules/key-vault.js di aplikasi web, dan di bawahnya android-ios-app/lib/core/crypto/ Dan lib/services/mesh/noise/ di aplikasi Flutter. Itu gudang adalah AGPL-3.0 dan lengkap — tidak ada komponen tertutup untuk mendapatkan kepercayaan.