Come funziona la crittografia
Una descrizione tecnica e onesta di cosa protegge kernix, come lo fa e quali sono i limiti.
Account e password
- Dalla password, nel tuo browser, deriviamo una chiave con PBKDF2-SHA256 (600.000 iterazioni) e un sale casuale. Da questa, con HKDF, nascono due chiavi separate: una chiave di accesso e una chiave del vault.
- Al server arriva solo la chiave di accesso, che il server ri-hasha con scrypt. Non permette di decifrare nulla.
- La chiave del vault non lascia mai il dispositivo: cifra (AES-256-GCM) le tue chiavi private. Il server conserva solo questo vault cifrato.
- La 2FA (TOTP) è obbligatoria. I segreti 2FA sono cifrati sul server con una chiave che non sta nel database.
Chiavi d'identità
Ogni account ha una coppia ECDH P-256 (per ricevere chiavi) e una coppia ECDSA P-256 (per firmare). Una volta sbloccate nel browser, le chiavi private vengono importate come non estraibili.
Messaggi
- Ogni DM, Bubble e group ha una chiave di conversazione casuale da 256 bit, organizzata in epoche.
- La chiave viene consegnata a ciascun membro cifrandola per lui: ECDH con una chiave effimera, HKDF, AES-256-GCM. Ogni consegna è firmata da chi la invia e accompagnata da un impegno crittografico (HMAC) che permette di scartare chiavi false.
- Ogni messaggio è cifrato con AES-256-GCM. Conversazione, epoca, mittente e ID del messaggio sono legati come dati autenticati: il server non può spostare un messaggio in un'altra chat né attribuirlo a un altro utente.
- Ogni messaggio è firmato con la chiave ECDSA del mittente: nemmeno un altro membro può fingersi te.
- Quando qualcuno esce o viene rimosso, il primo membro che scrive genera una nuova epoca e la consegna ai membri rimasti. Il server rifiuta i messaggi con la vecchia chiave finché la rotazione non è avvenuta.
Passaggio tra i sottodomini
Dopo l'accesso il browser crea una chiave di sessione casuale e salva sul server solo le tue chiavi cifrate con essa. La chiave di sessione resta nel browser e passa tra app, i groups e link nel frammento dell'URL (#…), che i browser non inviano mai ai server.
Cosa vede il server
| Cifrato end-to-end (il server non lo vede) | Visibile al server |
|---|---|
| Testo dei messaggi, modifiche, risposte Foto e messaggi vocali Nome delle Bubbles Segnalazione delle chiamate vocali Le tue chiavi private | Username, foto e info del profilo Chi è membro di quale chat o group Quando è stato inviato un messaggio e la sua dimensione Nomi di groups, stanze e ruoli Le conversazioni con Cyprix AI (non cifrate) I messaggi inviati volontariamente con una segnalazione |
Limiti, detti chiaramente
- Forward secrecy limitata. Le chiavi cambiano quando cambiano i membri, non a ogni messaggio come nel protocollo Signal. Chi ottiene la tua password e il tuo vault può leggere la cronologia.
- Fiducia nelle chiavi pubbliche. Il server distribuisce le chiavi pubbliche. kernix ricorda le chiavi dei tuoi contatti e ti avvisa se cambiano; per la massima garanzia verifica il numero di sicurezza.
- App web. Il codice cifrante viene servito dal server a ogni visita. Il client da terminale ha file verificati da checksum al momento dell'installazione.
- Cyprix AI. Le conversazioni con l'assistente non sono cifrate end-to-end e vengono registrate: il server deve leggerle per rispondere. Vedi Cyprix AI.
- Bot. Un bot aggiunto a un group è un membro a tutti gli effetti: decifra i messaggi delle stanze che può vedere sul computer di chi lo gestisce.
- Metadati. Il server deve sapere a chi consegnare i messaggi. Non registriamo IP né accessi, ma l'appartenenza alle chat esiste nel database finché esiste la chat.