reprezentare logo Kosson

Dat dat data v3

De curând am avut de rezolvat o problemă de transfer a unui fișier masiv - o colecție digitizată a unei reviste. Problema a apărut la momentul în care trebuia să iau o decizie în ceea ce privește modalitatea de transfer. Cel mai repede m-am gândit la un serviciu pe care îl folosesc destul de des, dar dimensiunea fișierului arhivat depășea orice există. Rezolvarea punctuală a fost un stick usb, aproximativ 2 ore pierdute în trafic, dar revederea plăcută cu un vechi prieten. Totuși, știam că există mai multe soluții pe care rețelele peer-to-peer le-ar oferi, iar un punct de start au fost clasicii torrenți. Problema a fost de seeding pentru că trebuie să existe totuși o oarecare coordonare între cei doi comunicatori. Mai știam de o tehnologie pe care am întâlnit-o atunci când exploram ceea ce oferă dezvoltarea aplicațiilor pe Electron, vezi http://electron.io. Această aplicație se numea Dat (https://datproject.org/) și promitea depășirea barierelor mai sus expuse. Timpul limitat și tumultul zilei, au pus în umbră soluția pe care Dat o propunea. Dar nu am uitat-o și m-am întors pentru a o explora îndeajuns de mult ca scenariul anterior descris să nu se mai repete. Ceea ce am descoperit poate fi util într-un cuplaj strâns cu tehnologia blockchain aplicată resurselor științifice și celor de patrimoniu cultural.

Pentru a detalia și explora, voi parcurge white paper-ul și voi jalona reperele cele mai importante pentru a înțelege ce oferă.

Ce este?

Dat este un protocol.

Reușește sincronizarea directoarelor și a datelor fără să conteze dimensiunea sau dacă se modifică constant.

Dat construiește un registru criptat dedicat modificărilor. Acest modificări pot fi semnalate în rețea tuturor participanților. Ceilalți participanți pot alege să „descarce” conținutul unui alt depozit, fie parțial, fie integral și poate să stabilească o relație de „abonament” la un astfel de depozit.

Clienții Dat se pot conecta unul la altul pentru a forma o rețea publică sau privată și pentru a face schimb de date împreună.

Protocolul este agnostic în ceea ce privește nivelul de transport. Datele sunt stocate într-un format intitulat SLEEP.

Concepte

  1. Integritatea conținutului,
  2. Oglindire prin descentralizare,
  3. Rețea privată,
  4. Versionare incrementală,
  5. Acces aleatoriu

1. Integritatea conținutului

Acest concept cheie se referă la capacitatea de a verifica datele primite. Acestea trebuie să aibe versiunea celor așteptate. Este și conceptul pe care se bazează reproductibilitatea unui anumit set de date. În cazul accesării unui set de date prin utilizarea modelului clasic al cererii HTTP, versionarea datelor nu poate fi confirmată decât abia după download și apoi prin comparare. Dar, prin folosirea unui hash ca adresă (ceea ce se numește în jargon „content addressability”), permite citarea setului de date așa cum arăta acesta la un anumit moment dat. Dat folosește hashingul criptografic BLAKE2b [@aumasson2013blake2] pentru a realiza adresarea conținutului după care aranjează hashurile într-un arbore Merkle. Particularitatea utilizării unei astfel de soluții rezidă din faptul că fiecare nod care nu este copil, va fi hashul tuturor copiilor săi.

Linkurile prin care sunt adresate resursele sunt chei publice [@bernstein2012high] cu o lungime de 64 de caractere. Un exemplu de adresare este cel oferit de folosirea strictă a protocolul dat.

dat://8e1c7189b1b2dbb5c4ec2693787884771

Dar, aceeași adresă poate fi dereferențiată folosind și un URL clasic.

https://datproject.org/8e1c7189b1b2dbb5c4ec2693787884771

Toate schimburile de date prin rețea sunt criptate, ceea ce înseamnă că fiecare depozit Dat are o cheie privată corespondentă care este ținută în directorul propriu de pe mașina de lucru (Home/NumeUtilizator în Linux/GNU și Profiles/NumeUtilizator în Windows). Acest lucru implică faptul că mai întâi de a accesa resurse partenerii trebuie să facă schimb de chei. Folosind un sistem ca Dat, nu prezintă un mecanism de autentificare pentru că pur și simplu ceea ce este considerat a fi privat, nu va fi expus prin distribuirea chei.

Unde stau lucrurile?

Stocarea, algoritmii de verificare a integrității conținutului și protocoalele de rețea stau într-un modul numit Hypercore. Hypercore este indiferent la datele vehiculate. Sincronizările de date și modulul care gestionează sistemul de fișiere stau într-un modul care folosește Hypercore-ul și care poartă numele de Hyperdrive.

Cum se ține evidența fragmentelor de date?

Pentru a fi ținută evidența conținutului și a metadatelor, Dat folosește așa-numitele Hypercore Registers. Ce sunt aceste registre? Îți mai aduci aminte de conceptul de ledger pe care l-am discutat anterior? Dat nu folosește un blockchain pentru a ține evidența. Ceea ce folosește este un stream binar de date la care doar se poate adăuga informație criptografică hashuită și care este semnată digital. Această informație poate fi verificată pentru segmentele care prezintă interes atâta vreme cât ai cheia. Aceste registre, spune lucrarea, este un „ledger digital de încredere”. De fapt, așa cum am menționat anterior, Dat folosește două registre: content și metadata. În content, este conținutul depozitului de date propriu, iar în metdata sunt datele despre fișiere: nume, dimensiune, ultima dată la care s-a făcut o modificare. Ambele registre sunt incluse în procesul de distribuire și sunt ținute împreună.

Atunci când este adăugat un fișier nou, acesta este spart în fragmente iar acestea sunt rearanjate într-un arbore Merkle. Această procedură este comună tuturor sistemelor care gestionează datele prin arbori Merkle.

2. Oglindirea descentralizată

Dat partajează datele într-un model peer-to-peer. Acest lucru înseamnă că un partener de „roi” (swarm) poate să descarce un fragment de date, iar dacă permite, un alt partener din roi poate să ceară fragmentul primit, realizându-se astfel natura descentralizată a rețelei create. Dacă datele solicitate sunt importante, un partener poate alege rolul de oglindă pentru acestea.

Cum sunt găsite resursele în rețea?

Ceea ce este numit source discovery înseamnă căutarea unui IP și a portului corespunzător pentru sursele de date și în care există o copie pentru ceea ce cauți.

Cum se întâmplă propriu-zis este că sunt trei acțiuni diferite pentru fiecare operațiune necesară: anunțarea resursei (folosește DNS-urile) cu o pereche cheie - port (portul îl menționezi doar dacă dorești anunțarea resursei către parteneri prin distribuirea cheii de acces la aceasta), stoparea accesului și căutarea și identificarea unui partener (Multicast DNS și Kademlia Mainline Distributed Hash Table).

Odată identificată resursa necesară, Dat folosește TCP, HTTP sau UDP pentru schimbul efectiv de date.

3. Rețea privată

Descoperirea rețelelor și a punctelor de schimb pentru chei este alegerea lăsată clientului. În acest scop pot fi folosite rețelele BitTorrent DHT pentru a găsi partenerii după cheile publice publicate de către aceștia. Un alt mod de a face contactul inițial poate fi SSL-ul prin clasicul HTTPS dacă se alege varianta unui hub în care resursele (cheile publice) sunt garantate. Un lucru este sigur. Din moment ce cheile au fost chimbate între parteneri, Dat va asigura un canal criptat sigur.

4. Versionarea

Dat „sparge” un „șuvoi” (stream) de date în „fragmente” (chunks) după care constituie un arbore Merkle. Copierea unui set de date de către un alt partener din roi, se cheamă în jargonul Dat sincronizare. Metadatele de versionare sunt ținute într-un director ascuns .dat în rădăcina depozitului de date. Atenție, Dat nu stochează versiunile anterioare ale fișierelor, ci numai datele despre versiunile anterioare. În contra partidă, Git-ul stochează și conținutul versionat în directorul .git. Pentru că Dat este proiectat pentru seturi foarte mari de date, nu stochează versiunile anterioare.

5. Accesul aleatoriu

Accesarea datelor se face în contextul următoarelor capabilități ale protocolului:

  • este destinat gestionări seturilor de date de mari dimensiuni (milioane de fișiere în același repo);
  • o traversare eficientă a ierarhiei într-o manieră arbitrară;
  • ținerea evidenței prin stocare a tuturor modificărilor din toate fișierele, fie metadate, fie conținut;
  • posibilitatea de vedea starea fișierelor relativ la un punct în timp;
  • abonarea și astfel viziualizarea live a tuturor modificărilor aduse oricărui fișier, chiar și pentru o anumită cale;
  • acces la fragmentele unui fișier al oricărei versiuni a acestuia;
  • acces la fițiere la depărtare cu o sincronizare locală minimă;
  • este permisă compararea stării depozitului local cu cel de la distanță pentru a solicita doar fragmentele lipsă;
  • este permisă sincronizarea unei întregi arhive sau doar a unui subset.

Tehnologiile care au inspirat construcția Dat:

  • Git,
  • BitTorrent,
  • Kademlia Distributed Hash Table,
  • Peer to Peer Streaming Peer Protocol (PPSPP),
  • WebTorrent,
  • InterPlanetary File System,
  • Certificate Transparency / Secure Registers

BeakerLogo 256x256Și acum că am extras esența Dat-ului să vedem un exemplu de aplicație practică. Există o implementare în practica de zi cu zi care se întrupează în browserul Beaker. Acest browser este ceva mai special pentru că folosește protocolul Dat pentru a crea site-uri web, pentru a distribui fișiere și pentru a controla datele. Toate acestea fiind, de fapt o aplicare a paradigmei peer-to-peer mijlocită de Dat.

Beaker poate fi folosit și pentru navigare normală, fiind construit pe Chromium, fratele browserului Chrome de la Google.

După ce m-am jucat cu Beaker pe două sisteme diferite, ceea ce am remarcat este faptul că poți accesa fișiere de la distanță ca și cum ar fi pe propriul hard. Cel care accesează resursele, nu le poate edita pentru că îi sunt disponibile doar ca resurse read-only. Dar ceea ce poți face este să pui aceste resurse pe propriul hard printr-un simplu download. BeakerTutsPresentation

Ca o încheiere pot spune că protocolul Dat este foarte util atunci când se dorește distribuirea de date, indiferent ce reprezintă acestea sau în ce structură stau pentru a reprezenta informația. Browserul Beaker este o aplicație utilă pentru a experimenta cu adevărat un model descentralizat peer-to-peer. Sper că v-am făcut curioși și că veți dori să experimentați.