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.
fonte
Respostas:
Na comunidade de criptografia, essa tarefa é conhecida como computação delegada ou delegação verificável. Você deseja permitir que o servidor (a "nuvem") faça o trabalho por você, mas também deseja que a nuvem forneça alguma prova de que ele realmente executou o cálculo (e não apenas produziu uma saída aleatória e fugiu com o seu dinheiro).
Um ponteiro, em cima da minha cabeça, é "Delegando a computação: provas interativas para trouxas" (Goldwasser, Kalai e Rothblum, J. ACM (62), 2015). Provavelmente existem outras soluções, olhe para dentro.
fonte
Há um novo campo de criptografia homomórfica que geralmente atende aos seus requisitos:
A entidade de processamento não pode saber "nada" sobre o texto cifrado, apenas aparece como dados aleatórios, apenas pode corromper a computação e o cliente precisa de alguma maneira de detectar / defender dados / cálculos corrompidos. isso pode ser feito com resumos de mensagens e computação tolerante a falhas .
A criptografia homomórfica só foi demonstrada como teoricamente possível um pouco recentemente, portanto, está mais em estágios conceituais e parece não ter sido implementada muito na prática até agora, mas, eventualmente, a idéia é que ela possa aparecer como uma capacidade (por exemplo, semelhante a outros serviços padrão como virtualização) em grandes clusters de computação padronizados, como Amazon ECC ou Google Compute Engine .
fonte