Nola funtzionatzen du mezulari deszentralizatuak bloke-katean?
2017aren hasieran, mezulari bat sortzen hasi ginen bloke-katean [izena eta esteka profilean daude] P2P mezulari klasikoekiko abantailak eztabaidatuz.
Joana 2.5 urtean, eta gure kontzeptua berretsi ahal izan genuen: messenger aplikazioak eskuragarri daude orain iOS, Web PWA, Windows, GNU/Linux, Mac OS eta Androidentzat.
Gaur esango dizugu nola funtzionatzen duen blockchain messenger eta bezeroen aplikazioek bere APIarekin nola funtziona dezaketen.
Blockchain-ek P2P mezulari klasikoen segurtasun eta pribatutasun arazoak konpontzea nahi genuen:
Klik bat kontu bat sortzeko - ez telefonorik edo posta elektronikorik, ez helbide-liburuetarako edo geokokapenetarako sarbiderik.
Solaskideek ez dute inoiz zuzeneko konexiorik ezartzen; komunikazio guztia nodoen sistema banatu baten bidez gertatzen da. Erabiltzaileen IP helbideak ez dira elkarren artean eskuragarri.
Mezu guztiak End-to-End kurba25519xsalsa20poly1305 zifratuta daude. Badirudi horrek ez duela inor harrituko, baina gure iturburu kodea irekita dago.
MITM erasoa kanpoan dago - mezu bakoitza transakzio bat da eta Ed25519 EdDSAk sinatzen du.
Mezua bere blokean amaitzen da. Koherentzia eta timestamp Ezin dituzu blokeak konpondu, eta, beraz, mezuen ordena.
"Ez nuen hori esan" ez du funtzionatuko blockchain-eko mezuekin.
Ez dago mezu baten "benetakotasuna" egiaztatzen duen egitura zentralik. Hori adostasunean oinarritutako nodoen sistema banatu batek egiten du, eta erabiltzaileen jabetzakoa da.
Zentsura ezina - kontuak ezin dira blokeatu eta mezuak ezin dira ezabatu.
Zure elkarrizketa guztiak edozein gailutatik edonoiz lortzeko gaitasunak esan nahi du ez dituzula elkarrizketak tokian tokiko batere gorde beharrik.
Mezua bidaltzearen berrespena. Ez erabiltzailearen gailura, sarera baizik. Funtsean, hartzaileak zure mezua irakurtzeko duen gaitasunaren berrespena da. Jakinarazpen kritikoak bidaltzeko funtzio erabilgarria da.
Blockchain-en abantailen artean Ethereum, Dogecoin, Lisk, Dash, Bitcoin (hau oraindik abian da) eta tokenak txatetan bidaltzeko gaitasuna ere sartzen dira. Eraikitako kripto-trukagailu bat ere egin genuen.
Eta gero - nola funtzionatzen duen guztia.
Mezua transakzio bat da
Pertsona orok ohituta dago blockchain-eko transakzioak erabiltzaile batetik bestera tokenak (txanponak) transferitzen dituela. Bitcoin bezala. Mezuak transmititzeko transakzio mota berezi bat sortu dugu.
Blockchain-eko mezulari batean mezu bat bidaltzeko, hainbat urrats egin behar dituzu:
Enkriptatu mezuaren testua
Jarri testu zifratua transakzio batean
Sinatu transakzioa
Bidali transakzio bat sareko edozein nodotara
Nodoen sistema banatu batek mezu baten "benetakotasuna" zehazten du
Dena ondo badago, mezuaren transakzioa hurrengo blokean sartzen da
Hartzaileak mezuaren transakzioa berreskuratzen du eta deszifratzen du
1-3 eta 7 urratsak lokalean egiten dira bezeroarengan, eta 5-6 urratsak ostalarietan.
Mezuen enkriptatzea
Mezua igorlearen gako pribatuarekin eta hartzailearen gako publikoarekin zifratzen da. Gako publikoa saretik hartuko dugu, baina horretarako, hartzailearen kontua hasieratu behar da, hau da, gutxienez transakzio bat izan. REST eskaera erabil dezakezu GET /api/accounts/getPublicKey?address={ADAMANT address}, eta txatak kargatzean, dagoeneko eskuragarri egongo dira solaskideen gako publikoak.
Messengerak mezuak enkriptatzen ditu curve25519xsalsa20poly1305 algoritmoa erabiliz (NaCl kutxa). Kontuak Ed25519 gakoak dituenez, kutxa bat osatzeko, lehenik gakoak Curve25519 Diffie-Hellman bihurtu behar dira.
Mezu transakzio baterako, garrantzitsuena da asset - objektuan mezu bat jarri behar duzu chat egiturarekin:
message - gorde enkriptatutako mezua
own_message -nonce
type β mezu mota
Mezuak ere motatan banatzen dira. Funtsean, parametroa type nola ulertu esaten dizu message. Testu bat besterik ez duzu bidal dezakezu, edo objektu bat bidal dezakezu barruan gauza interesgarriak dituena; adibidez, honela egiten ditu mezulariak txatetan kriptografia-moneta transferentziak.
Guztiek igorlearen eta hartzailearen benetakotasunaz, bidaltzeko unean eta mezuaren edukian konfiantza dutela ziurtatzeko, transakzioa sinatzen da. Sinadura digitalak transakzio baten benetakotasuna egiaztatzeko aukera ematen du gako publikoa erabiliz; horretarako ez da gako pribatua behar.
Baina sinadura bera gako pribatua erabiliz egiten da:
Diagramak erakusten du lehenengo transakzioa SHA-256-rekin hatxatzen dugula eta gero sinatzen dugula Ed25519 EdDSA eta sinadura lortu signature, eta transakzio IDa SHA-256 hash-aren parte da.
Inplementazio adibidea:
1 β Osatu datu-bloke bat, mezu bat barne
/**
* 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)
}
Nodoen sistema banatu batek, adostasunean oinarrituta, transakzio-mezuaren "benetakotasuna" zehazten du. Nori eta nori, noiz, mezua beste batekin ordeztu ote den, eta bidaltzeko ordua behar bezala adierazi den. Hau blockchain-en abantaila oso garrantzitsua da - ez dago egiaztapenaz arduratzen den egitura zentralik, eta mezuen sekuentzia eta haien edukia ezin dira faltsutu.
Lehenik eta behin, nodo batek zehaztasuna egiaztatzen du, eta, ondoren, beste batzuei bidaltzen die - gehiengoak dena ondo dagoela esaten badu, transakzioa katearen hurrengo blokean sartuko da - hau adostasuna da.
Egiaztapenez arduratzen den nodo-kodearen zatia GitHub-en ikus daiteke - baliozkotzailea.js ΠΈ egiaztatu.js. Bai, nodoa Node.js-en exekutatzen da.
Bloke batean mezu batekin transakzio bat sartzea
Adostasuna lortzen bada, gure mezuarekin egindako transakzioa hurrengo blokean sartuko da baliozko beste transakzio batzuekin batera.
Blokeek sekuentzia zorrotza dute, eta ondorengo bloke bakoitza aurreko blokeen hashetan oinarrituta eratzen da.
Kontua da gure mezua ere sekuentzia honetan sartzen dela eta ezin dela "berrantolatu". Hainbat mezu bloke batean erortzen badira, haien ordena arabera zehaztuko da timestamp mezuak.
Mezuak irakurtzea
Messenger aplikazioak hartzaileari bidaltzen zaizkion blokeo-katearen transakzioak lortzen ditu. Horretarako amaiera puntu bat egin dugu api/chatrooms.
Transakzio guztiak guztion eskura daude - enkriptatutako mezuak jaso ditzakezu. Baina hartzaileak bakarrik deszifra dezake bere gako pribatua eta igorlearen gako publikoa erabiliz:
Mezuak modu honetan 5 segundotan bidaltzen direnez -sare bloke berri bat agertzen den unea da- bezero-nodo eta nodo-nodo socket konexioa sortu dugu. Nodo batek transakzio berri bat jasotzen duenean, bere baliozkotasuna egiaztatzen du eta beste nodo batzuetara bidaltzen du. Transakzioa messenger bezeroentzat eskuragarri dago adostasuna eta blokean sartu aurretik ere. Horrela mezuak berehala bidaliko ditugu, ohiko berehalako mezulariek bezala.
Helbide liburua gordetzeko, KVS egin dugu - Key-Value Storage - hau beste transakzio mota bat da asset ez da NaCl-kutxa enkriptatutakoa, baina NaCl-sekretu-kutxa. Horrela gordetzen ditu mezulariak beste datu batzuk.
Fitxategi/irudi transferentziak eta taldeko txateek lan handia eskatzen dute oraindik. Jakina, hutsegite formatuan hori azkar "izorratu" daiteke, baina pribatutasun maila bera mantendu nahi dugu.
Bai, oraindik lan dago egiteko; hobe da benetako pribatutasunak erabiltzaileak ez direla sare publikoko nodoetara konektatuko, baizik eta eurenak planteatu. Zure ustez, zer erabiltzaileen ehuneko egiten du hori? Hori bai, 0. Arazo hau partzialki konpondu ahal izan dugu mezulariaren Tor bertsioarekin.
Blockchain-en mezulari bat egon daitekeela frogatu dugu. Aurretik, 2012an saiakera bakarra izan zen - bitmezua, mezuak bidaltzeko denbora luzeengatik, CPU kargagatik eta aplikazio mugikorren faltagatik huts egin zuen.
Eta eszeptizismoa da blockchain-eko mezulariak bere garaiari aurrea hartzeari: jendea ez dago prest bere kontuaren ardura hartzeko, informazio pertsonala edukitzea oraindik ez da joera bat, eta teknologiak ez du abiadura handirik onartzen blokean. Gure proiektuaren analogo teknologiko gehiago agertuko dira jarraian. Ikusiko duzu.