Прочитав этот ответ некоторое время назад, я заинтересовался полностью гомоморфным шифрованием. Прочитав введение в диссертацию Джентри, я начал задаваться вопросом, может ли его схема шифрования использоваться для выполнения забытого кода, как определено в третьем абзаце.
В полностью гомоморфной схеме шифрования мы обычно зашифровываем некоторые данные, отправляем их во враждебную среду, где определенная функция вычисляется на данных, результат которых затем отправляется обратно (в зашифрованном виде), при этом злоумышленник не узнает, какие данные получены или результат функции есть.
Под забывчивым выполнением кода я имею в виду, что мы шифруем часть кода предназначенную для решения некоторой проблемы P, и отправляем ее во враждебную среду. Противник хочет использовать C, чтобы решить P , но мы не хотим, чтобы он знал, как работает C. Если у него есть вход I для P , он может зашифровать I и затем использовать (некоторую схему шифрования на C ) с I , который затем возвращает (не зашифрованный) выходной O (решение P для ввода I). Схема шифрования гарантирует, что злоумышленник никогда не узнает, как работает фрагмент кода, то есть для него он работает как оракул.
Основное практическое использование (я могу думать) для такой схемы шифрования было бы сделать пиратство более трудным или даже невозможным.
Причина, по которой я думаю, что это может быть возможно при использовании полностью гомоморфной схемы шифрования, заключается в том, что мы можем выполнять произвольные схемы на зашифрованных данных, в частности на универсальной машине Тьюринга. Затем мы можем зашифровать код, как если бы это были данные, а затем использовать схему для универсальной машины Тьюринга на этих зашифрованных данных для выполнения кода.
Я представляю это как вопрос здесь, потому что я не знаю, пригодна ли эта идея: я никогда не заходил намного дальше, чем введение тезиса Джентри, и мои знания о криптографии ограничены. Кроме того, я не знаю, существует ли уже часто используемый термин для выполнения забывчивого кода: я пытался найти идею в Google, но не зная правильного термина, я ничего не нашел.
Я могу придумать несколько проблем, которые могут вызвать проблемы с этим подходом. Во-первых, если мы используем полностью гомоморфное шифрование без изменений, результат вычисления ( ) будет зашифрован. Поэтому для противника, желающего использовать ваш код для решения P, было бы бесполезно . Хотя это может быть полезно, скажем, для облачных вычислений, это не то, чего я хочу достичь.
Во-вторых, поскольку мы используем схемы, а не произвольные машины Тьюринга, мы не можем использовать произвольные объемы памяти: мы ограничены заранее определенным объемом памяти. Это означает, что если мы хотим запустить программу таким образом, ее объем памяти всегда будет одинаковым, а именно пиковое использование памяти.
Наконец, используемые константы почти наверняка уничтожат любое практическое использование такой системы, но я думаю, что идея, тем не менее, интересна.