Alice,这位令人惊异的魔术天才,正表演关于人类意念的神秘技巧。她将在Bob选牌之前猜中Bob将选的牌!注意Alice在一张纸上写出她的预测。Alice很神秘地将那张纸片装入信封中并封上。就在人们吃惊之时Alice将封好的信封随机地递给一观众。“取一张牌,Bob,任选一张”。他看了看牌而后将之出示给Alice和观众。是方块7。现在Alice从观众那里取回信封,并撕开它。在Bob选牌之先写的预测,也是:方块7!全场欢呼!

这个魔术的要点在于,Alice在戏法的最后交换了信封。然而,密码协议能够提供防止这种花招的方法。这为什么有用?下面是一个更实际的故事:

股票经纪人Alice想说服投资商Bob她的选取赢利股票的方法很不错。

Bob说:“给我选5支股票,如果都赢利,我将把生意给你。”

Alice说:“如果我为你选了5只股票,你可以自己对他们投资,而不用给我付款。我为什么不向你出示我上月选的股票呢?”

Bob:“我怎样知道你在了解了上月股票的收益后没改变你上月选择的股票呢?如果你现在告诉我你选的股票,我就可以知道你不能改变他们。在我买你的方法以前我不在这些股票中投资。相信我。”

Alice:“我宁愿告诉你我上月选择的股票。我不会变,相信我。”

Alice想对Bob承诺一个预测(即1bit或bit序列),但直到某个时间以后才揭示她的预测。而另一方面,Bob想确信在Alice承诺了她的预测后,她没有改变她的想法。

使用对称密码算法的比特承诺

这个比特承诺协议使用对称密码:

(1)Bob产生一个随机比特串R,并把它发送给Alice。

R

(2)Alice生成一个由她想承诺的比特b组成的消息(b实际上可能是几个比特),以及Bob的随机串。她用某个随机密钥K对它加密,并将结果送回给Bob。

EK(R,b)

这是这个协议的承诺部分,Bob不能解密消息,因而不知道比特为何。

当到了Alice揭示她的比特的时候,协议继续:

(1)Alice发送密钥给Bob;

(2)Bob解密消息以揭示比特。他检测他的随机串以证实比特的有效性。

如果消息不包含Bob的随机串,Alice能够秘密地用一系列密钥解密她交给Bob的消息,直到找到一个给她的bit,而不是她承诺的比特。由于比特只有两种可能的值,她只需试几次肯定可以找到一个。Bob的随机串避免了这种攻击,她必须能找到一个新的消息,这个消息不仅使她的比特反转,而且使Bob的随机串准确地重新产生。如果加密算法好,她发现这种消息的机会是极小的。Alice不能在她承诺后改变她的比特。

使用单向函数的比特承诺

本协议利用单向函数:

(1)Alice产生两个随机比特串,R1和R2。

R1,R2

(2)Alice产生消息,该消息由她的随机串和她希望承诺的比特(实际上可能是几比特)组成。

(R1,R2,b)。

(3)Alice计算消息的单向函数值,将结果以及其中一个随机串发送给Bob。H(R1,R2,b),R1。

这个来自Alice的传送就是承诺证据。Alice在第(3)步使用单向函数阻止 Bob对函数求逆并确定这个比特。

当到了要Alice出示她的比特的时候,协议继续:

(4)Alice将原消息发给Bob。

(R1,R2,b)

(5)Bob计算消息的单向函数值,并将该值及R1与原先第(3)步收到的值及随机串比较。如匹配,则比特有效。

这个协议较前面一个的优点在于Bob不必发送任何消息。Alice送给Bob一个对比特承诺的消息,以及另一揭示该bit的消息。

这里不需要Bob的随机串,因为Alice承诺的结果是对消息进行单向函数变换得到的。Alice不可能欺骗,并找到另一个消息(R1,R2’,b’),满足

H(R1,R2’,b’)=(R1,R2,b)

通过发给Bob  R1,Alice对b的值作了承诺。如果Alice不保持R2是秘密的,那么Bob能够计算H(R1,R2,b’)和(R1,R2,b),并比较哪一个等于他从Alice那里接收的。

使用伪随机序列发生器的比特承诺

本协议是更容易的[1137]:

(1)Bob产生随机比特串,并送给Alice。

RB

(2)Alice为伪随机比特发生器生成一个随机种子。然后,对Bob随机比特串中的每一比特,她回送Bob下面两个中的一个:

(a)当Bob比特为0,发生器的输出,或者

(b)如果Bob的比特为1,发生器输出与她的比特的异或。

当到了Alice出示她的比特的时候,协议继续:

(3)Alice将随机种子送给Bob。

(4)Bob完成第(2)步以确认Alice的行动是合理的。

如果Bob的随机比特串足够长,伪随机比特发生器不可预测,这时Alice就无有效的方法进行欺诈。

模糊点

Alice送给Bob以便对比特承诺的这些串有时又叫模糊点。一个模糊点是一个比特序列,虽然在协议中没有说明它为什么必须这样,正如Gilles Brassard所说的,“只要是合理存在的就是有用的”[236]。模糊点有下面四个特性:

1.Alice能够对模糊点承诺,通过承诺模糊点来承诺一个比特。

2.Alice能够打开她所承诺的任何模糊点。当她打开模糊点时,她能让Bob相信在她对模糊点承诺时她所承诺的比特值。因此,她不能选择把任何模糊点作为0或1打开。

3.Bob不知道Alice如何打开承诺了的但尚未打开的模糊点。即使Alice打开别的模糊点之后,也是如此。

4.模糊点所带的信息除Alice承诺的比特外,不再有任何信息。模糊点本身,连同Alice承诺和开启模糊点的过程,与Alice希望对Bob保密的别的东西不相关。

--------------------- 

作者:simanstar 

来源:CSDN 

原文:https://blog.csdn.net/simanstar/article/details/50965931 

版权声明:本文为博主原创文章,转载请附上博文链接!

fuzzy commitment 和fuzzy vault的更多相关文章

  1. Data Flow ->> Fuzzy Lookup & Fuzzy Grouping

    这两个任务的作用是数据清洗(Data Cleansing). Fuzzy Lookup通过引用另外一张数据库表或者索引来进行相似值匹配.这种组件对于标准化和查找可能错误的客户端数据非常有用.例如像地址 ...

  2. Umbraco Examine 实现Fuzzy search

    在Umbraco examine search项目开发中,有一个需求, 就是intercom 和 intercoms需要返回同样的结果 也就是说 搜索intercom 时, 能返回包含intercom ...

  3. elasticsearch-查询基础篇

    elasticsearch的查询有两部分组成:query and filter. 两者的主要区别在于:filter是不计算相关性的,同时可以cache.因此,filter速度要快于query. 先记录 ...

  4. Elasticsearch学习笔记(一)

    批量建索引: curl -s -XPOST 'localhost:9200/_bulk' --data-binary @documents.json 查看索引mappingmyindex/_mappi ...

  5. js+css3文字模糊代码

    在写文字模糊的时候要理清自己的思路,根据以下的步骤来: 对你要模糊的文字进行布局 <body style="background:#ccc;"> <ul clas ...

  6. SSIS:控件清单

    Control Flow 控制流程 Containers 容器 For Loop Container Foreach Loop Container Sequence Container Core Ta ...

  7. elasticsearch-查询的基本语法

    elasticsearch的查询有两部分组成:query and filter. 两者的主要区别在于:filter是不计算相关性的,同时可以cache.因此,filter速度要快于query. 先记录 ...

  8. Oracle 10g 数据文件的第一个数据块结构

    一.数据文件的第一个数据块结构kcvfh BBED> set file 1 FILE# 1 BBED> set block 1 BLOCK# 1 --查看第一个数据块的整体结构 BBED& ...

  9. Lucene 搜索功能

    搜索过程 图解: 主要 API: IndexSearcher:    //所有搜索都通过 IndexSearcher 进行,他们将调用该类中重载的 search() 方法 Query:         ...

随机推荐

  1. 剑指offer——55两个链表的第一个公共节点

    题目描述 输入两个链表,找出它们的第一个公共结点. 题解: 分别遍历两个链表到链尾,并计算其长度,若最后一个节点相同,则存在公共节点 然后让长链表指针从头先移动长度差个节点,然后两个链表指针一起移动, ...

  2. NIO 源码分析(04) 从 SelectorProvider 看 JDK SPI 机制

    目录 一.SelectorProvider SPI 二.SelectorProvider 加载过程 2.1 SelectorProvider 加载 2.2 Windows 下 DefaultSelec ...

  3. splay模版

    //splay模版 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...

  4. 让微信小程序页面之间的通信不在变得困难

    一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品 ...

  5. 在vue中运用mt-loadmore 实现上拉加载,下拉刷新

    元旦了,给手残党直接复制的机会,代码如下: 1. :style="{'-webkit-overflow-scrolling': scrollMode}" 最外层div设置,以便兼容 ...

  6. 将时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间

    参考:https://blog.csdn.net/sxf_123456/article/details/81582964 参考模板: from datetime import datetime, ti ...

  7. linux 7 系统查询相关

    今天 领导让我整理一下查询关于系统信息的一些命令,查找并验证了之后,我发上来给大家分享一下. 1. #uname –a显示电脑及操作系统信息2. #cat /proc/version查看正在运行的内核 ...

  8. PHP算法之有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认为是 ...

  9. 去sqlserver日志

    USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET  ...

  10. Spring Boot学习笔记二

    Spring Boot入门第二篇 第一天的详见:https://www.cnblogs.com/LBJLAKERS/p/12001253.html 同样是新建一个pring Initializer快速 ...