Atualização : Esta resposta é obsoleta pela minha outra resposta, com limites totalmente polilogarítmicos a partir das referências apropriadas.
Pensando bem, não há necessidade de revelar a árvore Merkle gradualmente, portanto a versão de comunicação inferior não precisa de rodadas extras. As etapas de comunicação são
- O provador P randomiza sua coloração, transforma-a em uma árvore Merkle (salgada) e envia a raiz ao verificador V.
- V pega uma vantagem aleatória e envia para P.e
- P envia os caminhos da árvore Merkle da raiz para cada ponto final de a V.e
Isso fornece comunicação durante as rodadas O ( 1 ) .O(belognlog(1/p))O(1)
Atualização: Aqui estão os detalhes da construção da árvore Merkle. Para simplificar, expanda o gráfico para ter exatamente vértices adicionando alguns nós desconectados (eles não afetam três cores ou zero conhecimento). Assuma uma função hash segura, recebendo entradas de qualquer tamanho e produzindo saídas de bits b . Para cada árvore Merkle, o provador escolhe 2 a + 1 - 1 nonces aleatórios de bits b , um para cada folha e não folha da árvore binária. Nas folhas, misturamos a cor concatenada com o nonce para produzir o valor da folha. Em cada nonleaf, usamos o valor dos dois filhos com o nonce do nonleaf para produzir o valor do nonleaf.2ab2a+1−1b
Na primeira rodada, o provador envia apenas o valor raiz, que não fornece informações, pois é hash com o nonce da raiz. Na terceira rodada, nenhuma informação é transmitida sobre qualquer nó não expandido na árvore binária, pois esse nó foi hash com um nonce nesse nó. Aqui, estou assumindo que o provador e o verificador são limitados computacionalmente e não podem quebrar o hash.
Edit : Obrigado a Ricky Demer por apontar o fator ausente de .e