第四十七个知识点:什么是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第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
随机推荐
- adult
adult是adolescere (grow up)的过去分词. egg - embryo [胚胎] - foetus [就要出生的胎儿] - toddler [刚会走路] - adolescent ...
- 【C/C++】最长公共子序列(LCS)/动态规划
晴神这个的最巧妙之处,在于用dp[i][0] = dp[0][j] = 0的边界条件 这样从1的下标开始填数组的时候,递推公式dp[i-1][j-1]之类的不会报错 #include <iost ...
- 【科研】科研【合同】盖章流程/横向·非涉密/电子科技大学
[前置手续] 一.在科研管理系统里填单子,立项. 二.科研管理系统审核通过后,对于对面给好的合同,在合同系统里选择[合同业务发起-发起非标准合同],填单子. 三.会有一系列的审核,审核完成后打印合同备 ...
- Python绘制饼图
Python绘制饼图 1.1 对应代码如下图所示 import matplotlib.pyplot as pltfrom pylab import mplmpl.rcParams['font.sans ...
- 去除指定….RemoveMatching…(Power Query 之 M 语言)
表去除指定行: =Table.RemoveMatchingRows( 表, 列表, "指定列") 表中指定列中与列表中相同的行会被去除 表只有一列时,第三参数可以缺省 示例1:&q ...
- 『学了就忘』Linux系统定时任务 — 88、循环执行定时任务
目录 1.crond服务管理与访问控制 2.crontab命令的访问控制 3.用户级别的crontab命令 4.crontab命令的注意事项 5.系统的crontab设置 (1)/etc/cronta ...
- 好奇怪啊,如果邮箱JSON格式的字符串不是在一行上,那么转为JSON将转换不成功,估计是数据格式有问题吧
好奇怪啊,如果邮箱JSON格式的字符串不是在一行上,那么转为JSON将转换不成功,估计是数据格式有问题吧, 打印出的数据必须是如下的在一行的字符串,才可以转换为JSON格式成功.
- 贪心——55. 跳跃游戏 && 45.跳跃游戏II
给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: true ...
- 使用iframe实现上下窗口结构及登录页全窗口展示Demo
iframe.html 首页 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> < ...
- Centos 查询端口被占用命令
lsof -i:端口号 netstat -ntulp | grep 80 //查看所有80端口使用情况