zkast.io
Hosting video crittografato end-to-end: cifratura locale, upload di soli ciphertext e player web con chiave di decrittazione controllata dal tuo backend.
Player in azione
Video demo crittografato con zkast e riprodotto nel browser tramite il web component ufficiale.
Prova la stessa pagina su www.commis.dev : il player non riprodurrà nulla — in dashboard zkast ho autorizzato solo commis.dev, non www.commis.dev.
Cos’è
zkast è una piattaforma di hosting e streaming video con architettura zero-knowledge: i file vengono crittografati sul dispositivo dell’uploader prima di lasciare il computer, e il servizio non riceve mai video in chiaro né la chiave di decrittazione.
Il flusso è pensato per chi distribuisce contenuti premium — corsi online, video riservati, materiali protetti — senza affidare la chiave a un CDN tradizionale. Tu conservi il controllo su chi può guardare, tramite un endpoint bootstrap sul tuo backend.
Documentazione utente completa su docs.zkast.io. Dashboard su dashboard.zkast.io.
Funzionalità principali
- Cifratura locale — la chiave AES-GCM nasce sul computer dell’uploader; zkast memorizza solo ciphertext e manifest.
- CLI
zkast-upload— transcoding multi-rendition (fino a 2160p), cifratura per chunk, upload ripristinabile con--resume. - Player web component —
<zkast-player>con adaptive bitrate, selezione qualità, audio multi-track e sottotitoli WebVTT. - Bootstrap server — la chiave di decrittazione la restituisce solo il backend del cliente, dopo aver verificato l’autorizzazione del viewer.
- Verifica dominio — registrazione hostname + record DNS TXT per legare il player al sito autorizzato.
- Dashboard — libreria video, embed sicuro, piani storage (Starter 1 TB, Pro 3 TB, Studio 10 TB) con billing Stripe.
- API REST — upload programmatico, gestione video, sessioni embed con token temporanei.
Architettura
Video sorgente
→ CLI (ffmpeg + AES-GCM) — cifratura locale
→ API zkast — solo ciphertext + manifest v2
→ Player nel browser — session token + bootstrap-url
→ Decrittazione in RAM via Web Crypto API, mai su disco
Punti chiave del design:
- Zero-knowledge storage — zkast non può decifrare i contenuti, nemmeno in caso di accesso al backend o allo storage.
- Separazione chiave/contenuto — la
decryption_keynon compare mai nell’HTML pubblico; transita solo dal bootstrap server autorizzato. - Session token temporanei — il player rinnova i token durante la riproduzione; gli URL dei chunk scadono rapidamente.
- Manifest v2 — renditions indicizzate, chunk cifrati, sottotitoli WebVTT estratti e caricati separatamente.
Esempi di codice
Embed sul sito
<script src="https://api.zkast.io/player/zkast-player.js?v=39"></script>
<zkast-player
api-base="https://api.zkast.io"
video-id="vid_a1b2c3d4e5f67890"
embed-id="550e8400-e29b-41d4-a716-446655440000"
bootstrap-url="https://tuosito.com/api/zkast/video/vid_a1b2c3d4e5f67890/session"
></zkast-player>
Bootstrap server (controllo accessi)
app.get('/api/zkast/video/:id/session', (req, res) => {
if (!req.user) {
return res.status(403).json({ error: 'Unauthorized' });
}
const videoId = req.params.id;
const key = getDecryptionKeyFromYourDatabase(videoId);
res.set('Cache-Control', 'no-store');
res.json({ video_id: videoId, decryption_key: key });
});
Upload con la CLI
zkast-upload \
--api-base https://api.zkast.io \
--api-key YOUR_API_KEY \
--file ~/Videos/lezione-01.mp4 \
--title "Lezione 1"
Dettagli su pipeline CLI, player e bootstrap nelle pagine di documentazione in fondo.
Stack
| Layer | Tecnologia |
|---|---|
| CLI | Node.js 18+, ffmpeg/ffprobe |
| Cifratura | AES-GCM 256-bit (Web Crypto API nel player) |
| API | REST, auth Bearer (API key / session token) |
| Storage | Object storage (chunk cifrati + manifest) |
| Player | Web Component, decrittazione in-browser via MSE |
| Billing | Stripe (abbonamenti mensili) |
| Dashboard | Account, CORS domains, video library |
Sviluppo con agenti AI
L’intero prodotto — API, CLI, player, dashboard, documentazione e sito marketing — è stato costruito in collaborazione con agenti AI (Claude e Codex). Il ruolo umano: definire requisiti di sicurezza e modello zero-knowledge, rivedere architettura e diff, decidere tradeoff (es. cifratura client-side vs costi di transcoding, scadenza token, formato manifest). Gli agenti hanno prodotto implementazioni, refactor e documentazione; ogni cambio è passato per review prima del deploy.