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 dipublikasikan sendiri.
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].
23333Pesan saluran bernamaSingkat, ditandai ['d', channel].
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, dan sinkronisasi pengaturan terenkripsi.
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-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.
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.