Esta nova versão do SPDZ introduziu várias inovações de eficiência, relativamente ao trabalho anterior no modelo de pré-processamento [20]. Uma das diferenças é a geração de chaves BGV pública e uma chave secreta associada compartilhada. No trabalho anterior, isso foi assumido como sendo fornecido por uma determinada configuração. Foram alteradas as fases offline e
online resultando numa fase online muito mais rápida. Foi também alterada a forma como são
feitas as provas de conhecimento. A primeira versão usava um protocolo simples baseado em Schnorr [17], enquanto esta usa um estilo cut-and-choose mais sofisticado para protocolos de segurança encoberta (covert) e ativa. Uma analogia física ao protocolo cut-and-choose pode ser feita com a técnica de dividir um bolo:
1. A primeira pessoa corta o bolo em duas partes.
2. A segunda pessoa escolhe a parte, deixando a outra para a primeira pessoa.
A noção de segurança alcançada por este protocolo é que nenhum dos participantes pode queixar-se que a sua fatia é mais pequena do que a outra.
4.2.1 Verificação de MACs
São usados MACs para assegurar segurança contra adversários ativos, tanto na fase online como na fase offline. Esses valores de MACsão abertos parcialmente para serem verificados. Para fazer a verificação aoMACassume-se que um valor a foi partilhado e parcialmente aberto, o que significa que os participantes revelaram as suas shares do valor a mas não o valorMACassociado,
γ, que é partilhado aditivamente. Como não há garantia que os valores a são corretos, tem que se
verificar que γ = αa sendo α uma chave global deMACque também é partilhada aditivamente. Na versão anterior do protocolo as verificações eram feitas com os participantes fazerem commit as suas shares doMAC, abri-las e verificar tudo “in the clear” o que faria com que a chaveMAC
ficasse pública e um adversário poderia manipular as shares. Por isso queremos evitar tornar publico o valor de α e observar que como α é publico, o valor de γ – αa é uma função linear de valores partilhados de γ,α, assim os participantes podem computar as shares localmente sem revelar informação de α. De seguida é descrito o protocolo de verificação de MACs.
MAC Check
• Todos os participantes escolhem uma seed si e dão commit sobre ela.
• Depois chamam a função de commit uma vez mais para obter as seeds sj de cada um e depois calculam a seed s com : s ← s1 ⊕ ... ⊕ sn.
• Fazem sample a um vetor aleatório r, com base na seed, ou seja todos obtêm o mesmo vetor porque concordaram na mesma.
• Com todos os valores parcialmente abertos e esse vetor, fazem uma série de computações para obterem um valor σi, ao que fazem commit e broadcast a esse valor.
• Cada participante obtém os σj de cada um.
• Fazem σ1 + ... + σn, se o valor final for diferente de 0, os participantes abortam.
4.2.2 Fase offline
Como já foi referido anteriormente, a fase offline produz data pré-processada para a fase online. A fase offline corre em duas subfases distintas. Primeiro assume-se que uma chave BGV [13] foi distribuída, asssim como as shares da chave secreta MAC.
Na primeira subfase, são produzidos em excesso os vários tuplos de multiplicação e squaring, e os bits de partilha. Estes são então sacrificados na fase de verificação para criar as triplas de
multiplicação, os tuplos de squaring e os bits de partilha necessários. O protocolo de produção de tuplos pode ser executado repetidamente ao mesmo tempo que os outros protocolos de verificação de tuplos e a fase online.
Na segunda subfase verifica-se então se o material resultante da fase anterior foi produzido corretamente. Esta verificação é necessária porque a decifração distribuída necessária para produzir os tuplos e os MACs poderia permitir a um adversário a introdução de erros. Este problema é resolvido sacrificando os tuplos que foram produzidos em excesso. Nesta versão do SPDZ este sacrifício de tuplos é realizado na fase offline em vez da fase online, o que origina uma fase online mais rápida.
O pré-processamento tem os seguintes procedimentos: initialize, data generation, data check,
finalize e abort.
Initialize
Nesta etapa são geradas as chaves de cifragem e osMACs. Os participantes chamam a função de geração de chaves para obter as mesmas e depois fazem commit para obter a sua share αi do
MAC, ei e o αi cifrado. Finalmente, calculam eα ← e1 + ... + en.
Data generation
Nesta fase são criados os dados que serão utilizados nas computações. São gerados inputs para produzir não menos de ni * n valores partilhados de ri,j, para que o participante j tenha o valor de ri,j e todos os outros participantes tenham uma share desse valor. Depois são geradas as
triplas, os squares e os bits utilizados nas computações.
Finalize
Para os valores parcialmente abertos nesta fase corre-se o protocoloMACCheck.
Abort
Se a qualquer altura for encontrado um set S de participantes corruptos, todos os participantes fazem output a S e o protocolo aborta.
4.2.3 Fase online
O protocolo da fase online foi desenhado duma maneira que realiza as computações seguras de uma determinada funcionalidade, decomposta num circuito. O protocolo online usa os dados do pré-processamento da fase offline de maneira a introduzir, adicionar, multiplicar, ou elevar ao quadrado valores. O protocolo é semelhante ao da versão anterior só que traz algumas melhorias, no sentido em que faz o sacrifício na fase offline originando uma fase online mais rápida, e o método de verificação de MACna fase de output. Para esta nova fase online existe um interpretador de bytecode que lê e executa sequências de instruções num modo multi-threaded. Cada instrução bytecode é uma computação local ou uma instrução de abertura que revela o valor partilhado. O protocolo da fase online pode ser dividido nos seguintes procedimentos distintos:
initialize, input, add, multiply, square e output.
Initialize
Os participantes chamam o pré-processamento para obter as shares αi doMAC, as triplas de multiplicação hai,hbi e hci, os squares (hai,hbi) os bits hbi e os valores de máscara (ri,hrii).
Input
Para partilhar o input xi o participante i pega num valor de máscara (ri,hrii) e faz:
• Broadcast ← xi - ri
• Os participantes computam hxii ← hrii +
Add
Para adicionar hxi e hyi basta computar localmente: (hx + yi) ← hxi + hyi.
Multiply
Para multiplicar hxi e hyi cada participante:
1. Pega numa tripla de multiplicação hai,hbi e hci, e abre hxi - hai e hyi - hbi. para obter e
ρ, respetivamente.
Square
Para elevarem ao quadrado hxi, basta:
• Pegam num par de squares hai ,hbi e abrem hxi - hai para obter . • Localmente computam hzi ← hbi + 2 . . hxi - 2
Output
Entra-se nesta fase quando os participantes completam a avaliação do circuito mas o output final hyi ainda não foi aberto. Todos os participantes chamam a funçãoMACCheck para todos os valores abertos até agora. Se falhar, abortam. Depois abrem hyi e chamam a função MACCheck no input y e verificam o seu MAC. Se não falhar y é aceite como um output válido.