Esatto. Inoltre, visto che le zero knowledge proof sono un protocollo interattivo, la probabilità di imbrogliare va a discrezione dei partecipanti. Non ho idea di che protocollo hai visto, quindi non ti posso rispiegare a modo mio quello che hai letto sul libro, ma in generale il concetto è:
- completeness: appena il dimostrante commette un errore, il verificatore lo smaschera con certezza (probabilità = 1);
- soundness: se il dimostrante non commette un errore, c'è il 50% di probabilità che gli sia andata di culo.
Finché il verificatore non sarà convinto, metterà alla prova il dimostrante. Per il dimostrante non è un problema ripetere l'esperimento perché la prova è zero knowledge: il verificatore non ha alcun modo di sfruttare le informazioni che riceve.
Per esempio, io sono capace di prevedere il futuro e, se mi paghi, posso dirti i numeri della prossima estrazione del superenalotto. Tu, ovviamente, non mi credi sulla parola e io, ovviamente, non ho alcuna intenzione di farti vincere al superenalotto senza ottenere nulla in cambio. Mi chiedi "uscirà testa o croce", io ti rispondo e poi tu lanci una moneta. Se io sbaglio tu sei consapevole che ti ho detto una boiata e non hai bisogno di mettermi nuovamente alla prova, se invece ci azzecco... eh, 50% di probabilità che mi sia andata di culo. Ripeti il lancio della moneta per 10 volte e io continuo ad azzeccarci: adesso la probabilità che sto cercando di fregarti è inferiore allo 0.1% e tu sei sufficientemente convinto che io so veramente prevedere il futuro.
Le zero knowledge proof sono concettualmente simili. Non mi sta bene darti i numeri del superenalotto senza ricevere soldi e a te non sta bene pagarmi senza essere convinto delle mie capacità. Scendiamo a compromessi e ti do un informazione inutile (zero knowledge), ma in grado di dimostrarti (proof) di un certo fatto. Con un po' di fortuna potrei ingannarti, ma tu puoi mettere alla prova la mia fortuna.