第四十七个知识点:什么是Fiat-Shamir变换?

只要Alice和Bob同时在线,Sigma协议能快速的完成Alice向Bob证明的任务。Alice向Bob发送承诺,Bob返回一个挑战,最后Alice给出一个回应。不幸的是,没有进一步的修改,Sigma协议实际上不是零知识的:它们仅仅是诚实验证者零知识的。

Fiat-Shamir变换是一种可以将Sigma协议变成非交互证明的技术。这不仅仅会让Alice可以通过给Bob发送邮件完成证明(Bob可以稍后阅读邮件而不必返回一个挑战),而且它能把任何一个Simga协议变成一个数字签名,签名的含义就是“知道这个Sigma协议的秘密的人已经签署了这个消息”。Alice能够创造一个签名一次然后无数次的进行分发,验证者可以不必联系Alice。同时零知识也变得容易了,因为Bob或者其它读者不能做任何事情。

尽管菲亚特和沙米尔在1986年的论文中解释了这种技术,但过去几位著名的密码学家曾指出,这种技术实际上是布鲁姆在更早的著作中提出的,尽管我们还没有能够追踪到这一点。

一个Sigma协议能够通过四个算法实现:“承诺”,“挑战”,“回应”,“验证”。下面给出了解释:

Alice                                Bob
----- ----- co,st = Commit(secret,public)
---------- co --------->
c = Challenge()
<--------- c ----------
r = Respond(st,c)
---------- r --------->
Check(co,c,r)

Fait-Shamir变换中,Alice选择了哈希函数\(H\),然后使用它创造挑战:

Alice                                World
----- ----- co, st = Commit(secret,public)
c = H(public,co)
r = Respond(st,c)
------ co,r ----------->
c = H(public,co)
Check(co,c,r)

如果Alice想要签署一个消息m,她需要让c = H(public, co, m),然后把(m, co, r)公布出去作为消息。

为什么这个方法工作,因为\(H\)是一个随机函数,挑战是均匀随机的被选择,独立于Alice的公开信息和承诺的。安全分析认为Alice不能访问\(H\)内部的代码,只能把\(H\)当作一个oracle。在这种情况下,Alice在不遵循协议的情况下做出正确响应的概率(特别是当她不知道必要的秘密时)与\(H\)的范围的大小成反比。假设\(H\)的定义域和值域分别是\(X\)和\(Y\),Alice为了伪造进行了\(q\)次调用。那么Alice获得正确\(r\)的值的概率是\(q/|Y|\)。典型的\(Y = 2^n\),所以整个概率是可以忽略的。

有些人会告诉你,这种模式的安全分析被叫做随机oracle模型是有严重缺陷的,因为那有一个反例--在随机oracle模型中安全但是在任何人工hash函数都是不安全的。这个反例表明,如果你努力想要做一个愚蠢的方案,你就会得到一个愚蠢的方案。实际上,Fiat-Shamir早在1986年就已为人所知,并在若干实际应用中得到应用,至今仍完好无损(如果处理得当)。没有人已经提出了一个可行的攻击针对经过Fiat-Shamir转换的Sigma协议的方案(不是故意设计为愚蠢的方案),这用于相当多的密码方案。

第四十七个知识点:什么是Fiat-Shamir变换?的更多相关文章

  1. 《构建之法》第四&十七章读书笔记

     <构建之法>第四&十七章读书笔记 一.         前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...

  2. 第十七个知识点:描述和比较DES和AES的轮结构

    第十七个知识点:描述和比较DES和AES的轮结构 这是密码学52件事中的第17篇.本周我们描述和比较DES和AES的结构. DES和AES都是迭代分组密码的例子.分组密码通过重复使用一个简单的轮函数来 ...

  3. NeHe OpenGL教程 第四十七课:CG顶点脚本

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. Gradle 1.12用户指南翻译——第四十七章. Build Init 插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. Java进阶(四十七)Socket通信

    Java进阶(四十七)Socket通信   今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...

  6. SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)

    0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...

  7. C# 优化程序的四十七种方法

    一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...

  8. “全栈2019”Java第四十七章:继承与方法

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数

    孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...

随机推荐

  1. 分布式事务(3)---强一致性分布式事务Atomikos实战

    分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(4)---最终一致性方案之TCC 前面介绍强一致性分布式解决方案,这里用Atomikos框架写一个实战的dem ...

  2. HDFS05 NameNode和SecondaryNameNode

    NameNode和SecondaryNameNode(了解) 目录 NameNode和SecondaryNameNode(了解) NN 和 2NN 工作机制 NameNode工作机制 Secondar ...

  3. Hbase(二)【shell操作】

    目录 一.基础操作 1.进入shell命令行 2.帮助查看命令 二.命名空间操作 1.创建namespace 2.查看namespace 3.删除命名空间 三.表操作 1.查看所有表 2.创建表 3. ...

  4. JAVA中的六种日期类型使用

    基本的6种日期类 /** * 六种时间类型的类 * 数据库格式的时间三种格式 */ java.util.Date date = new java.util.Date();//年与日时分秒 //数据库的 ...

  5. How exactly does Google AdWords work?

    The key to how Google AdWords works is the Quality Score. Quality Score is generally how well an ad ...

  6. ViewStub应用

    在开发应用程序的时候,会遇到这样的情况,在运行时动态的根据条件来决定显示哪个View或哪个布局,可以把可能用到的View都写在上面,先把他们的可见性设置为View.GONE,然后在代码中动态的更改它的 ...

  7. [学习总结]9、Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)

    这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚 ...

  8. 通过Shell统计PV和UV

    PV.UV是网站分析中最基础.最常见的指标.PV即PageView,网站浏览量,指页面的浏览次数,用以衡量网站用户访问的网页数量.用户没打开一个页面便记录1次PV,多次打开同一页面则浏览量累计:UV即 ...

  9. Ribbon详解

    转自Ribbon详解 简介 ​ Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让 ...

  10. Dubbo提供者的异步执行

    从前面"对提供者的异步调用"例子可以看出,消费者对提供者实现了异步调用,消费者线程的执行过程不再发生阻塞,但提供者对IO耗时操作仍采用的是同步调用,即IO操作仍会阻塞Dubbo的提 ...