Kif jaħdem messaġġier deċentralizzat fuq il-blockchain?
Fil-bidu tal-2017, bdejna noħolqu messaġġier fuq il-blockchain [l-isem u l-link huma fil-profil] billi ddiskutejna l-vantaġġi fuq il-messaġġiera P2P klassika.
Għadda 2.5 sena, u stajna nikkonfermaw il-kunċett tagħna: l-applikazzjonijiet tal-messaġġier issa huma disponibbli għal iOS, Web PWA, Windows, GNU/Linux, Mac OS u Android.
Illum se ngħidulek kif jaħdem il-messaġġier blockchain u kif l-applikazzjonijiet tal-klijenti jistgħu jaħdmu bl-API tiegħu.
Ridna li l-blockchain issolvi l-kwistjonijiet ta’ sigurtà u privatezza ta’ messaġġiera P2P klassika:
Klikk waħda biex toħloq kont - l-ebda telefons jew emails, l-ebda aċċess għal kotba tal-indirizzi jew ġeolokalizzazzjonijiet.
L-interlokuturi qatt ma jistabbilixxu konnessjonijiet diretti il-komunikazzjoni kollha sseħħ permezz ta 'sistema distribwita ta' nodi. L-indirizzi IP tal-utenti mhumiex aċċessibbli għal xulxin.
Il-messaġġi kollha huma encrypted End-to-End curve25519xsalsa20poly1305. Jidher li dan mhu se jissorprendi lil ħadd, iżda l-kodiċi tas-sors tagħna huwa miftuħ.
L-attakk MITM huwa eskluż - kull messaġġ huwa tranżazzjoni u huwa ffirmat minn Ed25519 EdDSA.
Il-messaġġ jispiċċa fil-blokk tiegħu stess. Konsistenza u timestamp Ma tistax tiffissa l-blokki, u għalhekk l-ordni tal-messaġġi.
"Ma għidtx li" mhux se taħdem b'messaġġi fuq il-blockchain.
M'hemm l-ebda struttura ċentrali li tagħmel kontrolli fuq "l-awtentiċità" ta 'messaġġ. Dan isir minn sistema distribwita ta 'nodi bbażata fuq kunsens, u hija proprjetà tal-utenti.
Impossibilità ta' ċensura - il-kontijiet ma jistgħux jiġu mblukkati u l-messaġġi ma jistgħux jitħassru.
Blockchain 2FA hija alternattiva għall-infernali 2FA permezz ta 'SMS, rovina ħafna saħħa.
Il-ħila li tikseb il-konversazzjonijiet kollha tiegħek minn kwalunkwe apparat fi kwalunkwe ħin tfisser li m'għandekx għalfejn taħżen konversazzjonijiet lokalment xejn.
Konferma tat-twassil tal-messaġġ. Mhux għall-apparat tal-utent, iżda għan-netwerk. Essenzjalment, din hija konferma tal-kapaċità tar-riċevitur li jaqra l-messaġġ tiegħek. Din hija karatteristika utli biex jintbagħtu notifiki kritiċi.
Il-benefiċċji tal-Blockchain jinkludu wkoll integrazzjoni mill-qrib mal-kripto-muniti Ethereum, Dogecoin, Lisk, Dash, Bitcoin (dan għadu għaddej) u l-abbiltà li tibgħat tokens fiċ-chats. Aħna anke għamilna kripto exchanger integrat.
U mbagħad - kif jaħdem kollox.
Messaġġ huwa tranżazzjoni
Kulħadd huwa diġà mdorri għall-fatt li t-tranżazzjonijiet fil-blockchain jittrasferixxu tokens (muniti) minn utent għal ieħor. Bħal Bitcoin. Ħloqna tip speċjali ta 'tranżazzjoni għat-trażmissjoni ta' messaġġi.
Biex tibgħat messaġġ f'messaġġier fuq il-blockchain, trid tgħaddi minn diversi passi:
Encrypt test tal-messaġġ
Poġġi ċiphertext fi tranżazzjoni
Iffirma t-tranżazzjoni
Ibgħat transazzjoni lil kwalunkwe nodu tan-netwerk
Sistema distribwita ta 'nodi tiddetermina l-"awtentiċità" ta' messaġġ
Jekk kollox huwa OK, it-tranżazzjoni bil-messaġġ hija inkluża fil-blokk li jmiss
Ir-riċevitur jirkupra t-tranżazzjoni tal-messaġġ u jiddeċifra
Il-passi 1–3 u 7 jitwettqu lokalment fuq il-klijent, u l-passi 5–6 jitwettqu fuq l-ospiti.
Encryption tal-messaġġ
Il-messaġġ huwa encrypted biċ-ċavetta privata ta' min jibgħat u ċ-ċavetta pubblika tar-riċevitur. Se nieħdu ċ-ċavetta pubblika min-netwerk, iżda għal dan, il-kont tar-riċevitur għandu jkun inizjalizzat, jiġifieri, ikollu mill-inqas transazzjoni waħda. Tista' tuża talba REST GET /api/accounts/getPublicKey?address={ADAMANT address}, u meta jitgħabbew iċ-chats, iċ-ċwievet pubbliċi tal-interlokuturi jkunu diġà disponibbli.
Il-messaġġier jikkodifika l-messaġġi billi juża l-algoritmu curve25519xsalsa20poly1305 (Kaxxa NaCl). Peress li l-kont fih ċwievet Ed25519, biex jiffurmaw kaxxa, iċ-ċwievet l-ewwel iridu jiġu kkonvertiti għal Curve25519 Diffie-Hellman.
Għal transazzjoni ta 'messaġġ, l-iktar ħaġa importanti hija asset - għandek bżonn tpoġġi messaġġ fl-oġġett chat bi struttura:
message - ħlief il-messaġġ kriptat
own_message - nonce
type — tip ta' messaġġ
Il-messaġġi huma wkoll maqsuma f'tipi. Essenzjalment, il-parametru type jgħidlek kif tifhem message. Tista 'tibgħat biss test, jew tista' tibgħat oġġett b'affarijiet interessanti ġewwa - per eżempju, dan huwa kif il-messaġġier jagħmel trasferimenti ta 'kripto-munita fiċ-chats.
Biex jiġi żgurat li kulħadd ikun kunfidenti fl-awtentiċità tal-mittent u r-riċevitur, il-ħin li jintbagħat u l-kontenut tal-messaġġ, it-tranżazzjoni tiġi ffirmata. Firma diġitali tippermettilek tivverifika l-awtentiċità ta 'tranżazzjoni billi tuża ċavetta pubblika - għal dan mhix meħtieġa ċavetta privata.
Iżda l-firma nnifisha titwettaq bl-użu taċ-ċavetta privata:
Id-dijagramma turi li l-ewwel nixxefqu t-tranżazzjoni ma SHA-256 u mbagħad niffirmawha Ed25519 EdDSA u ġib firma signature, u l-ID tat-tranżazzjoni hija parti mill-hash SHA-256.
Eżempju ta' implimentazzjoni:
1 — Ifforma blokk tad-dejta, inkluż messaġġ
/**
* 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)
}
Sistema distribwita ta 'nodi, ibbażata fuq kunsens, tiddetermina l-"awtentiċità" tal-messaġġ tat-tranżazzjoni. Minn min u lil min, meta, jekk il-messaġġ kienx sostitwit b'ieħor, u jekk il-ħin ta' meta jintbagħat kienx indikat b'mod korrett. Dan huwa vantaġġ importanti ħafna tal-blockchain - m'hemm l-ebda struttura ċentrali li hija responsabbli għall-verifika, u s-sekwenza tal-messaġġi u l-kontenut tagħhom ma jistgħux jiġu ffalsifikati.
L-ewwel, nodu wieħed jiċċekkja l-eżattezza, u mbagħad jibgħatha lill-oħrajn - jekk il-maġġoranza tgħid li kollox huwa fl-ordni, it-tranżazzjoni se tkun inkluża fil-blokk li jmiss tal-katina - dan huwa kunsens.
Il-parti tal-kodiċi tan-node li hija responsabbli għall-kontrolli tista 'tara fuq GitHub - validator.js и verify.js. Iva, in-node jimxi fuq Node.js.
Inkluż transazzjoni b'messaġġ fi blokk
Jekk jintlaħaq kunsens, it-tranżazzjoni bil-messaġġ tagħna tiġi inkluża fil-blokk li jmiss flimkien ma 'tranżazzjonijiet validi oħra.
Il-blokki għandhom sekwenza stretta, u kull blokk sussegwenti huwa ffurmat ibbażat fuq il-hashes ta 'blokki preċedenti.
Il-punt hu li l-messaġġ tagħna huwa inkluż ukoll f'din is-sekwenza u ma jistax jiġi "rranġat mill-ġdid". Jekk diversi messaġġi jaqgħu fi blokk, l-ordni tagħhom tkun determinata minn timestamp messaġġi.
Qari messaġġi
L-applikazzjoni tal-messaġġier tirkupra tranżazzjonijiet mill-blockchain li jintbagħtu lir-riċevitur. Għal dan għamilna endpoint api/chatrooms.
It-tranżazzjonijiet kollha huma disponibbli għal kulħadd - tista 'tirċievi messaġġi kriptati. Iżda r-riċevitur biss jista' jiddekofra billi juża ċ-ċavetta privata tiegħu u ċ-ċavetta pubblika ta' min jibgħat:
Peress li l-messaġġi jitwasslu b'dan il-mod f'madwar 5 sekondi - dan huwa l-ħin li jidher blokka ġdida tan-netwerk - ħriġna b'konnessjoni ta 'socket klijent għal node u node għal node. Meta nodu jirċievi tranżazzjoni ġdida, jiċċekkja l-validità tiegħu u jgħaddiha lil nodi oħra. It-tranżazzjoni hija disponibbli għall-klijenti tal-messaġġiera anki qabel ma jseħħ il-kunsens u l-inklużjoni fil-blokk. B'dan il-mod aħna se nwasslu messaġġi istantanjament, bħal messaġġiera instantanja regolari.
Biex taħżen il-ktieb tal-indirizzi, għamilna KVS - Key-Value Storage - dan huwa tip ieħor ta 'tranżazzjoni li fiha asset mhuwiex NaCl-box li huwa encrypted, iżda NaCl-secretbox. Dan huwa kif il-messaġġier jaħżen data oħra.
It-trasferimenti tal-fajls/immaġini u ċ-chats tal-grupp għadhom jeħtieġu ħafna xogħol. Naturalment, fil-format blunder-and-blunder dan jista 'jiġi "ivitat" malajr, iżda rridu nżommu l-istess livell ta' privatezza.
Iva, għad hemm xogħol xi jsir - idealment, il-privatezza reali tassumi li l-utenti mhux se jgħaqqdu man-nodi tan-netwerk pubbliku, iżda se jgħollu tagħhom stess. X'perċentwal ta' utenti taħseb li jagħmel dan? Dak id-dritt, 0. Konna kapaċi nsolvu parzjalment din il-kwistjoni bil-verżjoni Tor tal-messaġġier.
Aħna ppruvajna li jista’ jeżisti messaġġier fuq il-blockchain. Preċedentement, kien hemm tentattiv wieħed biss fl-2012 - bitmessage, li fallew minħabba ħinijiet twal ta 'kunsinna ta' messaġġi, tagħbija tas-CPU, u nuqqas ta 'applikazzjonijiet mobbli.
U x-xettiċiżmu huwa dovut għall-fatt li l-messaġġiera fuq il-blockchain huma qabel iż-żmien tagħhom - in-nies mhumiex lesti li jieħdu r-responsabbiltà għall-kont tagħhom, il-pussess ta 'informazzjoni personali għadha mhix tendenza, u t-teknoloġija ma tippermettix veloċitajiet għoljin fuq il-blockchain. Aktar analogi teknoloġiċi tal-proġett tagħna se jidhru jmiss. Int ser tara.