Po przeczytaniu tej odpowiedzi jakiś czas temu zainteresowałem się w pełni homomorficznym szyfrowaniem. Po przeczytaniu wstępu pracy Gentry'ego zacząłem się zastanawiać, czy jego schemat szyfrowania może zostać użyty do nieświadomego wykonania kodu, jak określono w trzecim akapicie.
W całkowicie homomorficznym schemacie szyfrowania zazwyczaj szyfrujemy niektóre dane, wysyłamy je do wrogiego środowiska, w którym określona funkcja jest obliczana na danych, których wynik jest następnie odsyłany (zaszyfrowany), bez przeciwnika sprawdzania, jakie otrzymane dane lub wynikiem tej funkcji jest.
Przez nieświadome wykonanie kodu mam na myśli to, że szyfrujemy kawałek kodu zaprojektowanego w celu rozwiązania problemu i wysłania go do wrogiego środowiska. Przeciwnik chce użyć do rozwiązania , ale nie chcemy, aby wiedział, jak działaJeśli ma wejście dla , może zaszyfrować a następnie użyć (jakiś schemat szyfrowania na) z , który następnie zwraca (nieszyfrowane) wyjście (rozwiązanie dla wejściaP C P C I P I C I O P I). Schemat szyfrowania gwarantuje, że przeciwnik nigdy nie dowie się, jak działa fragment kodu, tzn. Dla niego działa on tak, jak działa wyrocznia.
Głównym praktycznym zastosowaniem (o czym myślę) takiego schematu szyfrowania byłoby utrudnienie, a nawet uniemożliwienie piractwa.
Myślę, że powodem tego może być w pełni homomorficzny schemat szyfrowania, ponieważ możemy wykonywać dowolne obwody na zaszyfrowanych danych, w szczególności uniwersalną maszynę Turinga. Możemy wtedy zaszyfrować kod, tak jakby to były dane, a następnie użyć obwodu dla uniwersalnej maszyny Turinga na tych zaszyfrowanych danych, aby wykonać kod.
Postawiam to jako pytanie, ponieważ nie wiem, czy ten pomysł jest użyteczny: nigdy nie posunąłem się dalej niż wprowadzenie tezy Gentry'ego, a moja wiedza na temat kryptografii jest ograniczona. Nie wiem też, czy istnieje już często używany termin nieświadomego wykonania kodu: próbowałem wyszukać pomysł w Google, ale nie znając właściwego terminu nic nie znalazłem.
Myślę o wielu problemach, które mogą powodować problemy z tym podejściem. Po pierwsze, jeśli użyjemy w pełni homomorficznego szyfrowania bez modyfikacji, wynik obliczenia ( ) zostanie zaszyfrowany. Byłoby zatem bezużyteczne dla przeciwnika, który chce wykorzystać swój kod, aby rozwiązać . Choć może to być przydatne, powiedzmy, w chmurze obliczeniowej, nie chcę tego osiągnąć.P
Po drugie, ponieważ używamy obwodów, a nie arbitralnych maszyn Turinga, nie możemy używać dowolnych ilości pamięci: jesteśmy ograniczeni do z góry określonej ilości pamięci. Oznacza to, że jeśli chcemy uruchomić program w ten sposób, jego ślad pamięci będzie zawsze taki sam, a mianowicie szczytowe wykorzystanie pamięci.
Wreszcie, zaangażowane stałe prawie na pewno zabiłyby jakiekolwiek praktyczne zastosowanie takiego systemu, ale myślę, że pomysł jest jednak interesujący.
źródło
Odpowiedzi:
Niestety istnieje skutek, który teoretycznie zabrania „nieświadomego wykonania kodu”:
Boaz Barak, Oded Goldreich, Russell Impagliazzo, Steven Rudich, Amit Sahai, Salil Vadhan i Ke Yang. O (Im) możliwościach zaciemniania programów , ADVANCES IN CRYPTOLOGY - CRYPTO 2001.
Oto linki:
Streszczenie brzmi:
źródło
Rzeczywiście, podczas gdy w pełni homomorficzne szyfrowanie jest bardzo przydatne do wykonywania kodu między wieloma niezaufanymi podmiotami (patrz na przykład ten artykuł ), potrzebujesz pewnego rodzaju interakcji, gdy podmiot obliczający zaszyfrowane dane wyjściowe wysyła je do strony znającej tajny klucz .
Pojęcie, którego szukasz, wydaje się podejrzanie bliskie zaciemnieniu oprogramowania, dla którego udowodniliśmy, że wynik niemożliwości jest wspomniany powyżej. Raz napisałem też nieformalny przegląd tego artykułu, który może się przydać niektórym osobom.
Biorąc pod uwagę ten wynik niemożliwości, można rozluźnić definicję na dwa (nierozłączne) sposoby: albo ograniczając klasy programów / funkcji, które należy zaciemnić, albo podając luźniejsze pojęcie bezpieczeństwa.
Drugie podejście jest być może możliwe i zwracamy uwagę na pewne słabe pojęcia podobne do zaciemniania w naszym artykule. Pamiętaj jednak, że nasz atak całkowicie odzyskuje oryginalny kod źródłowy jakiegoś programu, bez względu na to, jak jest zaciemniony. Trzeba więc w jakiś sposób stworzyć definicję bezpieczeństwa, która trywializuje w przypadku naszych kontrprzykładów.
Pierwsze podejście zostało zastosowane dla każdej ograniczonej funkcjonalności (np. Funkcji punktowej), ale znowu trzeba upewnić się, że klasa nie zawiera naszego kontrprzykładu, co z grubsza oznacza, że nie powinna zawierać funkcji pseudolosowych.
źródło