Introduction—A story

 Alice:股票经纪人
Bob:股民 
  Alice:你的钱交给我,我替你买股票,我专业,挣钱多! 
  Bob:怎么证明? 
  Alice:我们上月买进的10只股票都上涨了10%以上,我可以让你看看我上月选择的股票情况。 
  Bob:这不可靠,你现在完全可以在知道股票的情况后,告诉我你原来选择的就是这些上涨的股票。如果你告诉 我现在选择哪些股票,一个月后她们能上涨多少,而一个月后这些股票确实如此,我就相信你。 
  Alice:这对我不公平,你可能直接用你的钱去买我选择的股票,一个月后你赚了钱,仍然不让我替你购买。 
  Bob: 你的担心也对,那么我们这样做好吗?你拿一个坚固的箱子和一把锁,把你现在选择的股票写到一张纸上,装到箱子里锁上,你把钥匙带走,把箱子留在我这里。一个月之后你到我这里,当面打开箱子,如果你选的股票确实如你所预料的上涨了,我就把钱交给你,让你替我购买。行吗? 
   Alice:好!这个方法好,多我们都公平。 
他们这样做了,一个月后检验发现Alice的预测是正确的,Bob把的钱交给了Alice。 


Definition of Bit Commitment


比特承诺(Bit Commitment,BC)是密码学中的重要基 础协议,其概念最早由1995 年图灵奖得主Blum
提出。比特承诺方案可用于构建零知识证明、可验证秘密 分享、硬币投掷等协议,同时和茫然传送一起构成安全双方计算的基础,是信息安全领域研究的热点。

比特承诺的基本思想如下:发送者Alice 向接收者Bob 承诺一个比特b (如果是多个比特,即比特串t ,则称为比特 串承诺),要求:在第1 阶段即承诺阶段Alice 向Bob 承诺这个比特b ,但是Bob 无法知道b 的信息;在第2 阶段即揭示 阶段Alice 向Bob 证实她在第1 阶段承诺的确实是b ,但是 Alice 无法欺骗Bob(即不能在第2 阶段篡改b 的值)。 

经典环境中关于比特承诺的一个形象的例子是:Alice 将待承诺的比特或秘密写在一张纸上,然后将这张纸锁进一个保险箱,该保险箱只有唯一的钥匙可以打开。在承诺阶段, Alice 将保险箱送给Bob,但是保留钥匙;到了揭示阶段,Alice 将比特或秘密告诉Bob,同时将钥匙传给Bob 使其相信自己的承诺。需要指出的是,保险箱不能被“暴力破解” 的性质甚至允许Alice 在揭示阶段无需向Bob 说明承诺的比特或秘密,只要将钥匙发送给Bob 即可。

一个比特承诺方案必须具备下列性质:

    *正确性:  如果Alice 和Bob 均诚实地执行协议,那么在 揭示阶段Bob 将正确获得Alice 承诺的比特b 。 
    *保密性:  在揭示阶段之前Bob 不能获知b 的信息 。 
    *绑定性:  在承诺阶段结束之后,Bob 只能在揭示阶段获得唯一的b 。

三方比特承诺模型


在该模型下,承诺者由一人变为二人Alice 与Bob,由此二人共同向第三方Chris 承诺一个比特或比特串。承诺阶段之前,Alice 与Bob 可以自由通信以商定承诺内容,但是在协议开始以后,要求Alice 与Bob 无法再进行通信。

承诺阶段

由Alice 向Chris承诺b。

揭示阶段

由Bob 负责向Chris 揭示b 的信息,因此Alice 没有任何作弊的可能,即无法破坏协议的绑定性。

应用

三方参与的安全模型在实际生活中是有很多应用的,例如在博弈论的经典“囚徒困境”模型中,两个纵火嫌疑犯即 可以视作证明者,他们在被抓住以前可以自由交流(例如商定
问讯对策),被抓以后将被警察(验证者)分开审讯。如果这两 个嫌疑犯均“忠实”地在审讯过程中坚持否认纵火事实,那么他们将获得集体最优结果。又如,由两家单位合作来对某 个大型项目进行投标(例如资金与技术的合作),则这两家单位和招标方构成三方承诺模型。

比特承诺 Bit Commitment的更多相关文章

  1. fuzzy commitment 和fuzzy vault

    Alice,这位令人惊异的魔术天才,正表演关于人类意念的神秘技巧.她将在Bob选牌之前猜中Bob将选的牌!注意Alice在一张纸上写出她的预测.Alice很神秘地将那张纸片装入信封中并封上.就在人们吃 ...

  2. Scrum 是什么?

    Scrum 是什么? Scrum 是当前最流行的敏捷软件开发方法论和实施框架.但就像人们对 “Agile” 术语的不同理解一样,不同的人对 “Scrum” 也有着不同的理解.那么,到底 Scrum 是 ...

  3. Scrum总结

    Scrum总结一个轻量级的软件开发方法 Scrum是一个敏捷开发框架,是一个增量迭代的开发过程..在这个框架整个开发周期由若干个小的跌代周期,每个小的的跌代周期称为一个Sprint,每个Sprint的 ...

  4. 如何成为一位优秀的ScrumMaster

    嗨,大家好,我是叶子 背景介绍 目标:为了能更好的适应快速变化的需求和不确定的未来. 部门包含岗位:部门负责人.项目经理.产品经理.开发团队(开发人员.测试人员) 那么这种情况下,我们想转型Scrum ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 Scrum 核心)--学习笔记

    2.7.2 Scrum 核心 3个工件 5个会议 5个价值观 3个工件 产品待办列表(Product Backlog) Sprint 待办列表(Sprint Backlog) 产品增量(Product ...

  6. 承诺会计/预留款会计(commitment accounting/Encumbrance Accounting) in AX 2012

    作者:umfish  博文 http://blog.csdn.net/umfish/article/details/7751397 如果要使用Encmubrance Accounting, 需要先在G ...

  7. 使用C#处理基于比特流的数据

    使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...

  8. AngularJs $q 承诺与延迟

    $q 一个帮助处理异步执行函数的服务.当他们做完处理时,使用它们的返回值(或异常). 受 Kris Kowa’s Q 的启发,这是一个实现promise/deferred对象的启用. $q的两种方式- ...

  9. 一个按比特位拷贝数据的函数copybits

    一个按比特位拷贝数据的函数 没有进行特别的优化.其实还可以在拷贝源开始位置和目标开始位置是2的整数倍位置的时候进行优化. 说明 这个函数用于从src数组首地址跳过sbb个字节,又跳过ssb个比特位,拷 ...

随机推荐

  1. 【JZOJ6357】小ω的图(graph)

    description analysis 拆位从高位到低位贪心 对于当前位,如果把所有当前位为\(1\)的边塞入,\(1\)和\(n\)连通,则该位必须为\(1\) 这个是因为高位的\(1\)比所有低 ...

  2. 牛客多校第五场 G subsequence 1 最长公共子序列/组合数

    题意: 给定两个由数字组成的序列s,t,找出s所有数值大于t的子序列.注意不是字典序大. 题解: 首先特判s比t短或一样长的情况. 当s比t长时,直接用组合数计算s不以0开头的,长度大于t的所有子序列 ...

  3. JAVA 设计模式之 原型模式详解

    原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式利用的是克隆的原理,创建新的对象,JDK提供的Cloneable 和JSON. ...

  4. iOS之NSArray类簇简介-(copy、mutableCopy导致程序crash)

    1.前言 开发时常常用数组对数据进行处理,对NSMutableArray进行操作时经常导致程序崩溃,特研究一下NSArray的类簇!涉及__NSPlaceholderArray.__NSArray0. ...

  5. 20.multi_case05

    #coding:utf-8 # 通过gather方法 import asyncio async def a(t): print('-->', t) await asyncio.sleep(0.5 ...

  6. USACO 2012 March Silver Tractor /// 优先队列BFS oj21567

    题目大意: 输入n,(x,y):n为阻挡的草堆数量,(x,y)为开始时拖拉机所在的位置 接下来n行每行一个坐标(a,b):为各个草堆的坐标 输出拖拉机要回到原点(0,0)需要移动的草堆数量 Sampl ...

  7. 面试系列25 dubbo的spi思想是什么

    spi,简单来说,就是service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有3个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要s ...

  8. 9个永恒的UI设计原则

    很多人都在寻找那些能够帮助他们快速提升设计能力的方法,但你是否想过,自己身上的哪些方面会对你的设计产生影响呢?是使用工具的技巧,对设计的理解和态度,还是你的生活习惯呢?我想说所有这些都是决定你的设计是 ...

  9. JS流程控制语句 继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行。

    继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行. 语句结构: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue; } ...

  10. EasyNetQ异常处理

    代码下载 https://download.csdn.net/download/u010312811/11252093 官方Demo https://github.com/EasyNetQ/EasyN ...