简单的Schnorr协议

简单的Schnorr协议

首先要介绍一下椭圆曲线、有限域和循环群。

用Zq这个符号表示有限域,其中素数q是指有限域的大小,它是指从0,1,2,…,q-1这个整数集合。在椭圆曲线有一种基点G,G可以产生一个循环群0G,1G,2G,…,(q-1)G。任意两个曲线点都能相加,且最后一个点是(q-1)G,再加一个G就回卷到群的第一个元素0G。椭圆曲线和有限域存在一种同态映射关系,给定一个有限域的整数r,我们就可以在循环群众找到已给对应的点rG或r*G,但是通过rG和G很难算出r的,这是一个密码学难题(离散对数难题)。

例如Alice有个私钥sk(secret key)=a和公钥pk(public key)=aG,Bob有个公钥pk=aG。那么Alice如何向Bob证明她拥有pk对应的私钥sk?

如果单纯的Alice把自己的私钥sk=a发送给Bob,那么Bob通过验证a*G=aG=pk,知道了Alice的私钥a,但是这对Alice的安全不起作用了,因为现在Bob知道了Alice的私钥sk了。

第一步,Alice不能发送a,显然她发送了一个类似于a的数r(random),r可以映射到椭圆曲线群上,R=rG。

第二步:Bob要提供一个随机数c进行挑战。

第三步:Alice根据挑战数计算z=r+a*c,同时把z发给Bob,Bob通过下面的公式检验

zG ?= R+cpk =rG + c*(aG)

Bob可以在不知道私钥a的情况下即可证明Alice确实有私钥a。

Alice在不知道随机数c的情况下,不可能仿造个z’与公式z=r+a*c相等,所以Alice不得不使用私钥a。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值