kernixdocs

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.