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.
Fluxul de criptare: pas cu pas
Iată exact ce se întâmplă când trimiteți un fișier prin SG/Send.
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ă.
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.
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.
Î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.
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).
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.
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
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-uriAdmin 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-uriMemory-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 interschimbabilCloudFront 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țieContainer
Docker, AWS Fargate și GCP Cloud Run. Aceeași aplicație ambalată ca un container.
Docker / Fargate / GCPServer
Instanțe EC2 și imagini AMI. Pentru echipele care au nevoie de control total al mediului de execuție.
EC2 / AMICLI
Interfață în linie de comandă pentru transferuri scriptate, pipeline-uri CI/CD și utilizatori avansați.
Terminal