A jednak się da!
Nie wiem, ale powiem (AJSD VII)
Wyobraźmy sobie następującą wakacyjną historię miłosną, która miała prawo się zdarzyć przed nastaniem ery wszechobecnych mediów społecznościowych...
To, czego potrzeba Bogumiłowi do szczęścia, to protokół prywatnego uzyskiwania informacji (jest to próba tłumaczenia angielskiego terminu private information retrieval), czyli sposób na odpytywanie bazy danych (Dobromira) tak, aby baza danych nie wiedziała, o co ją pytamy, i mimo to dostarczyła odpowiedzi (tytułowe nie wiem, ale powiem). Oczywiście Bogumił mógłby poprosić o przesłanie całej bazy danych (czyli o przedyktowanie zawartości całego zeszytu), ale zależy mu na tym, by zminimalizować ilość przesyłanej informacji. Zaprawieni w lekturze kącika AJSD Czytelnicy nie powinni mieć trudności z przetłumaczeniem tego problemu na bardziej matematyczny język: Dobromir zna ciąg bitów Bogumił chce poznać wartość
dla wybranego przez siebie
jednak nie chce zdradzić Dobromirowi wartości
Zakładamy, że każda informacja wysłana do i od Dobromira kosztuje, a Bogumił chce uczynić ten koszt jak najmniejszym. Wydaje się, że nie może on zrobić niczego istotnie lepszego od poproszenia Dobromira o cały ciąg
Cóż, a jednak się da!
Kolegów dwóch (lub więcej)
Na początku uprośćmy sytuację i załóżmy, że Bogumił ma jeszcze jednego kolegę, Eustachego, który zna ponadto nie zna się on z Dobromirem. Wówczas Bogumił mógłby zastosować następującą egzotyczną (i, jak się zaraz okaże, niezbyt mądrą) procedurę: losuje ciąg binarny
i prosi Dobromira o przesłanie
a Eustachego o
gdzie
to ciąg
w którym wartość
-tego bitu została zmieniona (tzn.
oraz
dla
). Okazuje się, że wówczas
gdyż
![]() |
W tej sytuacji, znając oraz
Bogumił jest w stanie odtworzyć
Z drugiej strony, ciąg
jest losowy, więc nie dostarcza Dobromirowi żadnej informacji o
Ponadto z punktu widzenia Eustachego ciąg
jest losowy (co wymaga być może krótkiej chwili zastanowienia), więc on też nie uzyskuje żadnej informacji o
Zauważmy, że gdyby Dobromir i Eustachy połączyli siły, to mogliby łatwo odtworzyć
- jest to jedyny indeks, na którym różnią się ciągi
i
Zakładamy jednak, że nie komunikują się oni ze sobą, zatem Bogumił nie musi się przejmować taką ewentualnością.
Jak już wspomnieliśmy, powyższy sposób - choć wykorzystuje pewne chytre obserwacje - jest dla Bogumiła bezwartościowy. Przypomnijmy bowiem, że przesył informacji w obie strony jest kosztowny, a w zaprezentowanym protokole Bogumił wysyła dwa ciągi długości czyli aż
bitów. Już (dwa razy) lepiej byłoby poprosić Dobromira o przesłanie całego ciągu
!
Rzecz jasna, nie zaprezentowaliśmy powyższej idei tylko po to, by stwierdzić jej bezużyteczność. Okazuje się, że można ją tak zmodyfikować, żeby jednak coś na niej zyskać. W tym celu potrzebujemy kolejnych dwóch kolegów z dostępem do którzy się ze sobą nie komunikują. Umieśćmy wartości
w kwadratowej tablicy
rozmiaru
gdzie
Powiedzmy, że
Tym razem Bogumił losuje dwa binarne ciągi
i
długości
i wysyła je Dobromirowi. Dobromir oblicza
Podobnie jak poprzednio niech
powstaje z
przez zmianę
-tego bitu, a
powstaje z
przez zmianę
-tego bitu. Do kolejnych znajomych Bogumił wysyła pary ciągów bitów
i
otrzymując od nich
oraz
Wówczas w sumie
- dla
składnik
liczony jest cztery razy (występuje w każdej składowej sumie), więc nie jest liczony wcale,
- dla
składnik
liczony jest dwa razy, tak samo jak
; obu nie musimy zatem liczyć,
- dla
składniki
i
liczone są dwa razy, więc podobnie jak w poprzednim punkcie nie wpływają na wynik,
- wśród liczb
są trzy zera i jedynka, a zatem suma składników
daje

Powyższe rozważania dowodzą, że Bogumił uzyskuje zatem szukaną wartość
a jego koledzy nie dowiadują się niczego o
(co uzasadniamy tak jak poprzednio). Tym razem wykorzystujemy cztery bazy danych, ale za to rozmiar naszej komunikacji to
W analogiczny sposób, poprzez zapisanie
w
-wymiarowej tablicy i wykorzystanie
baz danych, możemy dokonać prywatnego uzyskania informacji przy komunikacji rozmiaru
Widzimy zatem, że możemy w ten sposób uzyskać dowolnie mały wykładnik przy
jednak kosztem wykładniczo rosnącej liczby potrzebnych, nieskomunikowanych baz danych.
...a może jednak wystarczy jeden?
Co, jeśli nie jesteśmy w tak wygodnej sytuacji i Bogumił jest skazany wyłącznie na Dobromira? Czy możemy istotnie zmniejszyć koszt transmisji, mając do czynienia tylko z jedną bazą danych? Cóż, gdyby było inaczej, temat niekoniecznie zasługiwałby na prezentację w naszym kąciku. Okazuje się, że nawet mając do dyspozycji jeden egzemplarz bazy danych, możemy dokonać "prywatnego zapytania" kosztem rzędu rozmiaru bazy danych podniesionego do dowolnie małej potęgi. Po raz pierwszy taki magiczny sposób zaproponowali Eyal Kuszilewić i Rafail Ostrowski w 1997 roku. Aby dokonać jego prezentacji, musimy przedstawić małe przypomnienie z teorii liczb (patrz również artykuł o commicie w Delcie 11/2018).
Wykorzystując przedstawioną teorię, możemy zaproponować następujący protokół prywatnego uzyskiwania informacji dla jednej bazy danych (Dobromira):
- (a)
- Bogumił i Dobromir umawiają się na reprezentację ciągu
w postaci tablicy
Załóżmy, że
;
- (b)
- Bogumił wybiera duże liczby pierwsze
(których reprezentacja dwójkowa ma
bitów) i oblicza
po czym wybiera losowo
w taki sposób, że
oraz
dla
Następnie przekazuje
oraz wszystkie liczby
Dobromirowi. Zauważmy, że zgodnie z naszą uwagą Dobromir (nieznający
) dla żadnego
nie jest w stanie stwierdzić, czy
nie dowie się zatem niczego o
;
- (c)
- Dla każdego
Dobromir oblicza
modulo
Jest to iloczyn wszystkich wysłanych liczb
przy czym niektóre - te, którym w
-tej kolumnie odpowiada jedynka - mnożone są "w kwadracie". Ponieważ tylko
nie jest kwadratem modulo
więc
jest kwadratem tylko wtedy, gdy
jest mnożone "w kwadracie", czyli gdy
;
- (d)
- Bogumił sprawdza, czy
jest kwadratem (może to uczynić, gdyż zna
). Jeśli tak, to
wynosi 1, w przeciwnym przypadku 0.
Przedstawiona komunikacja zajmuje bitów, czyli w ten sposób, biorąc
możemy już osiągnąć komunikację rozmiaru
A można jeszcze lepiej! Zauważmy, że spośród skonstruowanych przez Dobromira liczb
Bogumiła interesuje tylko
przy czym nie chce on, by Dobromir poznał
Toż to brzmi dokładnie jak wyjściowy problem, więc rzecz pachnie rekurencją na kilometr! Bogumił może zastosować ten sam protokół dla ciągu
aby poznać
Wówczas rozmiar komunikacji jest rzędu
; optymalizując ze względu na
pod warunkiem
dostajemy koszt
W ten rekurencyjny sposób możemy dowolnie zbijać wykładnik przy
(odwrotnie proporcjonalnie do głębokości rekurencji); niestety, kosztem puchnącego (z grubsza liniowo wraz z głębokością rekurencji) wykładnika przy
Cóż, odwołując się do klasyka, nie udało nam się przyrządzić zupełnie darmowego obiadu, mamy jednak nadzieję, że Czytelnicy i tak docenią (podobnie jak Bogumił) chytrość i elegancję przedstawionych protokołów.