W pełni homomorficzne szyfrowanie nie jest tak dobre, jak mogłoby się wydawać w przypadku zaciemniania kodu. Chociaż prawdą jest, że można by wykonywać obliczenia na zaszyfrowanej maszynie Turinga, korzyści z zaciemniania zamkniętego systemu nie są tak duże, po prostu dlatego, że każde wejście lub wyjście systemu musi być zaszyfrowane lub odszyfrowane. Zatem jakakolwiek inżynieria wsteczna programu rozpoczęłaby się po prostu od wyodrębnienia kluczy szyfrujących z tego kodu szyfrującego lub deszyfrującego.
Korzyści stają się znaczące tylko wtedy, gdy IO jest zaszyfrowane i odszyfrowane przez stronę trzecią, w którym to przypadku jest niemożliwe do odszyfrowania kodu bez uzyskania dostępu do tej strony trzeciej. Więc w sytuacjach, w których chcesz zaciemnić czyste obliczenia, możesz użyć szyfrowania homomorficznego, aby uruchomić w pełni nieprzejrzysty botnet. Na przykład, kontroler mógłby wysyłać hashe do cracków lub bitcoinów do kopania, a patrząc na klienta, nie byłoby możliwe wiedzieć, jakie kody są uruchamiane bez informacji z zewnątrz.
Oczywiście kluczowa część chodzi o to, że klucze szyfrowania / deszyfrowania są przechowywane zdalnie, a zatem nie można ich wyodrębnić z zaciemnionego programu.
Już miałem powiedzieć „to brzmi jak coś, co zespół INSIGHT chce zatrudnić stażystę do zbadania tego lata”, ale potem spojrzałem na twoją nazwę użytkownika i lokalizację :)
Myślę, że to na pytanie bardzo trudno odpowiedzieć jednoznacznie, ponieważ poszukujesz mechanizmu, który skutecznie spowolniłby ręczną analizę. I tak przedstawię to, co uważam za odpowiedź.
Wygląda na to, że masz dwie opcje wysokiego poziomu: „zaszyfruj kod programu” lub „zaszyfruj dane programu”. Szyfrowanie danych programu wydaje się mniej wydajne, ponieważ analiza ręczna może nadal zebrać wiele wskazówek dotyczących programu, obserwując jego strukturę, więc wydaje się, że to, co chciałbyś zrobić, aby spowolnić analizę, to odmówić analitykowi możliwości zobaczenia struktury programu.
Co by było, gdybyś przekształcił program w język kodu bajtowego i interpreter, podobnie do tego, co robią VMProtect i inne. Następnie szyfrujesz bufor kodu bajtowego i używasz FHE, aby uzyskać dostęp do bufora podczas wykonywania kodu.
Co to jest szyfrowanie funkcjonalne dla wszystkich obwodów i zaciemnienie nierozróżnialności dla wszystkich obwodów?