Architettura
Modello zero-knowledge, flusso encrypt → upload → playback e cosa zkast sa (e cosa no).
Modello di minaccia
zkast parte da un presupposto semplice: chi controlla lo storage non deve poter leggere i contenuti. Un CDN o un bucket cloud compromesso non deve esporre video in chiaro.
La risposta non è “crittografare a riposo lato server” — in quel caso la chiave resta comunque nel perimetro del provider. La risposta è cifratura client-side prima dell’upload, con custodia della chiave separata dal contenuto.
Cosa sa zkast
| Dato | zkast lo conosce? |
|---|---|
| Chunk cifrati in storage | Sì |
| Manifest (renditions, indici chunk) | Sì |
| Metadati video (titolo, durata, stato) | Sì |
| Chiave AES di decrittazione | No |
| Contenuto video in chiaro | No |
La chiave vive nel backend del cliente (o in un secret manager) e viene consegnata al player solo tramite bootstrap, dopo autorizzazione.
Flusso end-to-end
1. Uploader esegue zkast-upload in locale
→ ffmpeg produce renditions (1080p, 720p, …)
→ ogni chunk viene cifrato con AES-GCM
→ upload di soli ciphertext via API
2. Viewer apre la pagina con <zkast-player>
→ il player richiede una sessione embed a zkast (legata al dominio)
→ il player chiama bootstrap-url sul backend del cliente
→ riceve decryption_key solo se autorizzato
3. Playback
→ download chunk cifrati con token temporanei
→ decrittazione in RAM via Web Crypto API
→ injection in Media Source Extensions — niente file su disco
Session token e dominio
Prima di servire chunk, zkast verifica che la richiesta provenga da un dominio registrato e verificato (CORS + record DNS TXT). Il token di sessione embed scade e viene rinnovato durante la riproduzione.
Questo blocca l’hotlinking: condividere un URL di chunk non basta — serve dominio autorizzato + sessione valida + chiave dal bootstrap.
Perché non transcoding server-side
Transcodare sul server implicherebbe decifrare (o non cifrare mai) il video in RAM del backend — violando il modello zero-knowledge. Pre-transcodare in locale con ffmpeg e caricare renditions già cifrate mantiene la garanzia e riduce i costi di compute cloud.
Per i dettagli operativi vedi la guida su docs.zkast.io.