Schnorr身份识别协议是又一个零知识证明协议,相比Fiamt协议有两点不同,一是其安全性依赖于离散对数的困难性,二是该方案使用乘法群,从而可以提前计算了一些参数,减小了证明者实时计算开销,特别适合计算能力有限的环境下运行,例如嵌入式设备,介绍Schnorr之前,先对Schnorr所依据的乘法群和离散对数的背景进行介绍。

1.首先理解一下群(goup)的概念

现在我们的微信和qq上有各种群,如同事群、校友群、摄影群或者其他临时发起的群,群的一个特点是成员具有某种程度上的相似性,例如同事群是所有成员在一个公司工作,摄影群成员则是成员有共同的爱好,但群不仅是成员的简单集合,还可以描述群成员之间的关系,例如同事群中有些成员是其他成员的领导从而可以指挥其他成员,这种对象之间的互相作用我们称之为操作或者运算。

再来看数学上的群概念,其实和生活中的微信群有那么一点点相似之处,既包括元素的集合,也包括了元素的运算或者相互之间的操作,举一个乘法群作为例子,其定义如下:

设G为某种元素组成的一个非空集合,若在G内定义一个称为乘法的运算“·”,满足以下条件:
(1)(封闭性),有
(2)(结合性),有a·(b·c)=(a·b)·c;
(3)在G中有一个元素e,对G中任意元素g,有e·g=g·e=g,元素e称为单位元;

  (4)对G中任一元素g都存在G中的一个元素g',使得g·g'=g'·g=e,g称为可逆元,g'称为g的逆元,记作

则称G关于“·”形成一个群(Group),记作(G,·)。

这个定义看起来就很数学,很让人头晕。逐条来看一下,首先是G,G表示元素的集合,这比较容易理解,这里用全体非零实数R*集合作为例子,再来看四个条件,第一个是封闭性,意思是说集合里的元素相乘后还是在群里,例如2.2=4,而4还是属于非零实数集合,用通俗的话理解封闭性就是肥水不流外人田,群成员按照规则相互(这里的规则是相乘)仍在群里;第二个是结合性,例如(2.3).4=2.(3.4),比较容易理解;第三个是存在单位元,这个单位元跟谁作用都得到这个成员本身,非零实数乘法群的单位元就是1,因为其他数和1相乘仍得到它本身,什么都没变,如果是加法群,那么单位元就是0,因为任何数和0相加等于没加;最后一个条件是逆元,元素和元素的逆元相乘后得到单位元,例如

因为四个条件都满足,因此全体非零实数R*对于的乘法形成一个群。数学家定义了群的概念后,就可以围绕着群做更多深入研究(玩出花了),这里再补充两个概念:

1.有限群和无限群。群G中元素的个数称为G的,记作|G|,如果个数无限,则称群G为无限群,例如全体非零实数R*集合乘法群是一个无限群,反过来如果个数有限,则称群G为有限群,有限群得到的研究更多,“吾生也有涯,而知也无涯。以有涯随无涯,殆已”,先把有限的研究明白再说无限吧

2.循环群。说到研究明白,循环群是目前已被完全解决了的—类群,循环群的定义是当一个群G由一个元素a生成时,称为循环群(Cyclic Group),记为G=<a>,a被称为生成元(generator)。先举一个不太严谨的例子,按照老子的宇宙论理论,假设万物是一个群的话,那么这个万物群是一个循环群,而这个循环群的生成元就是老子指的道,因为“道生一,一生二,二生三,三生万物”

再举一个严谨的例子,模5乘法群=<2>=<4>,即为4阶循环群,2和4均为其生成元。事实上,由群中乘法定义知:

=2 mod 5=2                  =4 mod 5=4

=4 mod 5=4                  =16 mod 5=1

=8 mod 5=3                  =64 mod 5= 3

=16 mod 5=1                 =256 mod 5=2

可以看出,由2可以生成群,由4也可以生成群,因此2和4均是群的生成元。

群还有同构...等一下,本文不是介绍Schnorr身份识别方案吗,怎么在群论上狂奔了?另外群论和本文主题有啥关系?正如前文提了一下,Schnorr身份识别方案基于整数模p的阶为q的乘法循环群,因为群是元素和运算的集合,也就是说其中的元素和运算规则都确定了,因此给定了一个群,证明者和验证者都以此为基础,减少了双方需要沟通交流确定协议参数的时间,从而改进了效率。

2.离散对数的困难性

离散对数也使用了循环群的概念:给定一个素数p,有限乘法群上的一个生成元g和群里的一个元素,找到整数x,其中,满足(mod p),x就是要求的值,因为可以写作,因此被称为离散对数,注意这里的对数运算符和普通对数运算符不一样,因为这里是同余计算,不是通常所理解的等号。

另外“”符号这里表示同余,意思是对p求余和对p求余相等,例如p=11,生成元g=2,β=9,有(mod 11)。

那么离散对数困难性又是什么难题?其指的是当已知大素数p和它的一个生成元g,(mod p),对于给定的β,计算x被认为是很困难的,而给定x计算β却相对容易,目前普遍认为离散对数难题被认为比大数分解还难一点,和大数分解一样,这类难题被称为陷阱函数:正向计算容易,反向计算困难,和生活中的各种陷阱一样,例如一些培训机构交钱容易退钱困难,正是陷阱函数的困难性保证了运用陷阱函数的各类加密算法的安全性。

3.Schnorr 身份识别协议

介绍了群的概念和离散对数困难性的背景知识后,可以来了解Schnorr身份协议了。为了方便理解 Schnorr 身份识别协议,再次请出Alice和Bob,同样的Alice作为一个拥有众多秘密的女子,她拥有一个私钥,并想向Bob证明这一点,但是又不能透露自己的私钥给Bob,他们再次运用零知识证明协议完成这个过程,这里的零知识证明协议是Schnorr算法。

在开始之前,他们要先确定一些公共参数

  • p = 任何的素数;
  • q = p-1 的因数,即q整除p-1;
  • 生成元g;
  • 公钥(mod p),其中s是Alice拥有的私钥, 0<s<q;

{p,q,g,v}四个参数是全局变量,Alice和Bob都知道,s是Alice的秘密,只有Alice知道。

a.首先Alice使用她的私钥s加密一条消息 "M",并发送给Bob,过程如下:

Alice选择一个随机数 r,其中0<r<q,计算得到X值: X = (mod p) ,接着 Alice 将 X 值与她要发送的消息"M"连接起来,得到 (M||X),然后对 (M||X) 进行哈希运算,得到相应哈希值 e = Hash(M||X) ,其中Hash()是哈希函数,但工作还没结束,Alice还要计算一个值y= r + s*e,最后Alice将下列信息发送给Bob:

  • 消息M
  • 数字签名 e 和 y

b.Bob对接收到消息进行验证,过程如下:

Bob从 Alice 那儿拿到了消息M 和数字签名(e 和 y),除此之外,Bob 同样知道公共参数,分别是:

  • 公钥 "v";
  • 素数 "p";
  • 素数"q";
  • 生成元"g"。

现在 Bob 计算 X'= (mod p) ,如果X'=X,则Bob确认Alice说的为真,否则为假;

验证过程如下:

因为(mod p),代入X'的等式的互换:X'=(mod p)=(mod p)

又因为y=r+s*e,得r=y-s*e,代入该值得到X'=(mod p),因此X=X'。

得到了X'后,Bob可以进一步计算消息e' = H ( M||X')并和Alice发送过来的e是否相等。

如果Alice没有私钥,她很难构造私钥以便通过Bob的验证,因为离散对数的困难性,而Bob也很难反推出Alice的私钥,因为Alice并没有发送随机数r给Bob,同样因为离散对数的困难性,Bob不能从X = (mod p) 反推出r从而想通过y=r+s*e反推出Alice的私钥s。

Schnorr身份识别方案相关推荐

  1. 简易无接触温度测量与身份识别装置【2020年大学生电子设计竞赛F题】

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达 赛题分析 通过对赛题的分析研究,完成题目的要求需要满足以下几点功能要求: (1)非接触 ...

  2. 每周AI应用方案精选:虹膜识别;基于深度学习人脸识别方案等

    2019-12-12 17:52:41 每周三期,详解人工智能产业解决方案,让AI离你更近一步. 解决方案均选自机器之心Pro行业数据库. 方案1:虹膜识别解决方案 解决方案简介: 虹膜识别技术是基于 ...

  3. 2016年安全身份识别主流趋势

    安全身份识别解决方案商HID Global通过从不同行业市场的重要客户那里所获得的深刻洞察,以及公司最新解决方案在前瞻性合作伙伴和全球各地的终端用户中进行的试点项目与正式部署情况,确定了2016年最值 ...

  4. webservice 安全性 对外_WebService安全性的几种实现方法【身份识别】

    相信很多开发者都用过WebService来实现程序的面向服务,本文主要介绍WebService的身份识别实现方式,当然本文会提供一个不是很完善的例子,权当抱砖引玉了. 首先我们来介绍webservic ...

  5. VR中姿态、定位和身份识别系统的设计

    在VR中为了获取好的沉浸感,显示的画面与玩家的实际动作要尽可能地一致,如果不一致,会使人与日常形成的习惯不一样,眩晕就发生了.所以这里有两个关键点: 1.环境.动作的识别 2.及时将变化反馈到头显 在 ...

  6. 力天创见无感人脸识别方案

    力天创见无感人脸识别方案,通过在过道或入口处设置监控摄像头(内置人脸识别芯片),当人员通过时,人脸识别镜头可以抓取人脸并实时上传服务器,对抓取的人脸进行识别,通过后台人脸识别算法,给出年龄和性别等信息 ...

  7. 系统安全: GeneXus 新身份验证方案

    GAM 是 GeneXus 访问管理器,用于在您的应用程序中实现身份验证和授权,此功能为GeneXus内置功能. 介绍前我们先了解安全和身份验证领域正在发生的事情. Auth0关于市场上可用的身份验证 ...

  8. 计算机用户身份识别,计算机用户身份识别装置及使用方法与流程

    本发明涉及用户身份验证技术领域,是一种计算机用户身份识别装置及使用方法. 背景技术: 随着计算机技术的不断发展,信息安全已成为计算机用户普遍关注的焦点,传统方法仅仅只是对密码内容进行确认,传统密码方式 ...

  9. 电子营业执照可信认证服务商--北京商兆科技有限公司 报名参与2022身份识别技术大会

    北京商兆科技有限公司确认参与由多维身份识别与可信认证技术国家工程研究中心.中国国际科技促进会.证件防伪公安部重点实验室.中国国际科技促进会证卡票签专业委员会联合主办的2022身份识别技术大会. 北京商 ...

最新文章

  1. python学习基础知识_python学习基本知识
  2. 開啟 Excel 檔案出現錯誤訊息【Windows 找不到檔案路徑
  3. ajax 返回flase,Django request.is_ajax返回false
  4. python中的threading_Python中Threading用法详解
  5. 从用户不足2000万到27亿,这项技术真要上天了?
  6. 面试工作笔记001---记录各种语言_各种技术经典面试问题
  7. AAC Explicit or Implicit SBR PS issue
  8. 绝对的干货大放送:常用正则表达式收集大全
  9. java读文件写文件
  10. appstore ip地址
  11. 10分钟搭建linux代理服务器
  12. 自动打卡php,使用腾讯云实现网易云自动打卡签到 | 小七呀w
  13. 华为OD 社招(Java后端)一面
  14. WinSCP 5.5版本中文目录乱码问题的解决方案
  15. 如何自己动手给笔记本电脑增加内存
  16. 关于vim的详细配置
  17. Word2019很卡的解决办法
  18. 基于GitHub搭建个人网站
  19. 浅拷贝和深拷贝(谈谈java中的clone)
  20. 程序的两种执行方式,静态语言和脚本语言

热门文章

  1. boost::mp11::mp_iota相关用法的测试程序
  2. boost::math::tools::luroth_expansion用法的测试程序
  3. boost::hana::fix用法的测试程序
  4. GDCM:rle转img文件的测试程序
  5. boost:验证Boost概念检查的class_requires 库应该在预期的时间内捕获错误
  6. ITK:两个图像的平方差
  7. VTK:几何对象之Dodecahedron
  8. C++Rabin Karp算法字符串快速查找(附完整源码)
  9. C++判断一个数字是否是某个数字的阶乘(附完整源码)
  10. QT的QTextLayout类的使用