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.