Kepiye carane utusan desentralisasi ing blockchain bisa digunakake?
Ing awal 2017, kita wiwit nggawe utusan ing blockchain [jeneng lan link ana ing profil] kanthi ngrembug babagan kaluwihan saka utusan P2P klasik.
ical 2.5 taun, lan kita bisa konfirmasi konsep kita: aplikasi utusan saiki kasedhiya kanggo iOS, Web PWA, Windows, GNU/Linux, Mac OS lan Android.
Dina iki kita bakal pitutur marang kowe carane utusan pamblokiran bisa lan carane aplikasi klien bisa karo API sawijining.
Kita pengin blockchain kanggo ngatasi masalah keamanan lan privasi utusan P2P klasik:
Siji klik kanggo nggawe akun - ora ana telpon utawa email, ora ana akses menyang buku alamat utawa geolokasi.
Interlocutors ora tau nggawe sambungan langsung; kabeh komunikasi dumadi liwat sistem distribusi node. Alamat IP pangguna ora bisa diakses saben liyane.
Kabeh pesen dienkripsi kurva End-to-End25519xsalsa20poly1305. Kayane iki ora bakal kaget sapa wae, nanging kode sumber kita mbukak.
Serangan MITM ora kalebu - saben pesen minangka transaksi lan ditandatangani dening Ed25519 EdDSA.
Pesen rampung ing blok dhewe. Konsistensi lan timestamp Sampeyan ora bisa ndandani pamblokiran, lan mulane urutan pesen.
"Aku ora ngomong sing" ora bakal bisa digunakake karo pesen ing blockchain.
Ora ana struktur pusat sing mriksa "keasliane" pesen. Iki ditindakake dening sistem simpul sing disebarake adhedhasar konsensus, lan diduweni dening pangguna.
Impossibility of censorship - akun ora bisa diblokir lan pesen ora bisa dibusak.
Kemampuan kanggo njupuk kabeh obrolan saka piranti sawayah-wayah tegese sampeyan ora kudu nyimpen obrolan lokal ing kabeh.
Konfirmasi pangiriman pesen. Ora menyang piranti pangguna, nanging menyang jaringan. Ateges, iki minangka konfirmasi kemampuan panampa kanggo maca pesen sampeyan. Iki minangka fitur sing migunani kanggo ngirim kabar kritis.
Keuntungan Blockchain uga kalebu integrasi sing cedhak karo cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (iki isih ditindakake) lan kemampuan kanggo ngirim token ing obrolan. Kita malah nggawe exchanger crypto sing dibangun ing.
Lan banjur - carane kabeh bisa.
Pesen minangka transaksi
Saben uwong wis biasa karo kasunyatan sing transaksi ing pamblokiran transfer token (koin) saka siji pangguna menyang liyane. Kaya Bitcoin. Kita nggawe jinis transaksi khusus kanggo ngirim pesen.
Kanggo ngirim pesen ing utusan ing blockchain, sampeyan kudu ngliwati sawetara langkah:
Enkripsi teks pesen
Sijine ciphertext menyang transaksi
Mlebu transaksi
Kirim transaksi menyang simpul jaringan apa wae
Sistem simpul sing disebarake nemtokake "keasliane" pesen
Yen kabeh OK, transaksi karo pesen kasebut kalebu ing blok sabanjure
Panampa njupuk transaksi pesen lan dekripsi
Langkah 1-3 lan 7 ditindakake sacara lokal ing klien, lan langkah 5-6 ditindakake ing host.
Enkripsi pesen
Pesen kasebut dienkripsi nganggo kunci pribadi pangirim lan kunci publik panampa. Kita bakal njupuk kunci umum saka jaringan, nanging kanggo iki, akun panampa kudu diinisialisasi, yaiku, paling ora ana siji transaksi. Sampeyan bisa nggunakake panjalukan REST GET /api/accounts/getPublicKey?address={ADAMANT address}, lan nalika ngemot obrolan, kunci umum saka interlocutors bakal kasedhiya.
Pesen enkripsi pesen nggunakake algoritma curve25519xsalsa20poly1305 (NaCl Box). Wiwit akun kasebut ngemot tombol Ed25519, kanggo nggawe kothak, kunci kasebut kudu diowahi dadi Curve25519 Diffie-Hellman.
Kanggo mesthekake yen saben wong yakin karo keaslian pangirim lan panampa, wektu ngirim lan isi pesen, transaksi kasebut ditandatangani. Tandha digital ngidini sampeyan verifikasi keaslian transaksi nggunakake kunci umum - kunci pribadi ora dibutuhake kanggo iki.
Nanging teken dhewe ditindakake kanthi nggunakake kunci pribadi:
Sistem simpul sing disebarake, adhedhasar konsensus, nemtokake "keaslian" pesen transaksi. Saka sapa lan marang sapa, kapan, apa pesen diganti karo liyane, lan apa wektu ngirim dituduhake kanthi bener. Iki minangka kauntungan penting saka pamblokiran - ora ana struktur pusat sing tanggung jawab kanggo verifikasi, lan urutan pesen lan isine ora bisa dipalsukan.
Kaping pisanan, siji simpul mriksa akurasi, banjur dikirim menyang wong liya - yen mayoritas ujar manawa kabeh wis ana, transaksi kasebut bakal kalebu ing blok rantai sabanjure - iki minangka konsensus.
Bagean kode simpul sing tanggung jawab kanggo mriksa bisa dideleng ing GitHub - validator.js ΠΈ verifikasi.js. Ya, simpul kasebut mlaku ing Node.js.
Kalebu transaksi kanthi pesen ing blok
Yen konsensus wis tekan, transaksi karo pesen kita bakal kalebu ing blok sabanjure bebarengan karo transaksi sah liyane.
Blok duwe urutan sing ketat, lan saben blok sabanjure dibentuk adhedhasar hash blok sadurunge.
Intine pesen kita uga kalebu ing urutan iki lan ora bisa "diatur maneh". Yen sawetara pesen tiba ing blok, pesenan bakal ditemtokake dening timestamp pesen.
Maca pesen
Aplikasi utusan njupuk transaksi saka pamblokiran sing dikirim menyang panampa. Kanggo iki, kita nggawe titik pungkasan api/chatrooms.
Kabeh transaksi kasedhiya kanggo kabeh wong - sampeyan bisa nampa pesen sing dienkripsi. Nanging mung panampa sing bisa dekripsi nggunakake kunci pribadi lan kunci umum pangirim:
Wiwit pesen dikirim kanthi cara iki kira-kira 5 detik - iki wektu pemblokiran jaringan anyar katon - kita teka karo sambungan soket klien-kanggo-simpul lan simpul-kanggo-simpul. Nalika simpul nampa transaksi anyar, mriksa kesahihan lan nerusake menyang simpul liyane. Transaksi kasedhiya kanggo klien utusan sanajan sadurunge ana konsensus lan kalebu ing blok kasebut. Kanthi cara iki, kita bakal ngirim pesen kanthi cepet, kaya pesen instan biasa.
Kanggo nyimpen buku alamat, kita digawe KVS - Key-Value Storage - iki jinis liyane saka transaksi kang asset iku ora NaCl-kothak sing ndhelik, nanging NaCl-kotak rahasia. Iki carane utusan nyimpen data liyane.
Transfer file/gambar lan obrolan grup isih mbutuhake akeh karya. Mesthi, ing format blunder-lan-blunder iki bisa "ngapusi" kanthi cepet, nanging kita pengin njaga tingkat privasi sing padha.
Ya, isih ana sing kudu ditindakake - saenipun, privasi nyata nganggep manawa pangguna ora bakal nyambung menyang simpul jaringan umum, nanging bakal ngunggahake dhewe. Apa persentasi saka pangguna sampeyan mikir nindakake iki? Sing tengen, 0. Kita padha bisa kanggo sebagian ngatasi masalah iki karo versi Tor saka utusan.
Kita wis mbuktekake manawa utusan ing pamblokiran bisa ana. Sadurunge, mung ana siji nyoba ing 2012 - bitpesen, sing gagal amarga wektu pangiriman pesen sing dawa, beban CPU, lan kekurangan aplikasi seluler.
Lan skeptisisme amarga kasunyatan manawa utusan ing pamblokiran luwih dhisik - wong ora siap tanggung jawab kanggo akun kasebut, ndhuweni informasi pribadhi durung dadi tren, lan teknologi ora ngidini kecepatan dhuwur ing pamblokiran. Analog teknologi liyane saka proyek kita bakal katon sabanjure. Sampeyan bakal weruh.