FocusLM
Tutti gli articoli

Cifrare la memoria dell'IA: perché una chiave per progetto batte una per database

27 luglio 20269 min di lettura

Una memoria che vale la pena avere è una memoria che vale la pena proteggere. Se un sistema conserverà ciò che gli avete raccontato sulla diagnosi di vostro figlio, sulla vostra causa legale o sulle vostre finanze, allora la formula « cifrato a riposo » — quella che usa ogni fornitore — merita uno sguardo più severo su cosa significhi davvero.

TL;DR

  • Ogni file di memoria e ogni messaggio di chat è cifrato con una chiave che appartiene a un solo progetto, non con un'unica chiave per l'intero database.
  • Eliminare un progetto ne distrugge la chiave, così i dati diventano illeggibili anche nei backup, non solo nel sistema in produzione.
  • Non cerchiamo su testo cifrato e non memorizziamo il vostro testo nell'indice di ricerca. Entrambe le scelte derivano da attacchi pubblicati, non dal gusto.

Cosa significa di solito « cifrato a riposo »

Il più delle volte significa cifratura dell'intero disco o volume. Il disco è cifrato; il processo del database detiene la chiave e decifra tutto ciò che legge. Questo difende da una cosa sola — che qualcuno rimuova fisicamente il disco — e da quasi nient'altro. Un attaccante che raggiunge il database in esecuzione, un backup rubato che porta con sé la chiave, una query interna troppo ampia: in tutti questi casi i dati sono leggibili senz'altro, perché dal punto di vista del database lo sono sempre stati.

Per un prodotto costruito sulla memoria ha inoltre una proprietà scomoda: una chiave apre tutti. Non c'è confine tecnico tra il vostro materiale e quello di un altro cliente, solo query scritte correttamente.

Una chiave per progetto

FocusLM cifra a livello di riga, non di disco. Ogni progetto riceve la propria chiave dei dati. Ogni file di memoria, ogni sua revisione e ogni messaggio della chat di quel progetto è cifrato con quella chiave e nessun'altra. I thread di chat che non appartengono a nessun progetto sono cifrati con una chiave dello spazio di lavoro, per lo stesso principio.

Quelle chiavi per progetto sono a loro volta cifrate da un'unica chiave per ambiente, mai conservata accanto ai dati che protegge. Questa disposizione — una chiave che cifra chiavi, che cifrano dati — è la cifratura a busta, ed è la raccomandazione standard per le gerarchie di chiavi nelle linee guida sulla gestione delle chiavi del NIST. Porta due cose pratiche: ruotare la chiave superiore tocca una piccola riga per progetto anziché ricifrare i dati di chiunque, e la chiave di un singolo progetto può essere distrutta da sola.

Chiave d'ambiente (KEK)mai conservata accanto ai datiavvolgeChiave del progetto AChiave del progetto BMemoria + chat di AMemoria + chat di Bdistruggi questa → A è illeggibile ovunque, backup compresi
Una chiave d'ambiente avvolge una chiave dei dati distinta per progetto. Il materiale del progetto A è cifrato solo con la chiave di A: il database non detiene mai una chiave che apra tutto.

Il legame è più stretto di « stessa chiave, stesso progetto ». Ogni valore cifrato è legato crittograficamente alla riga e al progetto esatti a cui appartiene, così un testo cifrato copiato in un altro progetto non si decifra nel contesto sbagliato: non si decifra affatto. Spostare dati tra tenant non è un bug sottile che emerge dopo; è un errore nel momento stesso del tentativo.

Perché non cerchiamo su testo cifrato

Il desiderio ovvio è tenere tutto cifrato ed eseguire comunque una ricerca testuale ordinaria. Gli schemi esistono — la cifratura deterministica rende uguali i valori uguali, quella che preserva l'ordine mantiene i valori ordinabili — e sono comodi esattamente quanto sembrano.

E perdono anche. Una lunga serie di lavori sugli attacchi di inferenza contro database cifrati che preservano proprietà mostra che, quando i testi cifrati preservano l'uguaglianza o l'ordine, un attaccante che dispone solo della colonna cifrata e di comune statistica pubblica può recuperare gran parte del testo in chiaro. L'analisi delle frequenze fa quasi tutto il lavoro: nei dati reali la distribuzione dei valori è raramente piatta, e una cifratura che preserva la struttura preserva con essa la distribuzione.

Per questo FocusLM decifra all'interno dell'applicazione e filtra lì, invece di chiedere al database di confrontare su testo cifrato. Il costo è reale e merita di essere nominato: una ricerca letterale legge tutte le note del progetto anziché lasciare che un indice le restringa prima, così il lavoro cresce con la dimensione della vostra memoria invece di restare costante. L'abbiamo preferito all'acquistare la ricercabilità al prezzo di una fuga permanente delle frequenze dei termini — che, in una memoria personale, sono le parole che contano di più.

L'indice di ricerca non contiene il vostro testo

La ricerca semantica ha bisogno di vettori, e i vettori hanno una loro storia di privacy — facile da sbagliare, perché un embedding sembra un elenco inerte di numeri.

Non è inerte. In Text Embeddings Reveal (Almost) As Much As Text, Morris e colleghi hanno mostrato che gli embedding densi possono essere invertiti nel loro testo originale trattando la ricostruzione come generazione controllata e correggendo iterativamente un'ipotesi finché non si re-embedda nello stesso punto. Hanno recuperato il 92% degli input da 32 token in modo esattoe ricavato nomi completi di pazienti da un corpus di note cliniche. Lavori successivi hanno generalizzato l'attacco: un modello di inversione generativo può ricostruire intere frasi coerenti da un singolo embedding di frase, e studi di follow-up hanno riprodotto ed esteso il risultato.

Rimuovere il testo, però, non chiude quell'argomento, e presentarlo come tale sarebbe disonesto. Il vettore stesso è ancora lì— deve esserlo, perché la geometria tra i vettori è esattamente ciò che rende possibile la ricerca semantica. Cifrarlo come cifriamo una nota non lascerebbe nulla da cercare.

Il passo successivo è quindi legare lo spazio dei vettori alla stessa chiave per progetto che già protegge il contenuto: i vettori di ogni progetto risiedono in uno spazio che solo la chiave di quel progetto descrive. Questo mantiene la ricerca invariata e al contempo rende i vettori inutilizzabili nelle coordinate proprie del modello di embedding — dove operano gli attacchi di inversione pubblicati. Alza il costo di un attacco invece di eliminarlo, e preferiamo dirlo piuttosto che chiamarlo cifratura. È in corso, non rilasciato.

92%dei testi brevi ricostruiti in modo esatto dai soli embedding

La conseguenza per un prodotto di memoria è diretta: un indice di vettori rubato va trattato come testo in chiaro rubato. Per questo l'indice di FocusLM memorizza il vettore, il percorso del file e un'impronta con chiave — e non il testo delle vostre note. Quando una ricerca trova corrispondenza, lo snippet che leggete viene recuperato e decifrato dall'archivio cifrato in quel momento. L'indice sa dove si trova qualcosa di rilevante; non sa cosa dice.

Un embedding non è una versione anonimizzata del vostro testo. È una reversibile.

Un'eliminazione che sopravvive al backup

« Eliminare », nella maggior parte dei sistemi, significa contrassegnare una riga come eliminata. I dati restano — nella tabella, nel dump di ieri sera, nella replica, in qualunque conservazione abbiano i backup. Per una nota sulla malattia di un figlio, questa non è un'eliminazione in alcun senso che la persona che la richiede riconoscerebbe.

Poiché ogni progetto ha la propria chiave, possiamo fare qualcosa di più forte: eliminare un progetto distrugge quella chiave. Il testo cifrato resta dove già si trova, e nulla di esso può più essere letto — né nel database in produzione, né in uno snapshot preso prima dell'eliminazione. Questo è il crypto-shredding, ed è la risposta standard alla cancellazione nei sistemi in cui sovrascrivere fisicamente ogni copia è impraticabile o non verificabile, cioè ogni sistema distribuito con backup.

Lavori recenti affinano il caso specificamente per i sistemi di IA. Uno studio del 2026 sui database di vettori ha rilevato che gli embedding semplicemente eliminati in modo logicorestano ricostruibili dalla struttura dell'indice: l'eliminazione è un flag, e i dati sono ancora lì per chi legge il file invece di interrogare il motore di query. Combinato con l'inversione degli embedding, un soft-delete in un archivio di vettori non è affatto un delete.

Il crypto-shredding è davvero irreversibile, il che è l'obiettivo e anche il rischio. Ripristinare un progetto eliminato da un backup riporta righe che nessuno può leggere. Per questo FocusLM vi chiede di digitare il nome del progetto prima che se ne vada — lo stesso attrito che protegge un'azione distruttiva ovunque altro.

Cosa resta onestamente visibile

Le promesse di cifratura valgono esattamente quanto le eccezioni che ammettono. Le nostre:

Un motivo li attraversa: il contenuto è protetto, i nomi no. Percorsi, titoli e nomi di file sono ciò che il sistema deve leggere per organizzare e trovare, quindi restano leggibili. È un limite reale, è quello di cui vorremmo essere avvisati come utenti, ed è la prossima cosa su cui lavorare, non una nota a piè di pagina da liquidare.

Perché questo conta in particolare per un prodotto di memoria

Un assistente di chat che vi dimentica tra una sessione e l'altra detiene poco che valga la pena rubare. Un sistema costruito per accumulare le cose a cui tornate di continuo — la memoria strutturata che rende possibili risposte fondate — accumula esattamente il materiale che non dovrebbe mai trapelare. Il valore della memoria e la sua sensibilità crescono insieme; sono la stessa proprietà vista da due lati.

È la ragione per mettere l'ingegneria in una chiave per progetto invece che in una casella che dice cifrato. Più forte è la memoria, meno accettabile è la risposta ordinaria.

Letture correlate