Estou pensando nesse problema de computação / criptografia / banco de dados há anos e só quero saber se já existem soluções para ele. Para ser sincero, nem sei a que campo exatamente esse problema pertence.
Em poucas palavras: a pessoa A tem uma lista de dados, outra pessoa (B) possui um algoritmo que atribui uma pontuação a cada item dessa lista e depois soma todas essas pontuações para fornecer uma pontuação geral para toda a lista. Como podemos executar o algoritmo na lista de dados para que os dados sejam mantidos extremamente seguros (de preferência nunca deixando a pessoa A), mas para que a pessoa B possa ter certeza de que o algoritmo foi executado corretamente e não foi adulterado.
Aqui está um exemplo: Anna e Bob moram em uma grande vila. Anna tem uma lista em seu computador de todas as coisas que ela fez na aldeia, boas e más. Bob criou um algoritmo de pontuação muito simples para essas listas, que é executado em cada item da lista e dá uma pontuação e, em seguida, adiciona todos esses números para dar a Anna uma pontuação final. Essa pontuação permite que Bob saiba como Anna é benéfica para a comunidade da vila e é específica para a opinião de Bobs. (Isso é mais do que um exemplo, pois esse é realmente o sistema que eu quero criar)
No entanto, Anna não quer dar a Bob sua lista, pois ele tem acesso a informações potencialmente embaraçosas (todos têm esqueletos em seu armário). Bob, no entanto, não confia em Anna para executar seus algoritmos, pois ela pode apenas mentir e dizer a Bob que a pontuação foi muito alta para que Bob tenha mais chances de ajudá-la.
Existem algumas soluções em que eu já pensei, mas todas têm problemas:
A. Encontre uma pessoa aleatória para pegar os dados, execute o algoritmo e envie a pontuação de volta, mas pode ser difícil garantir que essa pessoa aleatória não conheça Anna e tente ajudá-la ou fazer uma cópia dos dados e tente mais tarde rastrear de volta e chantagear Anna.
B. Deixe Anna executar o algoritmo, mas de alguma forma codifique um código de verificação nas pontuações, por exemplo, em vez de classificar um evento como 1 classifique-o como 1.0000000000797, de modo que Bob possa usá-lo posteriormente como um código de verificação para verificar se o dado pontuação está correta. No entanto, essa verificação também pode ser mal utilizada por Bob para indicar quais coisas específicas Anna fez. Também posso imaginar que esse sistema seria trivial para fazer engenharia reversa, para que Anna possa dar uma pontuação falsa com um código de verificação correto, considerando que Anna deve ter acesso total ao algoritmo de Bob para executá-lo.
C. A vila cria um servidor seguro para pegar esses dados e algoritmos e executá-los juntos. No entanto, Anna e Bob realmente não confiam em ninguém o suficiente para fazer isso e não fazem uma cópia dos dados ou modificam as pontuações, a menos que haja alguma arquitetura fundamentalmente segura para isso. Também eu preferiria que este seja um sistema P2P.