A jednak się da!
O obliczeniach wielopodmiotowych (AJSD IX)
Niniejszy odcinek jest ostatni z serii. Przez niemal rok, wraz z Łukaszem Rajkowskim, próbowaliśmy pokazać Czytelnikowi, co ciekawego, a przede wszystkim - co zaskakującego, wiąże się z kryptologią. Naszą wielką nagrodą będzie, gdy - po przeczytaniu tych 9 odcinków - choć niewielka część Czytelników chociaż przez chwilę zawaha się, gdy w życiu codziennym będzie stwierdzać, że czegoś się nie da...
Punktem wyjścia naszych rozważań będzie podział sekretu pomiędzy osób (o którym pisaliśmy więcej w
). To znaczy: załóżmy, że chcemy pewną tajną liczbę

to pewna ustalona duża liczba pierwsza, np.
rozproszyć pomiędzy zbiór osób
w taki sposób, aby:
- każda z nich dostała pewien udział w postaci liczby
oraz
- dowolna ich
-osobowa podgrupa nie była w stanie odtworzyć
(analizując swoje udziały), ale już (każda) podgrupa
-osobowa zawsze mogła to zrobić.
Powyższy problem da się rozwiązać dla dowolnego szczegóły znajdują się w artykule cytowanym wyżej. Ogólna idea (pochodząca od Adiego Shamira) polega na tym, że losujemy dowolny wielomian
stopnia
(o współczynnikach
) o wyrazie wolnym równym
Następnie ustalamy dowolne niezerowe (i parami różne) elementy
i określamy

Okazuje się, że tak zdefiniowane udziały spełniają nasze pierwotne założenia. Dziś jednak będziemy chcieli osiągnąć znacznie więcej. To znaczy, zapragniemy na podzielonych sekretach rachować!
Przyjmijmy, że sekrety są dwa: oraz że osoba o numerze
ma udziały w obu (w postaci liczb
). Chcemy teraz opracować taki protokół, który umożliwi wszystkim
osobom dokonanie wspólnych obliczeń, po których osoba
otrzyma pewną wartość
Oczekujemy, że tak obliczone elementy
razem będą stanowić podział sekretu dla (rozważamy trzy przypadki):
- 1.
;
- 2.
jest publicznie znaną stałą);
- 3.
Banalne rozwiązanie polega na odtworzeniu i
obliczeniu
oraz dokonaniu nowego podziału, według oryginalnego protokołu. Nasz cel jest jednak ambitniejszy: chcemy rozproszyć
ale w taki sposób, aby bezpośrednia informacja o
i
nie została na żadnym etapie przez nikogo (przez żadnego uczestnika bądź ich podgrupy o ograniczonej liczebności) jawnie odtworzona. Jak to zrobić?
Przypadek pierwszy i drugi jest łatwy (Zajmiemy się tylko pierwszym. Niech drugi pozostanie jako łatwe ćwiczenie.) i nie wymaga nawet żadnej komunikacji pomiędzy stronami. Wystarczy, że osoba przyjmie
i wszystko będzie w porządku. Dlaczego? Przypomnijmy sobie tylko, czym jest
oraz
Wiemy przecież, że

dla pewnych wielomianów oraz
Wtedy oczywiście

co oznacza, że (z definicji) elementy stanowią podział sekretu dla wyrazu wolnego wielomianu
modulo
Ten jednak wynosi
modulo
gdyż wyrazem wolnym
musi być
a wyrazem wolnym
jest
Powyższe rozwiązanie rodzi pokusę, aby analogicznie rozwiązać przypadek trzeci. To znaczy, aby każda z osób przyjęła jako że
jest wyrazem wolnym wielomianu
modulo
Niestety, jest to rozwiązanie błędne. Problem bierze się stąd, że mnożenie dwóch wielomianów stopnia
daje wielomian stopnia
A my przecież chcemy koniecznie otrzymać stopień
(w przypadku dodawania ten problem nie występował)! Rozwiązanie jest tutaj nieco bardziej skomplikowane.
Mnożenie podzielonych sekretów
Pierwszy krok jest taki sam, jak w naiwnym rozwiązaniu wyżej. To znaczy, faktycznie każdy z uczestników protokołu mnoży przez
otrzymując pewne
Zanim przejdziemy do szczegółów kolejnego kroku, potrzebujemy jeszcze kilku oznaczeń. Oznaczmy więc wielomian
modulo
przez
Wówczas wyraz wolny
to
modulo
(tak jak potrzeba), natomiast wartość
jest znana osobie
Problemem jest tylko stopień wielomianu

który wynosi Wprowadźmy więc (trochę na siłę) nowy wielomian:

który powstał przez zwykłe wymazanie ostatnich jednomianów wielomianu
Byłoby oczywiście świetnie, gdyby osoba
potrafiła (za pomocą jakiegoś protokołu) po prostu bezpiecznie obliczyć wartość
Okazuje się, że jest to wykonalne! Co więcej, nie aż tak trudne obliczeniowo i nie wymaga dużej komunikacji między uczestnikami protokołu. Kluczowa jest tu (dość zaskakująca) obserwacja, że każde
jest kombinacją liniową elementów
Gdy już to wiemy, to dalej jest z górki. Dodawanie i mnożenie przez stałą sekretów potrafimy już wykonywać. Trzeba więc tylko rozproszyć każde i zastosować (być może wielokrotnie) dwa proste przypadki rozważane wyżej (oraz na koniec wysłać osobie
odpowiednie udziały do odtworzenia
). Dokładne wyjaśnienie, ze względu na techniczny charakter zagadnienia, musimy niestety pominąć. Wierzymy jednak, że dokładne odtworzenie wszystkich kroków tego przypadku może być bardzo pouczające. Szczegóły znajdują się w pracy "A Full Proof of the BGW Protocol for Perfectly-secure Multiparty Computation" autorstwa Gilada Asharova oraz Yehudy Lindella.
Po co to wszystko?!
Przyjmijmy, że każda z osób wybrała swój własny argument
i rozproszyła go wśród wszystkich pozostałych osób. Co umożliwiają nam protokoły naszkicowane wyżej? Otóż na pewno grupa może (wspólnie) obliczyć chociażby
modulo
czy
modulo
(w taki sposób, że żadne obliczenia pośrednie nie są nikomu znane - wszak wszystko odbywa się dla rozproszonych wartości), bo potrafi dodawać, skalować przez stałą i mnożyć sekrety. Jak wiele w taki sposób można policzyć? Okazuje się, że … wszystko!
Obliczenia w ciele modulo mają taką cechę, że każdą funkcję (oczywiście o zbiorze wartości
) da się zapisać jako wielomian, a więc jako złożenie (być może bardzo wielu) dodawań, skalowań przez stałą i mnożeń (wszystko modulo
). Innymi słowy: z faktu, że znamy protokoły dla trzech przypadków z pierwszej części artykułu, wynika, że potrafimy obliczyć zupełnie dowolną funkcję rozproszonych argumentów. Stąd już tylko krok do protokołów na np. granie w pokera przez Internet bez zaufanej strony czy bezpieczne aukcje internetowe bez serwera zbierającego i w zaufaniu porównującego oferty.
Science-fiction
Wyżej ledwie naszkicowaliśmy ideę obliczeń wielopodmiotowych (i to jeszcze w mniej ciekawym, bo pasywnym przypadku - szczegóły na jednym z marginesów). Póki co nie są one jeszcze bardzo praktyczne, ale powoli zbliżamy się do momentu, gdy (na razie) proste ich zastosowania będą możliwe do codziennego wykorzystania. Chcielibyśmy jednak mocno zaznaczyć, że drzemie w nich potencjał niemal rewolucyjny.
Rozpraszanie obliczeń i przechowywania danych czy ogólniej - pozbywanie się zaufanych stron z cyfrowego świata jest wszak (skromnym zdaniem autora tego tekstu) najważniejszym wyzwaniem rewolucji cyfrowej XXI wieku.