Dopo aver letto questa risposta qualche tempo fa, mi sono interessato alla crittografia completamente omomorfa. Dopo aver letto l'introduzione della tesi di Gentry, ho iniziato a chiedermi se il suo schema di crittografia potesse essere utilizzato per l'esecuzione del codice ignaro come definito nel terzo paragrafo.
In uno schema di crittografia completamente omomorfo in genere crittografiamo alcuni dati, li inviamo in un ambiente ostile in cui una determinata funzione viene calcolata sui dati, il cui risultato viene quindi rispedito (crittografato), senza che l'avversario scopra quali sono i dati ricevuti o il risultato della funzione è.
Con l'esecuzione del codice ignaro intendo che crittografiamo un pezzo di codice progettato per risolvere qualche problema P e inviarlo a un ambiente ostile. L'avversario vuole usare C per risolvere P , ma non vogliamo che sappia come funziona C. Se ha un input I per P , può crittografare I e quindi utilizzare (alcuni schemi di crittografia su) C con I , che quindi restituisce l'output (non crittografato) O (la soluzione di P per l'input I). Lo schema di crittografia fa in modo che l'avversario non scopra mai come funziona il pezzo di codice, cioè per lui funziona come un oracolo.
Il principale uso pratico (mi viene in mente) per un tale schema di crittografia sarebbe quello di rendere la pirateria più difficile o addirittura impossibile.
Il motivo per cui penso che ciò possa essere possibile utilizzando uno schema di crittografia completamente omomorfo è perché possiamo eseguire circuiti arbitrari su dati crittografati, in particolare una macchina di Turing universale. Potremmo quindi crittografare il codice come se fossero dati e quindi utilizzare il circuito per una macchina Turing universale su questi dati crittografati per eseguire il codice.
Pongo questa domanda come una domanda perché non so se questa idea sia utilizzabile: non sono mai andata molto oltre l'introduzione della tesi di Gentry e la mia conoscenza della crittografia è limitata. Inoltre, non so se esiste già un termine spesso usato per l'esecuzione del codice ignaro: ho provato a cercare l'idea su Google ma non sapendo il termine corretto non ho trovato nulla.
Ci sono molti problemi a cui riesco a pensare che possono causare problemi con questo approccio. Innanzitutto, se utilizziamo una crittografia completamente omomorfa senza modifiche, il risultato del calcolo ( ) verrebbe crittografato. Sarebbe quindi inutile per l'avversario che desidera utilizzare il codice per risolvere P . Anche se questo potrebbe essere utile, diciamo, per il cloud computing, non è quello che voglio ottenere.
In secondo luogo, poiché stiamo usando circuiti e non macchine di Turing arbitrarie, non possiamo usare quantità arbitrarie di memoria: siamo limitati a una quantità predeterminata di memoria. Ciò significa che se vogliamo eseguire un programma in questo modo, la sua impronta di memoria sarà sempre la stessa, vale a dire il suo massimo utilizzo della memoria.
Infine, le costanti coinvolte quasi sicuramente eliminerebbero qualsiasi uso pratico di un tale sistema, ma penso che l'idea sia comunque interessante.