Kako funkcionira šifriranje
SG/Send koristi AES-256-GCM simetrično šifriranje, koje se u potpunosti izvršava u Vašem pregledniku. Poslužitelj nikada ne vidi Vaše podatke u čistom tekstu, nazive datoteka ni ključeve za šifriranje. Ova stranica objašnjava točno kako to funkcionira.
Simetrično šifriranje: jedan ključ, dvije operacije
SG/Send koristi simetrično šifriranje — isti ključ šifrira i dešifrira datoteku. Ovo je najjednostavniji i najbrži model šifriranja i, kada se pravilno provede, najsigurniji za prijenos datoteka.
Što je AES-256-GCM?
AES (Advanced Encryption Standard) je algoritam šifriranja koji koriste vlade, banke i vojske diljem svijeta. 256 je veličina ključa u bitovima — postoji 2256 mogućih ključeva, što čini napad grubom silom računalno nemogućim. GCM (Galois/Counter Mode) dodaje autenticirano šifriranje — ne samo da šifrira, već i otkriva je li netko manipulirao šifriranim tekstom.
Zašto simetrično?
Simetrično šifriranje koristi jedan ključ za šifriranje i dešifriranje. To se razlikuje od asimetričnog šifriranja (poput RSA) koje koristi par ključeva. Za prijenos datoteka, simetrično je pravi izbor: brzo je, dobro razumljivo, a Web Crypto API pruža provjerenu implementaciju u svakom modernom pregledniku.
Tok šifriranja: korak po korak
Evo točno što se događa kada šaljete datoteku putem SG/Send.
Generiranje ključa
Kada odaberete datoteku, Vaš preglednik generira nasumični 256-bitni AES ključ koristeći Web Crypto API (crypto.subtle.generateKey). Ovo koristi kriptografski siguran generator nasumičnih brojeva operativnog sustava. Ključ postoji samo u memoriji Vašeg preglednika.
Generiranje IV
12-bajtni inicijalizacijski vektor (IV) se generira nasumično (crypto.getRandomValues). IV osigurava da šifriranje iste datoteke dva puta proizvede različiti šifrirani tekst. IV nije tajna — dodaje se na početak šifriranog izlaza i šalje zajedno sa šifriranim tekstom.
Šifriranje
Datoteka se šifrira u pregledniku pomoću crypto.subtle.encrypt s AES-GCM algoritmom, generiranim ključem i IV-om. Izlaz je šifrirani tekst + 128-bitna oznaka autentikacije. Oznaka autentikacije je garancija integriteta GCM-a — ako bilo tko promijeni čak i jedan bit šifriranog teksta, dešifriranje će propasti.
Prijenos
Samo se šifrirani izlaz (IV + šifrirani tekst + oznaka autentikacije) prenosi na poslužitelj. Poslužitelj prima blob nasumično izgledajućih bajtova. Dodjeljuje ID prijenosa (12 nasumičnih znakova) i pohranjuje šifrirani tekst. Bez naziva datoteke, bez naznake vrste sadržaja, bez ključa — samo šifrirani bajtovi.
Dijeljenje poveznice
Pošiljatelj dobiva poveznicu za preuzimanje. Ključ za dešifriranje stavlja se u URL fragment (dio nakon #). URL fragmente preglednik nikada ne šalje na poslužitelj — to je definirano u RFC 3986. Pošiljatelj dijeli ovu poveznicu putem bilo kojeg kanala koji odabere (e-pošta, chat, osobno).
Dešifriranje
Primatelj otvara poveznicu. Njihov preglednik preuzima šifrirane bajtove s poslužitelja, izvlači ključ iz URL fragmenta, odvaja IV od šifriranog teksta i dešifrira pomoću crypto.subtle.decrypt. Ako se oznaka autentikacije ne podudara (otkrivena manipulacija), dešifriranje propada. Poslužitelj nikada ne sudjeluje u dešifriranju.
Što poslužitelj vidi naspram onoga što ne vidi
Ovo je garancija nultog znanja. Evo točno koji podaci postoje na poslužitelju.
Poslužitelj pohranjuje
ID prijenosa — nasumičnih 12 znakova
Šifrirani bajtovi — nerazlučivi od nasumičnih podataka
IP hash — SHA-256 IP adrese + dnevno rotirajuća sol
Vremenska oznaka — kada je prijenos kreiran
Veličina datoteke — veličina šifriranog bloba (bajtovi)
Poslužitelj nikada ne vidi
Ključ za šifriranje — ostaje u pregledniku, dijeli se putem URL fragmenta
Naziv datoteke — nikada se ne šalje na poslužitelj
Vrsta datoteke — ne pohranjuju se metapodaci o vrsti sadržaja
Sadržaj u čistom tekstu — samo šifrirani tekst se prenosi
Neobrađena IP adresa — hashirana prije pohrane
Tehnološki stog
Svaki sloj odabran je radi jednostavnosti, sigurnosti i implementacije bez ovisnosti.
| Sloj | Tehnologija | Namjena |
|---|---|---|
| Runtime | Python 3.12 / arm64 | Programski jezik aplikacijskog poslužitelja |
| Web okvir | FastAPI via osbot-fast-api | HTTP usmjeravanje i obrada zahtjeva |
| Računanje | AWS Lambda + Mangum | Serverless izvršavanje, plaćanje po korištenju |
| Pohrana | Memory-FS (Storage_FS) | Zamjenjivi pozadinski sustav: memorija, disk ili S3 |
| Šifriranje | Web Crypto API (AES-256-GCM) | Šifriranje na strani klijenta u pregledniku |
| Sustav tipova | Type_Safe (osbot-utils) | Definicije shema bez Pydantic |
| Frontend | Vanilla JS + Web Components | Nula ovisnosti o okvirima (IFD) |
| Testiranje | pytest, stog u memoriji | Bez mock-ova, bez patch-eva, stvarne implementacije |
| CI/CD | GitHub Actions | Cjevovod za testiranje, označavanje i implementaciju |
Arhitektura sustava
Dvije Lambda funkcije, jedan sloj pohrane, jedan CDN. Jednostavno po dizajnu.
User Lambda (Javna)
Javna funkcija koja obrađuje prijenose datoteka, provjere zdravlja, unaprijed potpisane prijenose, osobne trezore i MCP integraciju. Pristupa se putem Lambda Function URL iza CloudFront.
18 krajnjih točakaAdmin Lambda (Autenticirana)
Funkcija samo za administratore za upravljanje tokenima, analitiku, statistike poslužitelja i MCP administratorske alate. Zahtijeva autentikaciju. Zasebna Lambda = zasebna sigurnosna granica.
55 krajnjih točakaMemory-FS (Storage_FS)
Sva pohrana prolazi kroz sloj apstrakcije. Aplikacijski kod nikada ne zna je li pozadinski sustav u memoriji, na disku ili S3. Ista baza koda na svih 7 ciljeva implementacije bez promjene jednog retka aplikacijske logike.
Zamjenjivi pozadinski sustavCloudFront CDN
Statički resursi, predmemoriranje, SSL terminacija i WAF. Lambda URL-ovi pružaju HTTPS krajnje točke izravno — nije potreban API Gateway.
Rubna mrežaCiljevi implementacije
Jedna baza koda, sedam ciljeva implementacije grupiranih u četiri obrasca.
Lambda
Primarna implementacija. Dvije Lambda funkcije iza Lambda Function URLs. Izravne HTTPS krajnje točke, bez potrebe za API Gateway.
ProdukcijaKontejner
Docker, AWS Fargate i GCP Cloud Run. Ista aplikacija pakirana kao kontejner.
Docker / Fargate / GCPPoslužitelj
EC2 instance i AMI izgradnje. Za timove kojima je potrebna potpuna kontrola nad runtime okruženjem.
EC2 / AMICLI
Sučelje naredbenog retka za skriptirane prijenose, CI/CD cjevovode i napredne korisnike.
Terminal