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
}
});
Assets - exemplu
https://github.com/PrivateSky/psk-
examples/blob/master/token_example/assets/Account.js
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, …){
}
});
Transactions - exemplu
https://github.com/PrivateSky/psk-
examples/blob/master/token_example/transactions/accountManagement.js
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
How to SWARM
Explicatii detaliate pas cu pas se regasesc la adresa
https://github.com/PrivateSky/privatesky/wiki/How-to-web
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
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.