0Pricing
Cryptology Academy · Lekcja

Path ORAM: ukrywanie dostępu do pamięci

Proszę poznać konstrukcję Path ORAM — drzewa binarne, stash i mapę pozycji — oraz jej gwarancje bezpieczeństwa.

Path ORAM: ukrywanie dostępu do pamięci to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Wprowadzenie do Path ORAM

Path ORAM, zaproponowany przez Stefana, van Dijka, Shiego, Fletchera, Rena, Yu i Devadasa (2013), jest najbardziej wpływową w praktyce konstrukcją ORAM. Organizuje pamięć serwera jako binarne drzewo kubełków, w którym każdy liść odpowiada pozycji bloku danych. Path ORAM w podstawowej postaci osiąga narzut komunikacyjny O(log^2 N) na dostęp i jest na tyle prosty, że można go zaimplementować w kilkuset wierszach kodu.

Mapa pozycji

Mapa pozycji jest strukturą danych po stronie klienta, która mapuje każdy logiczny adres bloku na liść w drzewie binarnym. W bazie danych zawierającej N bloków i drzewie o wysokości L = log N mapa pozycji jest tablicą N indeksów liści. Przed uzyskaniem dostępu do bloku b klient wyszukuje w mapie pozycji aktualnie przypisany mu liść i przypisuje mu nowy losowy liść. Stara ścieżka od liścia do korzenia zostanie odczytana z serwera i ponownie na nim zapisana.

Bufor stash

Bufor stash jest niewielkim buforem po stronie klienta (zwykle mieszczącym 20–40 bloków), który tymczasowo przechowuje bloki odczytane z serwera, ale jeszcze na nim niezapisane. Po odczytaniu blok jest usuwany ze swojej ścieżki i umieszczany w buforze stash. Po uzyskaniu dostępu do niego i ewentualnej modyfikacji wszystkie bloki z bufora stash, które można umieścić na nowej ścieżce, są zapisywane z powrotem. Bloki, które nie mieszczą się na żadnej ścieżce, pozostają w buforze stash.

Struktura drzewa pamięci

Pamięć serwera jest pełnym drzewem binarnym o L+1 poziomach (L = log N). Każdy węzeł (kubełek) przechowuje Z bloków (zwykle Z = 5). Liście odpowiadają pozycjom bloków danych. Istnieje N liści, więc łącznie jest 2N-1 węzłów, a całkowita pamięć serwera wynosi O(NZ). Każda ścieżka od liścia do korzenia zawiera log N węzłów i może pomieścić Z*log N bloków, zapewniając pojemność potrzebną strategii eksmisji bloków ze ścieżki.

Operacja odczytu w Path ORAM

Aby odczytać blok b: (1) wyszukaj w mapie pozycji bieżący liść l przypisany do b; (2) przypisz b nowy losowy liść l' i zaktualizuj mapę pozycji; (3) odczytaj wszystkie kubełki na ścieżce od liścia l do korzenia (log N kubełków); (4) znajdź blok b na odczytanej ścieżce lub w buforze stash; (5) zapisz z powrotem wszystkie bloki, które można przypisać do nowej ścieżki l', a pozostałe miejsca w kubełkach wypełnij blokami pozornymi. Serwer przy każdym dostępie widzi odczyt losowej ścieżki.

Dostępy pozorne i ukrywanie wzorców

Path ORAM zachowuje ukrywanie wzorców dostępu, ponieważ każdy dostęp odczytuje i zapisuje dokładnie jedną ścieżkę od korzenia do liścia, niezależnie od tego, do którego bloku uzyskiwany jest dostęp. Ścieżka jest wyznaczana przez jednostajnie losowe przypisanie liścia, a nie przez zawartość ani adres bloku. Bloki pozorne wypełniają wszystkie puste miejsca w kubełkach, dzięki czemu każda ścieżka ma taką samą liczbę zajętych miejsc. Przeciwnik obserwujący serwer widzi wyłącznie dostępy do losowych ścieżek.

Złożoność komunikacyjna

Każdy dostęp w Path ORAM wymaga odczytu i zapisu jednej ścieżki od korzenia do liścia: O(log N) kubełków zawierających po Z bloków. Przy rozmiarze bloku B i rozmiarze kubełka Z każdy dostęp przesyła O(Z * log N * B) bitów. Dla typowych parametrów (N = 2^20, Z = 5, B = 4KB) daje to około 400KB na dostęp, w porównaniu z 4KB przy dostępie do tekstu jawnego — narzut 100-krotny. Rekurencyjne mapy pozycji zmniejszają komunikację do O(log^2 N) w przeliczeniu na bloki.

Rekurencyjna mapa pozycji

Naiwna mapa pozycji wymaga przechowywania N wpisów po stronie klienta, co oznacza pamięć klienta O(N) — tak dużą jak cała baza danych. Rekurencyjna mapa pozycji zmniejsza pamięć po stronie klienta do O(log^2 N), przechowując samą mapę pozycji w mniejszym ORAM w sposób rekurencyjny. Rekurencja kończy się, gdy ORAM jest na tyle mały, że mieści się w buforze stash. Jest to standardowa technika umożliwiająca praktyczne zastosowanie Path ORAM dla dużych zbiorów danych.

Analiza przepełnienia bufora stash

Rozmiar bufora stash w Path ORAM rośnie, jeśli bloków nie można eksmitować na przypisane im ścieżki z powodu konfliktów ścieżek. Stefanov i in. dowiedli, że bufor stash przepełnia się (przekracza R bloków) z prawdopodobieństwem wykładniczo małym względem R — dokładniej, w standardowej analizie wynosi ono co najwyżej 14 * (0.6002)^R. Ustawienie R = 40 daje prawdopodobieństwo awarii wynoszące około 2^{-38}; wynik ten obowiązuje dla wszystkich sekwencji dostępów, również tych wybranych przez przeciwnika.

Porównanie z innymi konstrukcjami ORAM

Przed powstaniem Path ORAM najlepsze praktyczne konstrukcje ORAM miały narzut O(log^3 N) (Shi et al. 2011, "Oblivious RAM with O((log N)^3) Worst-Case Cost"). Path ORAM zmniejszył go do O(log^2 N), oferując znacznie prostszą strukturę. Późniejsze prace (Circuit ORAM, OptORAMa) dodatkowo poprawiły stałe i granice asymptotyczne, ale Path ORAM pozostaje najszerzej implementowaną konstrukcją ze względu na swoją prostotę.

Implementacja Path ORAM

Path ORAM zaimplementowano w dziesiątkach systemów badawczych i produkcyjnych. ZeroTrace (Intel SGX + Path ORAM), Obladi (Path ORAM w pamięci chmurowej) i Opaque (Path ORAM w Apache Spark) to przykłady znaczących implementacji. Grupa Stanford zajmująca się bezpiecznymi obliczeniami utrzymuje implementację Path ORAM w języku C++ o otwartym kodzie źródłowym. AWS oferuje Path ORAM jako część prototypów badawczych Nitro Enclaves służących do analityki danych z zachowaniem prywatności.

Quiz: mapa pozycji

Jaką rolę pełni mapa pozycji w Path ORAM?

Podsumowanie Path ORAM

Path ORAM organizuje pamięć serwera jako drzewo binarne, w którym każdy dostęp odczytuje i zapisuje jedną ścieżkę od korzenia do liścia. Mapa pozycji śledzi bieżące przypisanie każdego bloku do liścia, a bufor stash przechowuje ostatnio używane bloki. Każdy dostęp jest losowany przez przypisanie nowych losowych pozycji liści, dzięki czemu wszystkie dostępy widoczne dla serwera mają identyczny rozkład. Narzut komunikacyjny wynosi O(Z * log N) na dostęp. Rekurencyjne mapy pozycji zmniejszają pamięć klienta do O(log^2 N). Path ORAM jest najszerzej implementowaną konstrukcją ORAM.

Często zadawane pytania

Czy lekcja „Path ORAM: ukrywanie dostępu do pamięci” jest bezpłatna?

Tak — pełny tekst „Path ORAM: ukrywanie dostępu do pamięci” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Path ORAM: ukrywanie dostępu do pamięci”?

Proszę poznać konstrukcję Path ORAM — drzewa binarne, stash i mapę pozycji — oraz jej gwarancje bezpieczeństwa. Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Path ORAM: ukrywanie dostępu do pamięci”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?

Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zagrożenie wyciekiem wzorców dostępu
  2. Path ORAM: ukrywanie dostępu do pamięci
  3. Circuit ORAM i wydajność praktyczna
  4. ORAM w pamięci masowej w chmurze i bezpiecznych procesorach
← Powrót do Cryptology Academy