第四十七个知识点:什么是Fiat-Shamir变换?
第四十七个知识点:什么是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变换?的更多相关文章
- 《构建之法》第四&十七章读书笔记
<构建之法>第四&十七章读书笔记 一. 前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...
- 第十七个知识点:描述和比较DES和AES的轮结构
第十七个知识点:描述和比较DES和AES的轮结构 这是密码学52件事中的第17篇.本周我们描述和比较DES和AES的结构. DES和AES都是迭代分组密码的例子.分组密码通过重复使用一个简单的轮函数来 ...
- NeHe OpenGL教程 第四十七课:CG顶点脚本
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Gradle 1.12用户指南翻译——第四十七章. Build Init 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Java进阶(四十七)Socket通信
Java进阶(四十七)Socket通信 今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...
- C# 优化程序的四十七种方法
一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...
- “全栈2019”Java第四十七章:继承与方法
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
随机推荐
- 19. awk 命令详解
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- 16. Linux find查找文件及文件夹命令
find的主要用来查找文件,查找文件的用法我们比较熟悉,也可用它来查找文件夹,用法跟查找文件类似,只要在最后面指明查找的文件类型 -type d,如果不指定type类型,会将包含查找内容的文件和文件夹 ...
- 单体内置对象 Global 和 Math
单体内置对象 Global 和 Math 在所有代码执行前,作用域中就已经存在两个内置对象:Global(全局)和Math.在大多数ES实现中都不能直接访问Global对象.不过,WEB浏览器实现了承 ...
- Linux系统信息查看命令(ZZ)
http://hi.baidu.com/thinkdifferent/blog/item/22f4a80161630e011d958384.html转自一个baidu师兄的博客,很好的一个总结,推荐下 ...
- nexus 私服 拉不了 jar 包,报 Not authorized
问题: 无法下载导入jar包,idea reload 时 报: Could not transfer artifact com.xxx:parent:pom:1.0-SNAPSHOT from/to ...
- redis入门到精通系列(六):redis的事务详解
(一)事务的概念 谈到数据库的高级应用,不可避免会谈到事务.熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行.今天我们就来了解redis中的事务 ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(1. 基础概念与架构图)
1.简介 1.1. 背景:公司正在进行敏捷开发环境的搭建,以取代传统的架构,好处大大的,我就不赘述了.公司原来负责这个项目的同事要转组,我只好交给另外同事继续,但是为了防止同样的事情,我也需要深入了 ...
- 关于requests.exceptions.ConnectionError: HTTPSConnectionPool的问题
错误如下: raise ConnectionError(e, request=request)requests.exceptions.ConnectionError: HTTPSConnectionP ...
- SpringBoot服务间使用自签名证书实现https双向认证
SpringBoot服务间使用自签名证书实现https双向认证 以服务server-one和server-two之间使用RestTemplate以https调用为例 一.生成密钥 需要生成server ...
- Mysql从头部署多个版本
目录 一.环境准备 二.下载安装包 三.Mysql-5.6单独部署 四.Mysql-5.7单独部署 五.添加到多版本控制 六.muliti使用 一.环境准备 系统:centos7.3一台 软件版本:m ...