事情源于国庆、中秋双节回家,看到Lina 总是背着我输入IPhone 密码想到的(上次因为输入密码次数过多导致重新刷机,所以她不让我碰她的IPhone),我猜想这:如果我能够瞄她输入密码的数字和顺序,那么我就可以知道并记住密码,并在“偷”到IPhone 后以同样的密码进入。为了避免密码输入被人偷窥到而导致密码泄露,自然而然会有些想法:一、有没有什么方式让每次输入的密码都不同;二、更进一步,有没有哪种方式让她当着我的面输入密码,我也不知道密码是什么呢?
在想到第一点的时候想法还比较单纯,比如每次输入密码的时候出现一个随机数字,真正要输入到密码框中的是密码和随机数字的计算结果,计算可以是加减也可以是异或,那么每次输入到IPhone 密码框中的密码就不同了。但是这也还是存在问题,因为如果随机数或者计算的算法也是需要保密的,如果不小心也被我瞄到了,Lina 的手机我还是能进去的呢!有没有什么办法,让我除了密码不知道,其他都知道(看着它输密码框中数字,知道转换算法,知道随机数如果有的话)的方式也进入不了她的IPhone 呢?
自然而然的就有了第二点的想法,但一想到第二点的时候我突然发现我要找到是四年前自己折腾过的零知识证明,零知识证明有个很通俗的解释:“不给你看到密码(可以是信任/授权证书等),但通过有限次过程让你相信我有这个密码(信任/授权证书等),这个过程无论进行多少次都不泄露密码的任何信息”。Lina 每次当着我的面解锁,就是一次过程,无论当着我的面解了多少次锁,也就是让我看到了她输入无数次的密码框,我还是不知道她的IPhone 密码是多少,这听起来是有些沮丧和不可思议的,但这是可以做到的,只是有些复杂而已。一个例子:一个任意多的单向散列函数(哈希函数)集合{H},每次输入密码的时候不重复的给出一个单向散列函数Hi ,要求在密码框中输入真正密码计算单向散列函数Hi 的结果Hi(密码),这个过程中并不用输入真正密码,Lina 在心中进行计算即可。这样我即使看到了无数次密码的输入也无法知道真正的密码是多少,拿到Lina 的IPhone 后也不能打开。
虽然零知识证明(zero-knowledge proof)也很火,但只局限于编码、加密的专业人士在写论文的时候可能会用到,远比使用IPhone 密码锁的人少。但却在实际中会有很有意思的用处,也许哪天你再也不用再ATM 取款机前用手遮着输入密码了,那么你一定会感谢零知识证明,因为它可以解决这个问题。更多关于零知识证明
你看到她数1234能进入手机,你再输入1234却不能进入了?
如果是用零知识证明的话,能够达到这样的效果^_^,我的邮件服务器似乎有点问题,不能发出提示邮件