PRIVATESKY - profs.info.uaic.roadria/teach/courses/pcd/resources/PrivateSky.pdf · Cand o aplicatie...

Post on 27-Sep-2019

6 views 0 download

Transcript of PRIVATESKY - profs.info.uaic.roadria/teach/courses/pcd/resources/PrivateSky.pdf · Cand o aplicatie...

PRIVATESKY

Proiect de cercetare al Facultatii de Informatica Iasi

https://profs.info.uaic.ro/~ads/PrivateSky

https://github.com/PrivateSky/privatesky

Agenda

- Introducere

- Concepte

- Tehnologii

- Arhitectura

- Exemple de aplicatii

Introducere

PrivateSKY este un proiect open-source ce ofera solutii celor ce doresc ca

aplicatiile dezvoltate de ei sa aibe una sau mai multe din caracteristicile

urmatoare:

- Integrare intra si inter-organizationala

- Arhitectura distribuita

- Arhitectura descentralizata

- Serverless

- Prelucreaza date private

- Implementari de sisteme ce au componente de blockchain public sau privat

Introducere

PrivateSKY foloseste concepte si tehnologii validate in cadrul proiectului

SwarmESB, dar vine ca o versiune noua si mult imbunatatita a acestuia.

Introducere

Proiectul SwarmESB este open source si se gaseste la adresa

https://github.com/salboaie/swarmESB

SwarmESB si tehnologiile oferite de acesta au fost validate atat in proiecte

comerciale cat si de cercetare de-a lungul timpului. A fost folosit de firme

romanesti in cadrul unor consortii mari cu parteneri puternici din domeniul IT.

Concepte cheie

- SWARM

- Flow

- Blockchain

- Asset

- Contracte SMART

SWARM

Este un concept de baza si reprezinta:

- Paradigma noua de programare ce pune accent pe definirea modelelor si

descrierea interactiunilor

- Metafora...

SWARM - metafora

Cand se executa un cod de tip SWARM defapt se porneste si ruleaza un

workflow. Acesta trece prin mai multe faze (SWARM phase) executate pe unul

sau mai multe noduri PrivateSKY in functie de modelare si nevoi. Drept urmare

putem spune “ca se porneste un roi cu scopul de a executa un task”.

SWARM si derivate

In PrivateSky pe langa SWARM mai este si alte derivate a acestuia:

- Flow

- Asset

- Transaction

Derivatele au fost obtinute fie prin limitarea unor functionalitati fie prin adaugarea

unor mecanisme specifice.

SWARM

Mecanism de baza ce permite modelarea si executia unui workflow ce urmeaza

sa fie executat pe unul sau mai multe noduri PrivateSKY.

Primitive specifice:

- this.swarm(“domainName/agent/AgentName”, “phaseName”, [arg1, arg2 …]);

- this.return([arg1, arg2 …]);

- this.onReturn(callback);

SWARM - modelare

$$.swarm.describe(“SwarmName”, {

public:{ /*description of public members*/},

protected:{/*description of the members that are available to be used only on the node that defines them*/},

private:{/*description of the members that store privacy related data*/},

phaseOne: function(arg1, arg2, ...){

/* phase code - available APIs:

this.swarm(“domainName/agent/AgentName”, “phaseName”, [arg1, arg2 …]);

this.return([arg1, arg2 …]);

this.onReturn(callback); */

}

});

SWARM - executie

$$.swarm.describe(“SwarmName”, {...});

var swarm = $$.swarm.start(“swarmName”, “phase”, [arg1, arg2 ..]);

swarm.onReturn(function([arg1, arg2 ...]){

});

Flows

Mecanism ce permite modelarea si executia unui workflow. Un flow se executa

doar in cadrul unui singur node PrivateSKY. Nu detine capabilitatea de a continua

sau muta executia pe alt node PrivateSKY.

Practic putem spune ca este un SWARM limitat in a fi executat doar local.

In principal sunt folosite pentru modelarea proceselor interne PrivateSKY.

Pot fi apelate in cadrul unui SWARM pentru a adauga si refolosi cod privind unul

dintre flow-urile necesare dezvoltarii unei aplicatii.

Flows - modelare

$$.flow.describe(“FlowName”, {

public:{ /*description of public members*/},

protected:{/*description of the members that are avaible to be used only on the node that defines them*/},

private:{/*description of the members that store privacy related data*/},

phaseOne: function(arg1, arg2, ...){

//phase code

},

phaseTwo: function(arg1, arg2, ...){

//phase code

}

});

Flows - executie

var Flow = $$.flow.describe(“FlowName”, {...});

$$.flow.start(“FlowName”, “phaseName”, [arg1, arg2 ...]);

sau

var flowInstance = Flow();

flowInstance.phaseName([arg1, arg2 ...]);

Nota: Nu exista conceptul de “constructor” (metoda ce se apeleaza obligatoriu

prima data in momentul in care se instantiaza un flow). Odata descris flow-ul si

instantiat poate fi apelata oricare din metodele modelate in cadrul flow-ului.

Flows - exemplu

https://github.com/PrivateSky/privatesky/blob/master/libraries/launcher/mkDirRec.js

Assets

Mecanism de modelare a datelor stocate in cadrul blochckain-ului PrivateSKY.

API similar cu cel al flow-urilor.

Assets - modelare

$$.asset.describe(“AssetName”, {

public:{ /*description of public members*/},

protected:{/*description of the members that are avaible to be used only on the node that defines them*/},

private:{/*description of the members that store privacy related data*/},

methodOne: function(arg1, arg2, ...){

//method code

},

methodTwo: function(arg1, arg2, ...){

//method code

}

});

Transactions

Sunt SWARM-uri speciale ce lucreaza cu obiecte de tip Assets in ideea de a

consulta, modifica si valida informatii din blockchain-ul PrivateSKY.

Transactions - modelare

$$.transaction.describe(“TransactionName”, {

public:{ /*description of public members*/},

protected:{/*description of the members that are available to be used only on the node that defines them*/},

private:{/*description of the members that store privacy related data*/},

phaseOne: function(arg1, arg2, ...){

},

phaseTwo: function(arg1, arg2, …){

}

});

Instalare si rulare nod PrivateSKY

Preconditii: Node instalat minim versiunea 10.15.3 sau mai nou

1. git clone https://github.com/PrivateSky/privatesky

2. cd privatesky

3. npm run install

4. npm run start

Observatii:

- pentru instalare si rulare pe Windows trebuie folosit un terminal rulat cu

drepturi privilegiate.

- De adaugat o regula privind portul 8080 in firewall pentru a permite

comunicarea

Instalare si rulare nod PrivateSKY

Daca instalarea a decurs bine in consola se vor afisa datele necesare conectarii la

noul PrivateSKY.

Daca rezultatul difera verificati ca fiecare pas din instalare sa se fi incheiat fara

erori.

Configurare nod PrivateSKY

Nodurile PrivateSKY se pot configura folosind aplicatia tip linie de comanda

PSKAdmin.

Aplicatia PSKAdmin se regaseste in folderul {root_folder_PrivateSky}/bin

Structura si organizare fisiere proiect PrivateSKY

Cele mai importante fisiere si foldere in care se

lucreaza cand dezvoltam noi functionalitati sunt:

bin/scripts/build-devel.js

builds/build.json

libraries/

modules/

bin/scripts/build-devel.js

PrivateSKY foloseste un mecanism propriu pentru descarcarea si instalarea

dependintelor necesare rularii.

Evitam instalarea modulelor direct cu NPM din considerente de securitate. ( a se

vedea numeroasele probleme cauzate de module neintretinute sau registri NPM

neactualizati etc.)

Cand doreste a adauga o noua dependinta se editeaza fisierul si se ruleaza din

nou comanda de instalare cu conditia ca nodul PrivateSKY sa fie oprit.

npm run install

bin/scripts/build-devel.js

builds/build.json

Codul necesar rularii PrivateSKY este impachetat in bundle-uri folosind

Browserify.

In cadrul fisierului sunt descrise structura bundle-urilor.

Cand este nevoie de a include intr-unul din bundle-uri o noua librarie sau modul

se editeaza fisierul dupa care se reporneste nodul PrivateSKY.

npm run start

sau exista si optiunea

npm run build

builds/build.json

Libraries

Librariile PrivateSKY reprezinta colectii de SWARM-uri (assets, flows,

transactions, swarms).

Structura unei librarii PrivateSKY este similara unui pachet npm. (prezenta unui

fisier index.js sau un package.json ce sa indice fisierul principal)

Libraries

Modules

Modulele PrivateSKY sunt proiectele adiacente si necesare rularii unui nod

PrivateSKY. In principal proiectul PrivateSKY foloseste cat mai putine dependente

externe si se bazeaza pe o colectie destul de bogata de module proprii.

Lista tuturor modulelor PrivateSKY poate fi consultata la adresa

https://github.com/PrivateSky

Modules

How to SWARM

How to SWARM

How to SWARM

How to SWARM

Continut fisier index.js

$$.swarms.describe("Echo", {

say:function(message){

this.return("Echo is saying: " + message);

}

});

How to SWARM

How to SWARM

How to SWARM

How to SWARM

How to SWARM

How to SWARM

How to SWARM

PrivateSKY - arhitectura unui nod

Agent Local

Domain

Agent

Domain Agent

Launcher

VirtualMQ

FolderMQ

with IPC

Client

/ remote agent

PSK DB

PSK DB

PubSub

Channels

HTTP Sandbox

Sandbox

Sandbox

PrivateSKY

Node

PrivateSKY - arhitectura explicata

Cand se porneste un nod PrivateSKY se executa urmatorii pasi:

- Se porneste un process pentru nodul de comunicare (VirtualMQ)

- Se porneste un process pentru Launcher.

- Odata pornit Launcher-ul acesta verifica configuratia din PSKDB-ul primit ca

si parametru de intrare. Odata incarcata configuratia se porneste si

monitorizeaza cate un proces de tip domeniu.

- Odata pornit procesul domeniu acesta se va conecta la un nod de

comunicare (VirtualMQ) pentru a comunica cu alte domenii sau aplicatii client

PrivateSKY - arhitectura explicata

Cand o aplicatie Client/Agent remote doreste sa comunice cu un domeniu

PrivateSKY configurat intr-un nod PrivateSKY se conecteaza la un nod de

comunicare (VirtualMQ) si pune un un mesaj pe canalul domeniului.

Domeniul via http long polling trage mesaj cu mesaj. Odata receptionat mesajul

este deserializat si in functie de agentul vizat transmite catre acesta mesajul

folosind canalul FolderMQ a agentului.

Agentul executa cererea si intoarce catre domeniul raspunsul sau alta cerere in

functie de nevoi.

Domeniul fie transmite raspunsul catre Clientul ce a initializat cererea fie transmite

altui agent sau alt nod PrivateSKY cererea.

Tipuri de aplicatii - exemple

Integrare intra si inter-organizationala

Aplicatii ce respecta reglementarile GDPR

Aplicatii de tip Blockchain (DAPP)

Aplicatii cu arhitecturi Serverless

Exemple si documentatie

Proiect mod de lucru cu blockchain-ul PrivateSKY (modelare asset-uri/transactii si

apelare acestora) si nu numai.

https://github.com/PrivateSky/psk-examples

PrivateSKY WIKI project

https://github.com/PrivateSky/privatesky/wiki

Tehnologii dezvoltate in PrivateSKY - CSB

CSB - Cloud Safe Box

Tehnologie PrivateSKY ce permite stocarea si distribuirea de date sensibile intr-un

mod controlat.

CSB-ul este o arhiva criptata ce contine unul sau mai multe blockchain-uri private

cu date sensibile.

Orice accesare a datelor stocate in cadrul CSB-ului (citire, scriere) este notarizata.

Un CSB poate contine si referinte catre alte CSB.

CSB-urile sunt implementate cu ajutorul modulului PrivateSKY pe nume PskDB.

Tehnologii dezvoltate in PrivateSKY - EDFS

EDFS = Encrypted Data File System

Middleware de stocare fisiere CSB.

Aplicatii - CSBWizard

Server HTTP dedicat realizarii de CSB-uri.

Ofera API pentru initializarea unui CSB, adaugarea de fisiere, definirea adreselor

unde sa se faca backup si constructia unui CSB.

Poate fi utilizat de aplicatii dezvoltate pe tehnologii variante (ex. Java, .Net etc.) ce

doresc sa exporte in mod securizat si criptat datele detinute despre utilizatori.

Aplicatii - PSKWallet

Aplicatie NodeJS de tip linie de comanda.

Permite managementul si lucrul cu CSB-uri locale folosind comenzi intuitive direct

din linia de comanda.

Ofera suport ridicat in ceea ce priveste accesarea flow-urilor de interactiune cu

CSB-urile.

Aplicatii - PSKWallet

Aplicatii - CSBUI

Aplicatie React Native dedicata managementul CSB-urilor personale.

Ofera suport in crearea, editarea si distribuirea de CSB-uri.

Ofera posibilitatea de a recupera unul sau mai multe CSB-uri “pierdute”

(recuperarea dintr-un backup anterior a unui CSB si vizualizarea/editarea lui pe un

nou echipament fie el PC, telefon, tableta etc.)

Ofera posibilitatea distribuirii de CSB-uri catre alte entitati sau utilizatori.

https://github.com/PrivateSky/csbui

Aplicatii - CSBUI

https://github.com/PrivateSky/csbui

CSBUI

CSBUI

DEMO folosind https://github.com/PrivateSky/csbui/tree/master/docker

Preconditii: Avem nevoie de infrastructura de tip Docker

1. Build Dockerfile folosind scriptul ./build.sh

2. Lansare container folosind scriptul ./start.sh

3. Accesare pagina http://localhost:3000

In caz ca apar schimbari sau erori si se doreste reluarea procesului de instalare

mai intai se ruleaza scriptul clean.sh abia mai apoi reluand pasii de la 1 pana la 3.

Tema

Tema 5

Dezvoltati o aplicatie care foloseste ca back-end PrivateSKY. Realizati o

documentatie care sa prezinte sistemul dezvoltat.

Tema 5 + echivalare Test 2

Dezvoltati o aplicatie integrabila cu CSBUI in care sa implementati usecase-uri ce

folosesc date confidentiale (parole, notite, cheltuieli etc.) care pot fi partajate intre

grupuri de persoane. Realizati o documentatie care sa prezinte sistemul dezvoltat.