零知识证明四——Fiat-Shamir,三分钟零知识证明入门

      看了一些密码学的书籍,都是老外的,才发现歪果仁还真是喜欢alice和bob,这二位霸占了密码学的故事的主角。今天我们也邀请二位来参与我们的故事。今天介绍的是比较简单的零知识证明,交互式零知识证明——Fiat-Shamir,不过这就是为了把大家领上道,实际应用是比这个要负责的;

Fiat-Shamir

       要进行Fiat-Shamir,首先进行准备工作,由可信第三方,随机选择两个大的素数p和q,计算n = p*q的值(n的值是公开的,p和q的值要保密)。Alice选择s属于(1~n-1),并计算出v\equiv s^{2} mod n,其中s作为Alice的私钥,v则为Alice的公钥。现在需要Bob出场了,Alice希望向Bob证明她知道s,但是又不希望Bob知道s是多少。准备工作到此结束,开会证明。

          

 

1)Alice随机选择r(0~n-1),然后计算x \equiv r^{2} mod n,将x发给Bob;x称之为证据;

2)Bob随机选择c = 0 or 1 发送给Alice,c称之为挑战;

3)Alice根据收到Bob的挑战,发送y \equiv rs^{c} mod n给Bob,y称之为应答;

4)Bob则进行验证y^{2},如果c=0,则y^{2}\equiv r^{2}\equiv x mod n,所以c=0时,Bob只需要根据验证y^{2}\equiv xmodn即可,而这些数据并不会透露s的任何消息;当c=1时,则y^{2}\equiv r^{2}s^{2}\equiv xv mod n     ,所以c=1时,Bob只需要根据验证y^{2}\equiv xvmodn即可,而这些数据也不会透露s的任何消息;

      这就是一次完整的验证过程,整个验证过重,Bob没有得到s的任何信息,而且也验证了,Alice是否知道s,如果s不知道s,则当c=1的时候,Alice是无法发送正确的值的。所以只要我们重复这个验证过程,则Alice就不能欺骗Bob;

   Alice真的无法欺骗Bob???  

   下面我们假装自己是Alice,而且Alice不知道s,看看是否真的咩有办法欺骗Bob,说不定咱们更聪明呢。

    我是alice,我不知掉s;我们先正向思考一下这个问题,因为我们不知道s,所以,一旦Bob的c=1,我们肯定是无法验证通过的,这条路肯定是不行的;

    我们在反向思考一下,无论c=0 or 1,Bob最终要验证的公式就是y^{2}\equiv xv^{c}mod n,其中x是我们可控的,v呢,是公开的,c呢是Bob控制的,所以如果我们能够提前预测每次Bob每次c的值,则我们就完全可以控制Bob最后验证公式的结果;例如,如果我们知道Bob要发送c=0,则我们只需要在第三步,给Bob发送x^{1/2}即可;如果提前预测Bob发送c=1,则只需在第三步发送(xv)^{1/2}

    实际上,我们是无法预测Bob要发送c的值,当这个验证重复n次后,则我们猜对的概率变为1/2^{n},n=16大概是60000分之一的概率,已经很低了;这足够证明这个算法的可行性;

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0xweb3q

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值