ゼロ知識証明
暗号学において、ゼロ知識証明(ぜろちしきしょうめい、zero-knowledge proof、略称:ZKP)とは、ある人が他の人に、自分の持っている(通常、数学的な)命題が真であることを伝えるのに、真であること以外の何の知識も伝えることなく証明できるようなやりとりの手法である。ゼロ知識対話証明(ZKIP)とも呼ばれる。
ここで紹介する具体例では、Pさん(証明者)はある巨大なグラフGのハミルトン閉路を知っているとする。Pさんは、ハミルトン閉路そのものは示すことなく、自分がハミルトン閉路を知っていることをVさん(検証者)に納得させたい。ここで、ハミルトン閉路とはグラフのすべての点を通って出発点に戻ることができる経路のことである。ある巨大なグラフにハミルトン閉路が存在するか、存在するならそれがどういうものかを現実的な計算時間で求めるのは非常に難しく、NP完全問題に分類される。ここで紹介する手法ではハミルトン閉路問題を応用しているが、NP完全問題ならどんな問題でもゼロ知識証明に応用することが可能である。
さて、PさんはVさんにハミルトン閉路も含めてどんな情報も与えたくはない。Gのハミルトン閉路は、Vさんはお金を払ってでも知りたいが正しい答えを知っていることを先に知りたい、というケースもあり得るし、Gのハミルトン閉路を知っていること自体がPさんがPさんであることの証明となっているという状況でもよい。PさんがVさんに、知っていることそのものを証明するには、次のような問答を何回か繰り返せばよい。
各問答に先立って、PさんはGと同型なグラフHを用意する。これは短時間でできるし、GからHへの点の対応がわかっている以上、Hのハミルトン閉路がわかるようならGのハミルトン閉路も知っていることになる。