Cum funcționează criptarea

SG/Send utilizează criptare simetrică AES-256-GCM, executată în întregime în browserul dumneavoastră. Serverul nu vede niciodată datele în clar, numele fișierelor sau cheile de criptare. Această pagină explică exact cum funcționează.

Criptare simetrică: o cheie, două operațiuni

SG/Send utilizează criptare simetrică — aceeași cheie criptează și decriptează fișierul. Acesta este cel mai simplu și cel mai rapid model de criptare și, când este implementat corect, cel mai sigur pentru transferul de fișiere.

Ce este AES-256-GCM?

AES (Advanced Encryption Standard) este algoritmul de criptare folosit de guverne, bănci și armate din întreaga lume. 256 este dimensiunea cheii în biți — există 2256 chei posibile, ceea ce face atacul prin forță brută imposibil din punct de vedere computațional. GCM (Galois/Counter Mode) adaugă criptare autentificată — nu doar criptează, ci și detectează dacă cineva a modificat textul criptat.

De ce criptare simetrică?

Criptarea simetrică folosește o singură cheie atât pentru criptare, cât și pentru decriptare. Aceasta diferă de criptarea asimetrică (cum ar fi RSA) care folosește o pereche de chei. Pentru transferul de fișiere, criptarea simetrică este alegerea corectă: este rapidă, bine înțeleasă, iar Web Crypto API oferă o implementare testată în luptă în fiecare browser modern.

Ideea cheie: dacă controlați unde se generează cheia și unde circulă, criptarea simetrică vă oferă confidențialitate perfectă. SG/Send generează cheia în browserul dumneavoastră, iar cheia nu atinge niciodată serverul.

Fluxul de criptare: pas cu pas

Iată exact ce se întâmplă când trimiteți un fișier prin SG/Send.

1

Generarea cheii

Când selectați un fișier, browserul dumneavoastră generează o cheie AES aleatorie de 256 de biți folosind Web Crypto API (crypto.subtle.generateKey). Aceasta folosește generatorul de numere aleatoare securizat criptografic al sistemului de operare. Cheia există doar în memoria browserului dumneavoastră.

Browser Server | | | crypto.subtle.generateKey( | | { name: "AES-GCM", length: 256 }, | | true, | | ["encrypt", "decrypt"] | | ) | | | | Key generated: 3a7f...b2c1 (256 bits) | | Key stays here. Server knows nothing. | | |
2

Generarea IV

Un vector de inițializare (IV) de 12 octeți este generat aleatoriu (crypto.getRandomValues). IV-ul asigură că criptarea aceluiași fișier de două ori produce text criptat diferit. IV-ul nu este secret — este adăugat la începutul ieșirii criptate și trimis împreună cu textul criptat.

3

Criptare

Fișierul este criptat în browser folosind crypto.subtle.encrypt cu algoritmul AES-GCM, cheia generată și IV-ul. Rezultatul este text criptat + o etichetă de autentificare de 128 de biți. Eticheta de autentificare este garanția de integritate a GCM — dacă cineva modifică chiar și un singur bit din textul criptat, decriptarea va eșua.

Browser Server | | | plaintext ──► AES-256-GCM ──► ciphertext | | ▲ | | | | | key + IV | | | | Output = IV (12 bytes) | | + ciphertext (same size as plaintext) | | + auth tag (16 bytes) | | |
4

Încărcare

Doar ieșirea criptată (IV + text criptat + etichetă de autentificare) este încărcată pe server. Serverul primește un blob de octeți cu aspect aleatoriu. Atribuie un ID de transfer (12 caractere aleatorii) și stochează textul criptat. Fără nume de fișier, fără indiciu de tip conținut, fără cheie — doar octeți criptați.

Browser Server | | | POST /transfers/create | | ──────────────────────────────────────────► | | | Stores: | PUT /transfers/{id}/upload | transfer_id: "a7x9k2m4p1" | Body: [IV + ciphertext + auth tag] | data: [encrypted bytes] | ──────────────────────────────────────────► | ip_hash: SHA256(ip + salt) | | timestamp: 2026-02-28T... | Key NEVER sent. File name NEVER sent. | | |
5

Partajarea linkului

Expeditorul primește un link de descărcare. Cheia de decriptare este plasată în fragmentul URL (partea de după #). Fragmentele URL nu sunt trimise niciodată la server de către browser — acest lucru este definit în RFC 3986. Expeditorul partajează acest link prin orice canal dorește (email, chat, personal).

Link format: https://send.sgraph.ai/download/a7x9k2m4p1#3a7f...b2c1 ├──────────── domain ────────────┤├─ transfer id ─┤├─ key ─┤ ▲ │ URL fragment (#) Never sent to server Stays in the browser
6

Decriptare

Destinatarul deschide linkul. Browserul său descarcă octeții criptați de pe server, extrage cheia din fragmentul URL, separă IV-ul din textul criptat și decriptează folosind crypto.subtle.decrypt. Dacă eticheta de autentificare nu corespunde (s-a detectat o manipulare), decriptarea eșuează. Serverul nu participă niciodată la decriptare.

Recipient's Browser Server | | | GET /transfers/{id}/download | | ──────────────────────────────────────────► | | ◄────────────────────────────────────────── | | Response: [IV + ciphertext + auth tag] | | | | Key extracted from URL fragment (#) | | crypto.subtle.decrypt( | | { name: "AES-GCM", iv: IV }, | | key, | | ciphertext | | ) | | | | ──► plaintext file restored | | Server never saw the key or the plaintext. |

Ce vede serverul vs. ce nu vede

Aceasta este garanția zero-knowledge. Iată exact ce date există pe server.

Serverul stochează

ID-ul transferului — 12 caractere aleatorii
Octeți criptați — imposibil de distins de date aleatorii
Hash IP — SHA-256 al IP + salt zilnic rotativ
Marcaj temporal — când a fost creat transferul
Dimensiunea fișierului — dimensiunea blob-ului criptat (octeți)

Serverul nu vede niciodată

Cheia de criptare — rămâne în browser, partajată prin fragmentul URL
Numele fișierului — nu este trimis niciodată la server
Tipul fișierului — nu se stochează metadate de tip conținut
Conținutul în clar — doar textul criptat este încărcat
Adresa IP brută — hașată înainte de stocare

O compromitere completă a serverului — acces total la baza de date, toate backup-urile, toate jurnalele — nu dezvăluie nimic despre conținutul fișierelor transferate. Textul criptat este imposibil de distins computațional de zgomot aleatoriu fără cheie.

Stiva tehnologică

Fiecare strat este ales pentru simplitate, securitate și implementare fără dependențe.

Strat Tehnologie Scop
Runtime Python 3.12 / arm64 Limbajul serverului de aplicații
Framework web FastAPI via osbot-fast-api Rutare HTTP și gestionarea cererilor
Calcul AWS Lambda + Mangum Execuție serverless, plată per utilizare
Stocare Memory-FS (Storage_FS) Backend interschimbabil: memorie, disc sau S3
Criptare Web Crypto API (AES-256-GCM) Criptare pe partea clientului în browser
Sistem de tipuri Type_Safe (osbot-utils) Definiții de scheme fără Pydantic
Frontend Vanilla JS + Web Components Zero dependențe de framework-uri (IFD)
Testare pytest, stivă în memorie Fără mock-uri, fără patch-uri, implementări reale
CI/CD GitHub Actions Pipeline de testare, etichetare și implementare

Arhitectura sistemului

Două funcții Lambda, un strat de stocare, un CDN. Simplu prin design.

User Lambda (Publică)

Funcție publică care gestionează transferurile de fișiere, verificările de sănătate, încărcările cu semnătură prealabilă, seifurile personale și integrarea MCP. Accesată prin Lambda Function URL în spatele CloudFront.

18 endpoint-uri

Admin Lambda (Autentificată)

Funcție doar pentru administrare pentru gestionarea tokenurilor, analiză, statistici server și instrumente MCP de administrare. Necesită autentificare. Lambda separată = graniță de securitate separată.

55 endpoint-uri

Memory-FS (Storage_FS)

Toată stocarea trece printr-un strat de abstractizare. Codul aplicației nu știe niciodată dacă backend-ul este în memorie, pe disc sau S3. Aceeași bază de cod pe toate cele 7 ținte de implementare fără a modifica o linie de logică a aplicației.

Backend interschimbabil

CloudFront CDN

Resurse statice, caching, terminare SSL și WAF. Lambda URL-urile oferă endpoint-urile HTTPS direct — nu este necesară o poartă API.

Rețea de margine

Ținte de implementare

O singură bază de cod, șapte ținte de implementare grupate în patru modele.

Lambda

Implementare principală. Două funcții Lambda în spatele Lambda Function URLs. Endpoint-uri HTTPS directe, fără necesitatea unui API Gateway.

Producție

Container

Docker, AWS Fargate și GCP Cloud Run. Aceeași aplicație ambalată ca un container.

Docker / Fargate / GCP

Server

Instanțe EC2 și imagini AMI. Pentru echipele care au nevoie de control total al mediului de execuție.

EC2 / AMI

CLI

Interfață în linie de comandă pentru transferuri scriptate, pipeline-uri CI/CD și utilizatori avansați.

Terminal
18
Agenți IA
73
Endpoint-uri HTTP
393
Teste trecute
7
Ținte de implementare