安全多方计算之四:比特承诺

1. 简介

比特承诺方案是密码协议的重要成分,广泛应用于电子拍卖、商业谈判、电子投票、电子现金和在线游戏等领域,还可以用于零知识证明、身份认证和安全多方计算协议等。

比特承诺方案(Bit Commitment Scheme)解决这样的问题:Alice向Bob承诺一个预测(比特值),直到一段时间之后才揭示着预测(比特值);在这期间,Alice不能改变自己的预测(比特值)。

比特承诺的一个直观例子:Alice 把消息 M M M(承诺)放在一个箱子里(只有Alice有钥匙)并将它锁住送给Bob,等到 Alice 决定向 Bob证实消息 M M M时,Alice把消息 M M M及钥匙给 Bob,Bob 能够打开箱子并验证箱子里的消息同 Alice出示的消息是否相同,且Bob 确信箱子里的消息在他保管期间没有被篡改。

比特承诺包括两个阶段:

  • 承诺阶段:Alice选择一个要承诺的比特或比特序列 b b b,并把能表示该比特的消息 c c c发送至Bob。
  • 打开阶段:Alice把打开承诺的消息 d d d与承诺 b b b,发送至Bob;Bob用 d d d打开消息 c c c,验证 b b b是否为A承诺的比特。

一个安全的比特承诺方案需满足以下两个性质:

  • 隐藏性:承诺阶段,接收方Bob不能得到发送方Alice承诺的比特值。一个承诺方案是完善隐蔽的,如果接收方不能从发送的消息中得到关于承诺的任何消息。
  • 绑定性:给定承诺阶段的交互信息,接收者只能接受一个合法的承诺。即发送方不能在打开承诺的阶段改变自己承诺的比特。

常见的比特承诺方案有基于对称密码算法的,基于单向函数的以及基于数学难解问题的,包括基于大数分解的与基于离散对数的等。

2. 基于对称密码算法的比特承诺方案

承诺者Alice要向检验者Bob承诺 b b b,基于对称密码算法的比特承诺方案如下:

Alice 和 Bob 共同选定某种对称加密算法 E E E

承诺阶段

  • Bob产生一个随机比特串 r r r并发送给 Alice
  • Alice 随机选择一个密钥 k k k,利用对称加密算法 E E E r r r和需承诺的比特 b b b加密得 c = E ( r , b ) c=E(r,b) c=E(r,b),最后将加密后的结果 c c c发送给验证者 Bob

打开阶段

  • 当需要 Alice 公开承诺时,她将密钥 k k k和承诺的比特 b b b发送给 Bob
  • Bob利用密钥 k k k解密 c c c,并利用他的随机串 r r r检验比特 b b b的有效性。

3. 基于单向函数的比特承诺方案

承诺者Alice要向检验者Bob承诺 b b b(或消息串 M M M),基于单向函数的比特承诺方案如下:

Alice和Bob共同选定一个单向函数 H ( ⋅ ) H(·) H(),如Hash函数

承诺阶段

  • Alice生成两个随机数 r 1 , r 2 r_1,r_2 r1,r2,计算单向函数值 h = H ( r 1 , r 2 , b ) h=H(r_1,r_2,b) h=H(r1,r2,b),并将散列结果 h h h和其中一个随机数,如 r 1 r_1 r1发送给Bob

打开阶段

  • 当Alice向Bob出示承诺 b b b时,把承诺 b b b和另一个随机数 r 2 r_2 r2一起发送给Bob
  • Bob计算 H ( r 1 , r 2 , b ) H(r_1,r_2,b) H(r1,r2,b)的值,并与第(2)步收到的 h h h值做比较,验证承诺 b b b的有效性。

Alice通过发送随机数 r 1 r_1 r1 b b b做出承诺,也就是说散列值 h h h和随机数 r 1 r_1 r1构成了Alice向Bob承诺的证据。

该协议的优点是Bob不必发送任何消息。

4. Pederson承诺协议

承诺者Alice要向检验者Bob承诺 m m m,Pederson的比特承诺方案如下:

系统参数: p 、 q p、q pq是大素数,且 q / p − 1 q/p-1 q/p1 , 满足 Z p Z_{p} Zp中离散对数问题是难解的, g g g Z p ∗ Z_{p}^{*} Zp 的 本原元,随机数 y ∈ Z p ∗ y \in Z_{p}^{*} yZp

承诺阶段:

Alice 选择需要承诺的消息比特串 m ∈ Z q m \in Z_{q} mZq, 并生成随机数 r ∈ Z q ∗ r \in Z_{q}^{*} rZq; 计算 c = g r y m   m o d   p c= g^{r} y^{m} \bmod p c=grymmodp 作为对消息 m m m的承诺,将 c c c发送至 Bob。

打开阶段

Alice将 m m m r r r发送至Bob;Bob通过收到的 r r r打开承诺,验证 c c c的计算是否与收到的承诺一致。如果一致,则认为承诺有效,否则无效。

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,使用FPGA进行开发需要掌握一定的方法和流程。下面是一些常用的FPGA开发方法: 1. 硬件描述语言(HDL):FPGA开发通常使用硬件描述语言,如VHDL(VHSIC Hardware Description Language)或Verilog来描述硬件电路。这些语言允许开发人员通过编写代码来定义电路的功能和行为。 2. 开发工具:针对不同的FPGA品牌和型号,有各种不同的开发工具可供选择,如Xilinx的Vivado、Altera的Quartus等。这些工具提供了设计、仿真、综合、布局和生成比特流等功能,可以辅助完成FPGA开发。 3. 仿真与验证:在将设计加载到FPGA之前,通常需要进行仿真和验证,以确保设计满足预期的功能和性能。仿真可以通过模拟设计行为来验证其正确性,而验证则可以通过测试设计在不同情况下的响应来验证其鲁棒性。 4. 综合与布局:综合是将HDL代码转换为门级网表的过程,而布局则是将门级网表映射到FPGA芯片上的物理布局。这些步骤都是由开发工具自动完成的,开发人员可以通过调整综合和布局参数来优化设计的性能和资源利用率。 5. 生成比特流:一旦设计经过综合和布局,并通过验证,就可以生成比特流文件(bitstream)。比特流文件是将设计加载到FPGA上的二进制文件,通常通过JTAG(Joint Test Action Group)接口将其传输到FPGA芯片中。 6. 调试和优化:一旦设计加载到FPGA上,开发人员可以使用调试工具和逻辑分析仪等设备来调试和优化设计。这些工具可以帮助开发人员分析电路的行为、定位问题并进行性能优化。 以上是一些常用的FPGA开发方法,当然还有更多的技术和工具可以用于FPGA开发。掌握这些方法将有助于您更好地进行FPGA开发和实现各种应用。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐私无忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值