Securitate

Seif

Parolele firmei, criptate în browser, cu colecții pe echipe și recuperare de urgență cu chei împărțite.

Versiune
0.5.0
Stadiu
Beta
Capturi
4
Înlocuiește
Bitwarden sau 1Password pentru echipe, plătite per utilizator
Seiful deblocat, pe colecția Infrastructură. Lista seifului filtrată pe colecția de echipă Infrastructură, cu itemul Proxmox pve-bu1 deschis: utilizator, parolă mascată, adresă și codul 2FA generat local. Totul e decriptat în browser; serverul a primit și stochează doar criptotext.
Seiful deblocat, pe colecția Infrastructură. Lista seifului filtrată pe colecția de echipă Infrastructură, cu itemul Proxmox pve-bu1 deschis: utilizator, parolă mascată, adresă și codul 2FA generat local. Totul e decriptat în browser; serverul a primit și stochează doar criptotext.

Capturi din aplicație

Cum arată în lucru

Interfața reală Monolit, cu datele unei firme fictive într-o zi obișnuită. Apăsați pe o captură ca s-o vedeți la dimensiune completă.

Item cu cod 2FA și atașamente criptate. Fișa pfSense firewall BU: secretul TOTP și codul curent, notițele și două atașamente (backup de configurație, certificat). Fiecare fișier e criptat cu cheia lui înainte să plece din browser.
Captura 2 din 4

Item cu cod 2FA și atașamente criptate

Fișa pfSense firewall BU: secretul TOTP și codul curent, notițele și două atașamente (backup de configurație, certificat). Fiecare fișier e criptat cu cheia lui înainte să plece din browser.

Membrii unei colecții și drepturile lor. Colecția Rețea Ploiești: permisiune pe fiecare membru (administrare, scriere, citire) și un coleg invitat care nu și-a creat încă seiful, deci nu are cheie. „Rotește cheia” re-criptează colecția după ce un membru e eliminat.
Captura 3 din 4

Membrii unei colecții și drepturile lor

Colecția Rețea Ploiești: permisiune pe fiecare membru (administrare, scriere, citire) și un coleg invitat care nu și-a creat încă seiful, deci nu are cheie. „Rotește cheia” re-criptează colecția după ce un membru e eliminat.

Recuperare de urgență, 2 din 3 administratori. Escrow-ul organizației: oricare 2 din 3 administratori pot recupera împreună seiful unui coleg care și-a uitat parola master; unul singur nu poate. Sunt 9 conturi înrolate, iar #8 a fost resetat ieri și încă folosește parola temporară.
Captura 4 din 4

Recuperare de urgență, 2 din 3 administratori

Escrow-ul organizației: oricare 2 din 3 administratori pot recupera împreună seiful unui coleg care și-a uitat parola master; unul singur nu poate. Sunt 9 conturi înrolate, iar #8 a fost resetat ieri și încă folosește parola temporară.

1Nivelul 1

Pentru conducere

Ce problemă rezolvă, cum se lucrează cu modulul și ce se poate măsura.

Ce problemă rezolvă

Parolele de administrare ale firmei (servere, firewall, conturi cloud, portaluri de furnizori, token-uri bancare) ajung de obicei în fișiere Excel, în notițe sau doar în memoria unui singur om. Când acel om pleacă sau lipsește, nimeni nu știe cine are acces la ce. Când un fișier cu parole ajunge unde nu trebuie, toate sunt expuse deodată.

Seiful ține aceste date criptate, le partajează controlat pe echipe și păstrează o cale de recuperare care nu depinde de o singură persoană.

Ce face, concret

  • Fiecare utilizator are un seif propriu, deblocat cu o parolă master separată de login-ul Monolit. Criptarea și decriptarea se fac în browser. Serverul stochează doar date criptate și nu poate citi conținutul.
  • Tipuri de itemi: login (utilizator, parolă, adresă, cod 2FA, notițe) și notă securizată. Cardurile și identitățile se pot aduce prin import.
  • Generator de parole și cod 2FA (TOTP) calculat direct în seif pentru conturile care îl cer. Codul se reîmprospătează la 30 de secunde.
  • Atașamente criptate: fișiere de configurație, certificate, coduri de recuperare. Fiecare fișier are cheia lui.
  • Colecții de echipă: parole partajate cu drepturi pe membru (citire, scriere, administrare).
  • Protecții la folosire: blocare automată după 5 minute de inactivitate sau când tabul e ascuns, golirea clipboard-ului după 20 de secunde, 2FA la deblocare cu coduri de rezervă.
  • Recuperare de urgență (opțională): oricare K din N administratori pot recupera, împreună, seiful unui coleg care și-a uitat parola master. Un singur administrator nu poate.
  • Import din export Bitwarden (.json neencriptat) sau dintr-un JSON generic; export .json al itemilor personali.

Fluxuri de lucru

1. Un tehnician nou intră în echipa IT

  1. Tehnicianul își creează seiful și își alege parola master.
  2. Administratorul colecției „Infrastructură” îl adaugă ca membru, cu drept de citire sau scriere.
  3. Cheia colecției se criptează în browserul administratorului pentru noul membru. Acesta vede imediat parolele partajate, fără ca ele să treacă necriptate prin server.

2. Un membru pleacă din echipă

  1. Administratorul colecției îl elimină din lista de membri.
  2. Apasă „Rotește cheia”: toți itemii colecției se re-criptează cu o cheie nouă, distribuită doar membrilor rămași.
  3. Fostul membru nu mai poate citi nimic din colecție, nici măcar ce a descărcat înainte în formă criptată.

3. Un coleg și-a uitat parola master

  1. Dacă și-a activat recuperarea, doi dintre cei trei administratori își introduc bucățile de cheie în browserul unuia dintre ei.
  2. Seiful colegului primește o parolă master temporară, iar 2FA-ul lui se dezactivează.
  3. La prima deblocare, colegul este obligat să-și aleagă propria parolă. Administratorii nu o vor cunoaște.
  4. Operațiunea apare în auditul escrow, vizibil tuturor administratorilor și colegului, și poate fi anulată.

Beneficii și indicatori

  • Parolele critice sunt într-un singur loc, criptate, cu acces nominal pe colecții, nu în fișiere partajate.
  • Numărul de membri pe fiecare colecție și permisiunea fiecăruia sunt vizibile oricând.
  • Numărul de utilizatori înrolați la recuperare arată câte seifuri nu se pierd la o parolă uitată.
  • Conturile de administrare cu 2FA au codul în seif, deci accesul nu depinde de telefonul unei singure persoane.
  • După fiecare plecare din echipă, rotirea cheii colecției confirmă că accesul fostului membru a fost închis.

2Nivelul 2

Pentru echipa IT

Arhitectură, integrări, API, roluri și limitările cunoscute.

Arhitectură

  • Serviciu vault, versiunea 0.5.0, port 8014, schemă SQL vault, prefix /api/vault. Depinde de core_service (minimum 1.0.0).
  • Variabile obligatorii: DB_HOST, DB_USER, DB_PASSWORD, SECRET_KEY. Opționale: VAULT_DATA_PATH (fișierele atașamentelor), VAULT_SESSION_SECRET, VAULT_MAX_UPLOAD_MB.
  • Accesul la modul se face cu login-ul Monolit (JWT pe Authorization). Deblocarea întoarce un token de sesiune seif, trimis în antetul X-Vault-Session și ținut doar în memoria browserului.
  • Interfața încarcă totul printr-un singur GET /sync (cont, foldere, itemi, colecții) și decriptează local.

Criptografia (în browser, WebCrypto + hash-wasm)

  • Derivare cheie: Argon2id (3 iterații, 64 MiB, paralelism 4). Dacă WebAssembly lipsește, PBKDF2-SHA256 cu 600.000 de iterații. Clientul impune aceste minime chiar dacă serverul trimite parametri mai slabi.
  • Ierarhie: Master Key → HKDF-SHA256 → cheia care împachetează User Key (32 de octeți aleatori). User Key criptează itemii personali.
  • Autentificare fără parolă pe fir: serverul primește un Master Password Hash (PBKDF2 pe Master Key, o iterație), nu parola. Deblocarea are limitare de încercări.
  • Itemi: AES-256-GCM, format EncString 6.<iv>|<criptotext>, IV nou la fiecare criptare.
  • Partajare: pereche RSA-OAEP-2048 (SHA-256) generată la crearea seifului. Cheia privată e criptată cu User Key. Fiecare colecție are o cheie AES proprie, împachetată RSA pentru fiecare membru.
  • Atașamente: cheie aleatoare per fișier, împachetată cu cheia itemului (User Key sau cheia colecției).
  • TOTP: RFC 6238 (HMAC-SHA1), calculat local. Secretul stă criptat în datele itemului.
  • Recuperare de urgență: pereche RSA a organizației. Cheia privată e criptată cu o cheie aleatoare, împărțită Shamir (GF(256), librăria shamir-secret-sharing) în N bucăți cu prag K. Interfața oferă 3–5 bucăți, pragul minim e 2. Bucățile au formatul text MSR1-<nr>-<base64> și nu ajung niciodată pe server.
    • Activare în doi pași: bucățile se afișează, apoi administratorul dovedește că le are re-introducând K dintre ele. Abia atunci se trimite configurația.
    • Utilizatorul face opt-in explicit. Amprenta cheii organizației se fixează local; dacă se schimbă, utilizatorul trebuie să confirme amprenta nouă.
    • Cu utilizatori înrolați, dezactivarea escrow-ului cere K bucăți (serverul trimite un nonce criptat pe care doar cheia reconstituită îl poate citi).

Endpoint-uri

Contractul are 48 de endpoint-uri. Cele mai importante:

  • GET /account, POST /account, POST /unlock, PUT /account/password
  • POST /account/2fa/init, /enable, /disable
  • GET /sync; POST|PUT|PATCH|DELETE /items/... (ștergerea e soft-delete); POST /items/{id}/share
  • GET|POST /collections, /collections/{id}/members, /members/{uid}/grant, POST /collections/{id}/rotate
  • GET|POST|DELETE /recovery/org, GET /recovery/org/private-key, POST /recovery/org/disable-challenge, POST /recovery/users/{id}/reset, POST /recovery/users/{id}/restore, GET /recovery/audit
  • GET|POST|DELETE /items/{id}/attachments/...
  • GET /audit, GET /health

Evenimente publicate: vault.item_shared, vault.member_revoked.

Roluri și audit

  • Orice utilizator autentificat își poate crea seiful. Drepturile pe colecții sunt proprii modulului: citire, scriere, administrare (membri, rotire cheie, ștergere).
  • Configurarea escrow-ului și recuperarea conturilor sunt disponibile doar rolului admin.
  • Auditul general (GET /audit) conține doar metadate, fără conținut. Auditul escrow e separat și vizibil tuturor administratorilor: configurare, dezactivare, preluarea cheii private criptate, preluarea cheii unui utilizator, reset, restaurare.

Cerințe

  • HTTPS obligatoriu. WebCrypto funcționează doar în context securizat. Pe HTTP simplu, modulul afișează instrucțiuni pentru administrator în locul seifului.
  • Browser recent, cu WebAssembly, pentru Argon2id.

Limitări și ce e încă în plan

  • Interfața creează doar login-uri și note. Cardurile și identitățile există în model și intră doar prin import.
  • Membrii unei colecții se adaugă după ID-ul numeric al utilizatorului; lista îi afișează ca „User #ID”, fără nume.
  • Folderele personale și marcajul de favorit există în API, dar nu au încă interfață.
  • Formatul de criptare compatibil Bitwarden (AES-CBC + HMAC) e rezervat, dar neimplementat. Importul acceptă doar exporturi Bitwarden neencriptate.
  • Exportul este în clar și trebuie tratat ca document secret.
  • Modulul are doar interfață web; nu există extensie de browser pentru completare automată.
  • Versiunea 0.5.0: modulul e funcțional, dar încă în dezvoltare.