0Pricing
Cryptology Academy · Lezione

Path ORAM: nascondere gli accessi alla memoria

Esamini la costruzione di Path ORAM — alberi binari, stash e position map — e le relative garanzie di sicurezza.

Path ORAM: nascondere gli accessi alla memoria è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Introduzione a Path ORAM

Path ORAM, proposta da Stefanov, van Dijk, Shi, Fletcher, Ren, Yu e Devadas (2013), è la costruzione ORAM più influente dal punto di vista pratico. Organizza lo storage sul server come un albero binario di bucket, in cui ogni foglia corrisponde a una posizione per un blocco di dati. Nella sua forma di base, Path ORAM raggiunge un overhead di comunicazione O(log^2 N) per accesso ed è abbastanza semplice da poter essere implementata in poche centinaia di righe di codice.

La mappa delle posizioni

La mappa delle posizioni è una struttura dati lato client che associa ogni indirizzo logico di blocco a un nodo foglia dell'albero binario. Per un database di N blocchi con un albero di altezza L = log N, la mappa delle posizioni è un array di indici delle foglie. Prima di accedere al blocco b, il client cerca nella mappa delle posizioni la foglia attualmente assegnata e assegna al blocco una nuova foglia casuale. Il vecchio percorso dalla foglia alla radice verrà letto dal server e riscritto.

Lo stash

Lo stash è un piccolo buffer lato client, che contiene in genere 20-40 blocchi e conserva temporaneamente i blocchi letti dal server ma non ancora riscritti. Quando un blocco viene letto, viene rimosso dal relativo percorso e inserito nello stash. Dopo averlo consultato ed eventualmente modificato, tutti i blocchi dello stash che possono essere collocati nel nuovo percorso vengono riscritti. I blocchi che non possono entrare in un percorso rimangono nello stash.

Struttura dello storage ad albero

Lo storage sul server è un albero binario completo con L+1 livelli (L = log N). Ogni nodo (bucket) contiene Z blocchi, in genere Z = 5. Le foglie corrispondono alle posizioni dei blocchi di dati. Ci sono N nodi foglia, quindi in totale ci sono 2N-1 nodi e O(NZ) di storage sul server. Ogni percorso dalla foglia alla radice contiene log N nodi e può contenere Z*log N blocchi, fornendo la capacità necessaria per la strategia di eviction lungo il percorso.

Operazione di lettura di Path ORAM

Per leggere il blocco b: (1) cercare nella mappa delle posizioni la foglia corrente l di b; (2) assegnare a b una nuova foglia casuale l' e aggiornare la mappa delle posizioni; (3) leggere tutti i bucket sul percorso dalla foglia l alla radice (log N bucket); (4) trovare il blocco b nel percorso letto o nello stash; (5) riscrivere tutti i blocchi che possono essere assegnati al nuovo percorso l' e riempire gli slot rimanenti dei bucket con blocchi fittizi. Il server vede ogni volta la lettura di un percorso casuale.

Accessi fittizi e obliviousness

Path ORAM mantiene l'obliviousness perché ogni accesso legge e scrive esattamente un percorso dalla radice alla foglia, indipendentemente dal blocco consultato. Il percorso è determinato dall'assegnazione di una foglia uniformemente casuale, non dal contenuto o dall'indirizzo del blocco. I blocchi fittizi riempiono gli slot vuoti dei bucket, così ogni percorso ha lo stesso numero di slot occupati. Un avversario che osserva il server vede soltanto accessi a percorsi casuali.

Complessità della comunicazione

Ogni accesso a Path ORAM richiede la lettura e la scrittura di un percorso dalla radice alla foglia: O(log N) bucket, ciascuno composto da Z blocchi. Con una dimensione del blocco B e una dimensione del bucket Z, ogni accesso trasferisce O(Z * log N * B) bit. Con parametri tipici (N = 2^20, Z = 5, B = 4KB), ciò corrisponde a circa 400KB per accesso, rispetto ai 4KB di un accesso al testo in chiaro: un overhead di 100x. Le mappe delle posizioni ricorsive riducono questo valore a O(log^2 N) in termini di blocchi.

Mappa delle posizioni ricorsiva

La mappa delle posizioni ingenua richiede N voci memorizzate sul client, ovvero O(N) di storage lato client, grande quanto l'intero database. La mappa delle posizioni ricorsiva riduce lo storage sul client a O(log^2 N), memorizzando ricorsivamente la mappa delle posizioni stessa in un ORAM più piccolo. La ricorsione termina quando l'ORAM è abbastanza piccola da entrare nello stash. Questa è la tecnica standard per rendere Path ORAM pratica per dataset di grandi dimensioni.

Analisi dell'overflow dello stash

La dimensione dello stash in Path ORAM cresce se i blocchi non possono essere espulsi nei percorsi loro assegnati a causa di conflitti tra percorsi. Stefanov et al. hanno dimostrato che lo stash va in overflow, ovvero supera R blocchi, con una probabilità esponenzialmente piccola in R: nello specifico, al massimo 14 * (0.6002)^R secondo l'analisi standard. Impostando R = 40 si ottiene una probabilità di errore di circa 2^{-38}, e questo vale per tutte le sequenze di accesso, comprese quelle scelte dall'avversario.

Confronto con altre costruzioni ORAM

Prima di Path ORAM, le migliori costruzioni ORAM pratiche avevano un overhead di O(log^3 N) (Shi et al. 2011, "Oblivious RAM with O((log N)^3) Worst-Case Cost"). Path ORAM lo ha ridotto a O(log^2 N) con una struttura molto più semplice. I lavori successivi (Circuit ORAM, OptORAMa) hanno ulteriormente migliorato le costanti e i limiti asintotici, ma Path ORAM rimane la costruzione più implementata grazie alla sua semplicità.

Implementazione di Path ORAM

Path ORAM è stata implementata in decine di sistemi di ricerca e di produzione. ZeroTrace (Intel SGX + Path ORAM), Obladi (Path ORAM su storage cloud) e Opaque (Path ORAM su Apache Spark) sono implementazioni degne di nota. Il gruppo di secure computation di Stanford mantiene un'implementazione open source di Path ORAM in C++. AWS offre Path ORAM come parte dei suoi prototipi di ricerca Nitro Enclaves per l'analisi dei dati con tutela della privacy.

Quiz sulla mappa delle posizioni

Qual è il ruolo della mappa delle posizioni in Path ORAM?

Riepilogo di Path ORAM

Path ORAM organizza lo storage sul server come un albero binario, in cui ogni accesso legge e scrive un percorso dalla radice alla foglia. La mappa delle posizioni tiene traccia dell'assegnazione corrente di ogni blocco a una foglia; lo stash conserva temporaneamente i blocchi consultati di recente. Ogni accesso viene randomizzato assegnando nuove posizioni casuali alle foglie, facendo sì che tutti gli accessi visibili al server abbiano distribuzioni identiche. L'overhead di comunicazione è O(Z * log N) per accesso. Le mappe delle posizioni ricorsive riducono lo storage sul client a O(log^2 N). Path ORAM è la costruzione ORAM più implementata.

Domande Frequenti

La lezione «Path ORAM: nascondere gli accessi alla memoria» è gratuita?

Sì — il testo completo di «Path ORAM: nascondere gli accessi alla memoria» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «Path ORAM: nascondere gli accessi alla memoria»?

Esamini la costruzione di Path ORAM — alberi binari, stash e position map — e le relative garanzie di sicurezza. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cryptology Academy?

Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Path ORAM: nascondere gli accessi alla memoria»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?

Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. La minaccia della fuga dai pattern di accesso
  2. Path ORAM: nascondere gli accessi alla memoria
  3. Circuit ORAM e prestazioni pratiche
  4. ORAM nello storage cloud e nei processori sicuri
← Torna a Cryptology Academy