He estado pensando en este problema particular de informática / criptografía / base de datos durante años y solo quiero saber si ya hay soluciones para él. Para ser sincero, ni siquiera sé a qué campo pertenece exactamente este problema.
En pocas palabras: la persona A tiene una lista de datos, otra persona (B) tiene un algoritmo que le da un puntaje a cada elemento de esta lista y luego suma todos estos puntajes para proporcionar un puntaje general para toda la lista. ¿Cómo podemos ejecutar el algoritmo en la lista de datos para que los datos se mantengan extremadamente seguros (preferiblemente, nunca abandonen a la persona A) pero para que la persona B pueda estar segura de que el algoritmo se ejecutó correctamente y no fue alterado?
Aquí hay un ejemplo: Anna y Bob viven en un pueblo grande. Anna tiene una lista en su computadora de todas las cosas que ha hecho en el pueblo, tanto buenas como malas. Bob ha creado un algoritmo de puntuación muy simple para tales listas, que se ejecuta en cada elemento de la lista y le otorga una puntuación y luego suma todos estos números para darle a Anna una puntuación final. Este puntaje le permite a Bob saber cuán beneficioso es Anna para la comunidad del pueblo y es específico para la opinión de Bobs. (Esto es más que un ejemplo, ya que este es realmente el sistema que quiero hacer)
Sin embargo, Anna no quiere darle a Bob su lista, ya que él tiene acceso a información potencialmente embarazosa allí (todos tienen esqueletos en su armario). Sin embargo, Bob no confía en que Anna ejecute sus algoritmos ella misma, ya que puede mentir y decirle a Bob que la puntuación fue muy alta, por lo que es más probable que Bob la ayude.
Ya he pensado en algunas soluciones, pero todas tienen problemas:
A. Encuentre una persona aleatoria para tomar los datos y ejecutar el algoritmo y enviar la puntuación de regreso, pero puede ser difícil asegurarse de que esta persona aleatoria no conozca a Anna e intente ayudarla o haga una copia de los datos y luego intente para rastrearlo y chantajear a Anna.
B. Deje que Anna ejecute el algoritmo, pero de alguna manera codifique un código de verificación en las puntuaciones, por ejemplo, en lugar de calificar un evento como 1, califíquelo como 1.0000000000797, de tal manera que Bob pueda usarlo luego como un código de verificación para ver si La puntuación es correcta. Sin embargo, esta verificación también podría ser mal utilizada por Bob para indicar qué cosas específicas ha hecho Anna. También me imagino que un sistema de este tipo sería trivial para realizar ingeniería inversa para que Anna pueda dar una puntuación falsa con un código de verificación correcto, considerando que Anna debe tener acceso completo al algoritmo de Bob para ejecutarlo.
C. La aldea crea un servidor seguro para tomar dichos datos y algoritmos y ejecutarlos juntos. Sin embargo, Anna y Bob no confían en nadie lo suficiente como para hacer esto y no hacen una copia de los datos ni modifican las puntuaciones, a menos que exista una arquitectura fundamentalmente segura para hacerlo. También preferiría que este sea un sistema P2P.