零知识证明是指不提供具体的答案来证明我有这个答案.我面前有一扇门,而且我有钥匙,我不必要使用钥匙打开这扇门就可以证明我有钥匙能够打开这扇门.
假设有一扇用密码上门的锁,小明想要向小红证明,小明知道这个锁的密码,但同时又不告诉小明密码是什么,这个怎么办呢?
其实很简单是不是?小明只需要先让小红进屋等着,然后小红通过门上的猫眼看着小明在门外开锁,因为是透过猫眼,所以小红可以确定不是别人开锁,但同时无法看到小明输入的密码.
当门被小明打开的时候,小红就可以确信,小明确实是知道这个门的密码的.
但重要的是,同时小红并不知道密码到底是什么.在这个简单的故事中,小红对小明进行了一次"零知识验证"(zk-proof)
由于算法非常复杂,没有强大的数学功底很难理解.我也没有尝试去理解,在我看来,对于我们这些非数学家,非科学家,这种事情没有必要花功夫在上面,就好比你没有必要去理解为什么能量守恒一样(当然如果你非要去理解,建议看看相关论文)
给出一个方程式:x^3 + x + 5 = 35,很明显答案是3,怎么不暴露答案3的情况下向B证明A知道3这个答案?
过程是这样:
A使用这个方程式左边x^3 + x + 5以及他手里的答案,生成一个证据proof