Kumaha carana utusan desentralisasi dianggo dina blockchain nu?
Dina awal 2017, urang mimiti nyieun utusan dina blockchain [ngaran jeung link aya dina profil] ku nyawalakeun kaunggulan leuwih utusan P2P Palasik.
Isro 2.5 taun, sarta kami bisa mastikeun konsep urang: aplikasi utusan ayeuna sadia pikeun ios, Web PWA, Windows, GNU / Linux, Mac OS jeung Android.
Dinten ieu kami bakal nyarioskeun ka anjeun kumaha utusan blockchain tiasa dianggo sareng kumaha aplikasi klien tiasa dianggo sareng API na.
Kami hoyong blockchain pikeun ngabéréskeun masalah kaamanan sareng privasi para utusan P2P klasik:
Hiji klik pikeun nyieun rekening - euweuh telepon atawa surelek, euweuh aksés ka buku alamat atawa geolocations.
Interlocutors pernah nyieun sambungan langsung; sadaya komunikasi lumangsung ngaliwatan sistem disebarkeun titik. Alamat IP pangguna henteu tiasa diaksés ku anu sanés.
Sadaya seratan énkripsi Kurva End-to-End25519xsalsa20poly1305. Sigana mah ieu moal kaget saha, tapi kode sumber urang kabuka.
serangan MITM teu kaasup - unggal pesen téh transaksi sarta ditandatanganan ku Ed25519 EdDSA.
Suratna ends nepi di blok sorangan. Konsistensi jeung timestamp Anjeun teu bisa ngalereskeun blok, sarta ku kituna urutan pesen.
"Kuring henteu nyarios éta" moal tiasa dianggo sareng pesen dina blockchain.
Henteu aya struktur sentral anu mariksa "kaaslian" pesen. Hal ieu dilakukeun ku sistem distribusi titik dumasar kana konsensus, sareng dipiboga ku pangguna.
Kamungkinan sénsor - akun teu tiasa diblokir sareng pesen teu tiasa dihapus.
Kamampuhan pikeun nyandak sadaya paguneman anjeun tina alat naon waé iraha waé hartosna anjeun henteu kedah nyimpen paguneman sacara lokal pisan.
Konfirmasi pangiriman pesen. Teu ka alat pamaké, tapi ka jaringan. Intina, ieu mangrupikeun konfirmasi kamampuan panampi pikeun maca pesen anjeun. Ieu fitur mangpaat pikeun ngirim bewara kritis.
Mangpaat Blockchain ogé ngawengku integrasi deukeut jeung cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (hiji ieu masih lumangsung) jeung kamampuhan pikeun ngirim tokens dina obrolan. Kami malah ngadamel exchanger crypto anu diwangun.
Lajeng - kumaha eta sadayana jalan.
Pesen mangrupikeun transaksi
Sarerea geus biasa kanyataan yén transaksi dina blockchain mindahkeun tokens (koin) ti hiji pamaké ka nu sejen. Kawas Bitcoin. Kami nyiptakeun jinis transaksi khusus pikeun ngirim pesen.
Pikeun ngirim pesen dina utusan dina blockchain, anjeun kedah ngalangkungan sababaraha léngkah:
Énkripsi téks pesen
Pasang ciphertext kana transaksi
Asup urus
Kirimkeun transaksi ka titik jaringan mana waé
Sistem titik anu disebarkeun nangtukeun "kaaslian" pesen
Lamun sagalana geus OK, urus jeung talatah kaasup dina blok salajengna
Panarima retrieves transaksi pesen na decrypts
Hambalan 1–3 jeung 7 dipigawé sacara lokal dina klien, jeung léngkah 5–6 dipigawé dina host.
énkripsi pesen
Suratna énkripsi nganggo konci pribadi pangirim sareng konci umum panarima. Kami bakal nyandak konci umum tina jaringan, tapi pikeun ieu, akun panarima kedah diinisialisasi, nyaéta, sahenteuna sahenteuna hiji transaksi. Anjeun tiasa nganggo pamundut REST GET /api/accounts/getPublicKey?address={ADAMANT address}, sareng nalika ngamuat obrolan, konci umum interlocutors parantos sayogi.
Utusan énkripsi pesen nganggo algoritma curve25519xsalsa20poly1305 (Kotak NaCl). Kusabab akunna ngandung konci Ed25519, pikeun ngabentuk kotak, koncina kedah dirobih heula kana Curve25519 Diffie-Hellman.
Pikeun transaksi pesen, hal anu paling penting nyaéta asset - anjeun kedah nempatkeun pesen dina obyék chat kalawan struktur:
message - simpen pesen énkripsi
own_message -teu acan
type - tipe pesen
Pesen ogé dibagi kana jenis. Intina, parameter type ngabejaan Anjeun kumaha ngarti message. Anjeun ngan ukur tiasa ngirim téks, atanapi anjeun tiasa ngirim obyék kalayan hal-hal anu pikaresepeun di jero - contona, ieu kumaha utusan ngajantenkeun transfer cryptocurrency dina obrolan.
Pikeun mastikeun yén sadayana yakin kana kaaslian pangirim sareng panarima, waktos ngirim sareng eusi pesen, transaksi ditandatanganan. Tanda tangan digital ngamungkinkeun anjeun pikeun pariksa kaaslian transaksi nganggo konci umum - konci pribadi henteu diperyogikeun pikeun ieu.
Tapi tanda tangan sorangan dilakukeun nganggo konci pribadi:
Diagram nunjukeun yen urang mimiti Hash urus kalawan SHA-256 lajeng asup Ed25519 EdDSA jeung meunang tanda tangan signature, sareng ID urus mangrupikeun bagian tina hash SHA-256.
conto palaksanaan:
1 - Bentuk blok data, kalebet pesen
/**
* Calls `getBytes` based on transaction type
* @see privateTypes
* @implements {ByteBuffer}
* @param {transaction} trs
* @param {boolean} skipSignature
* @param {boolean} skipSecondSignature
* @return {!Array} Contents as an ArrayBuffer.
* @throws {error} If buffer fails.
*/
adamant.getBytes = function (transaction) {
...
switch (transaction.type) {
case constants.Transactions.SEND:
break
case constants.Transactions.CHAT_MESSAGE:
assetBytes = this.chatGetBytes(transaction)
assetSize = assetBytes.length
break
…
default:
alert('Not supported yet')
}
var bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true)
bb.writeByte(transaction.type)
bb.writeInt(transaction.timestamp)
...
bb.flip()
var arrayBuffer = new Uint8Array(bb.toArrayBuffer())
var buffer = []
for (var i = 0; i < arrayBuffer.length; i++) {
buffer[i] = arrayBuffer[i]
}
return Buffer.from(buffer)
}
Sistem simpul anu disebarkeun, dumasar kana konsensus, nangtukeun "kaaslian" pesen urus. Ti saha sareng ka saha, iraha, naha pesenna diganti ku anu sanés, sareng naha waktos ngirimna leres-leres dituduhkeun. Ieu mangrupikeun kauntungan anu penting pikeun blockchain - teu aya struktur sentral anu tanggung jawab pikeun verifikasi, sareng urutan pesen sareng eusina henteu tiasa dipalsukan.
Kahiji, hiji titik pariksa akurasi, lajeng dikirim ka batur - lamun mayoritas nyebutkeun yen sagalana aya dina urutan, urus bakal kaasup dina blok hareup ranté - ieu konsensus.
Bagian tina kode titik anu tanggung jawab cék tiasa ditingali dina GitHub - validator.js и pariksa.js. Yep, titik dijalankeun dina Node.js.
Kaasup transaksi kalayan pesen dina blok
Upami konsensus ngahontal, transaksi sareng pesen kami bakal dilebetkeun kana blok salajengna sareng transaksi valid anu sanés.
Blok gaduh sekuen anu ketat, sareng unggal blok salajengna dibentuk dumasar kana hashes blok sateuacana.
Intina nyaéta pesen urang ogé kalebet dina sekuen ieu sareng teu tiasa "disusun deui". Lamun sababaraha pesen digolongkeun kana blok, urutan maranéhna bakal ditangtukeun ku timestamp talatah.
Maca talatah
Aplikasi utusan retrieves transaksi ti blockchain nu dikirim ka panarima. Pikeun ieu kami ngadamel titik tungtung api/chatrooms.
Sadaya transaksi sayogi pikeun sadayana - anjeun tiasa nampi pesen énkripsi. Tapi ngan ukur panarima anu tiasa ngadekrip nganggo konci pribadi sareng konci umum pangirim:
Kusabab seratan dikirimkeun ku cara ieu sakitar 5 detik - ieu mangrupikeun waktos blok jaringan énggal muncul - kami sumping sareng sambungan stop kontak klien-to-node sareng node-to-node. Nalika titik nampi transaksi anyar, éta pariksa validitasna sareng teraskeun ka titik anu sanés. urus geus sadia pikeun klien utusan malah saméméh konsensus lumangsung sarta citakan dina blok. Ku cara ieu kami bakal ngirim pesen sacara instan, sapertos utusan instan biasa.
Pikeun nyimpen buku alamat, urang dijieun KVS - Panyimpenan Key-Nilai - ieu téh tipe séjén tina urus nu asset teu NaCl-kotak anu énkripsi, tapi NaCl-kotak rahasia. Ieu kumaha utusan nyimpen data anu sanés.
Transfer file/gambar sareng obrolan grup masih peryogi seueur padamelan. Tangtu, dina format blunder-na-blunder ieu bisa "screwed up" gancang, tapi urang hayang ngajaga tingkat sarua privasi.
Leres, masih aya padamelan anu kedah dilakukeun - idéal, privasi nyata nganggap yén pangguna moal nyambung ka titik jaringan umum, tapi bakal ngangkat sorangan. Sabaraha perséntase pamaké anjeun pikir ngalakukeun ieu? Éta katuhu, 0. Kami bisa sawaréh ngajawab masalah ieu kalawan versi Tor utusan.
Kami parantos ngabuktikeun yén utusan dina blockchain tiasa aya. Saméméhna, ngan aya hiji usaha dina 2012 - bitmessage, anu gagal kusabab waktos pangiriman pesen anu panjang, beban CPU, sareng kurangna aplikasi sélulér.
Sareng skepticism disababkeun ku kanyataan yén utusan dina blockchain aya payuneun waktosna - jalma henteu siap nanggung tanggung jawab pikeun akunna, gaduh inpormasi pribadi henteu acan trend, sareng téknologi henteu ngijinkeun kecepatan tinggi dina blockchain. Langkung seueur analogi téknologi proyék kami bakal muncul salajengna. Anjeun bakal ningali.