首页 > 其他分享 >密码协议学习笔记(4):比特承诺

密码协议学习笔记(4):比特承诺

时间:2023-09-10 21:14:13浏览次数:54  
标签:Hash 承诺 比特 Alice 笔记 密码 计算 Bob

比特承诺:

股票经纪人甲试图说服乙购买他的服务,甲表示,它已分析出若干支股票将会涨停,但在乙出钱购买它的服务之前,它不能透露如此有价值的信息,于是甲将这几支股票写在纸上,并锁进保险箱里,将保险箱交给乙,表示,一个月后将钥匙给乙,如果到时候打开保险柜,看看里面写的股票是否确实涨停,以此来判定甲的预测能力.

这便是比特承诺的概念.比特承诺包含两方:承诺者与验证者.

比特承诺包括以下几个阶段:

  1. 承诺阶段:承诺者选择一个要承诺的比特$b\in\{0,1\}$,把能代表该比特的信息$c$发送给验证者
  2. 打开阶段:承诺者把用于打开$c$的信息$d$和承诺的比特$b$发送给验证者,验证者用$d$打开$c$并验证是否是$b$

安全的比特承诺需要满足的性质:

  1. 隐藏性:打开阶段开始前,验证者无法得到$b$,进一步地,称一个方案是完善隐蔽的,指验证者不能从$c$中获得任何关于$b$的信息.
  2. 绑定性:承诺者不能在打开阶段之前改变自己承诺的比特.

类似于密码算法安全性的定义,比特承诺的属性分为计算上隐藏的,计算上绑定的,和信息论上隐藏的,信息论上绑定的.

常用比特承诺协议:

使用对称加密函数的比特承诺:

协议开始前,双方在TTP的帮助下协商出安全的加密算法$Enc_{(\cdot)}(\cdot)$和解密算法$Dec_{(\cdot)}(\cdot)$

(博主注:为何一定要在TTP帮助下协商呢,如果密钥是安全的,直接将加密解密算法公开不行吗)

注:用$||$表示字符串拼接

Alice   Bob
  $\leftarrow r$ 生成一个随机比特串$r$

选择想承诺的比特$b$

生成一个密钥$k$

计算$Enc_k(r||b)$

$Enc_k(r||b) \rightarrow$  
  打开阶段  
  $k \rightarrow$  
    验证解密后得到的r,b

隐藏性:Bob不知道密钥$k$则无法解密$Enc_k(r||b)$ 

绑定性:如果消息不含$r$,则Alice随便就能找到一个密钥$k'$就可以使得解密后得到的值反转.而包含$r$后,虽然Alice也能通过穷举做到,但在计算上是不可行的.

使用单向哈希的比特承诺:

协议开始前,双方在TTP的帮助下协商出安全的哈希算法$Hash(\cdot)$

Alice   Bob

生成随机比特串$r_1,r_2$

和希望承诺的比特$b$一同计算哈希值$Hash(r_1||r_2||b)$

$Hash(r_1||r_2||b),r_1,\rightarrow$  
  打开阶段  
  $r_2$ 计算$Hash(r_1||r_2||b)$并验证

好处:Bob无需发送消息.

隐藏性:由于不知道$r_2$,Bob无法区分$Hash(r_1||r_2||0),Hash(r_1||r_2||1)$

绑定性:Alice要伪造承诺,需要计算哈希碰撞$Hash(r_1||r_2'||b')=Hash(r_1||r_2||b)$,这在计算上是不可行的.

 

使用伪随机数发生器的比特承诺:

双方在TTP的帮助下选择一个伪随机数发生器$G$,再选择一个足够长的随机串$R$

Alice   Bob

选择需要承诺的比特$r$

产生$s$作为伪随机数发生器的种子

计算

$$c=\left\{\begin{matrix} G(s) & b=0 \\  G(s)\oplus R & b=1 \end{matrix}\right.$$

$c\rightarrow$  
  打开阶段  
  $s,b \rightarrow$ 计算$G(s)$并验证

隐藏性:由于不知道$s$,Bob无法区分$G(s),G(s)\oplus R$

绑定性:要伪造承诺,则需计算$G(s')=G(s)\oplus R$或者$G(s')\oplus R=G(s)$,这在计算上是不可行的.

Pedersen承诺协议:

比特承诺协议也可以利用数论中的一些计算困难的问题来构造,例如该协议就是通过离散对数问题进行构造的.

双方在TTP的帮助下选择大素数$p$,$Z_p*$的生成元$p$(g\in[1,p-1]),随机数$y\in[1,p-1]$

Alice   Bob

选择承诺的比特$b$,产生随机数$r\in [1,p-1]$

计算$c=g^ry^b \mod p$

$c \rightarrow$  
  打开阶段  
  $b,r \rightarrow$  
    计算并验证

隐藏性:因为$r$随机产生,因此Bob无法区分$c_0=g^r$和$c_1=g^ry$.

绑定性:若Alice要篡改自己的承诺(以将$b=1$篡改为$b=0$为例),则需要计算$r'$,使得

$$\begin{aligned}g^{r'}=&g^ry \\g^{r'-r} =& y \\r'=& \log_g y+r \mod p\end{aligned}$$

这需要计算离散对数问题,这在计算上是不可行的.

(博主注:以上几个协议的隐藏性都是信息论级别的,绑定性则只有计算复杂度级别)

如果要用比特承诺协议承诺多个比特,可以重复应用协议多次,而对Pedersen承诺协议而言,也可以直接将承诺的字符串$m$作为计算$c=g^ry^m \mod p$的指数应用.(注意,此时要求$m\in[1,q-1]$,否则需要对字符串进行分块.)

标签:Hash,承诺,比特,Alice,笔记,密码,计算,Bob
From: https://www.cnblogs.com/isakovsky/p/17688729.html

相关文章

  • 【学习笔记】【自学】【模板】三分法
    题目描述:给定一个$n$次函数$f(x)$形如$a_1x^n+a_{2}x^{n-1}+......+a_{n-1}x^2+a_nx+a_{n+1}$,求$f(x)_{\max}$,且$x\in[l,r]$,设使得$f(x)_{\max}$的$x$为$x_{\max}$。对于一个区间$[l,r]$而言,若确定使得$f(x)$为最大值的$x$定在$[l,r]$中,则可以使用三分法求......
  • 【学习笔记】P8590 『JROI-8』这是新历的朝阳,也是旧历的残阳
    比较有思维的一个数学题,写个笔记纪念一下。显然,为了使$\sum\limits_{i=1}^na_i^2$最大,整数一定要放最后一段,即求$\sum\limits_{i=1}^n(a_i+m)^2$,而负数需要分情况考虑,即放第一段还是最后一段,中间的$m-2$是空段,只考虑$1$和$m$这两个极端情况。可以设中间节点$t$,$a_{i......
  • 【学习笔记】【自学】三维偏序 (CDQ)
    [P3810【模板】三维偏序(陌上花开)](https://www.luogu.com.cn/problem/P3810)题目描述:有$n$个元素,第$i$个元素有$a_i,b_i,c_i$三个属性,设$f(i)$表示满足$a_j\leqa_i$且$b_j\leqb_i$且$c_j\leqc_i$且$j\nei$的$j$的数量。对于$d\in......
  • Linux教材第一、二章学习笔记及遇到的问题
     第一章第一章主要学习了unix、Linux的特性、文件系统组织、系统管理等内容。UbuntuLinux的特性出于安全原因,要运行任何特权命令时,用户必须输入sudocommand,首先会验证用户的密码。 Unix/Linux文件系统组织目录的查看,创建,增加,删除 手册页的查看。 UbuntuLinux......
  • 20211312徐元琦 学习笔记1
    历史:Unix是早期的商业化操作系统,诞生于20世纪60年代,最早由AT&T的贝尔实验室开发。它的设计目标是支持多用户和多任务的环境。Linux是由LinusTorvalds于1991年创建的开源操作系统。它最初是为个人计算机而开发,后来演变成一个广泛的操作系统家族。联系:Linux是基于Unix的设计,因......
  • 07SQL注入:明明设置了强密码,为什么还会被别人登录?
    预声明的原理是将SQL查询语句和参数分离,通过绑定参数的方式确保参数的值不会被解释为SQL代码的一部分,从而有效地防止注入攻击。 ......
  • 读书笔记1
    读书笔记120211215卢泽第一章-引言1.1系统编程的作用系统编程的目标是有效地利用系统资源来开发应用软件,并为学生提供扎实的专业基础。1.2本书目标本书旨在强化学生的编程背景知识,并涵盖了以下主题:动态数据结构的应用进程概念和进程管理并发编程定时器和定时功......
  • python学习笔记-redis缓存数据库
    一、缓存数据库介绍NoSQL(notonlysql)redis是业界主流的Key-valuenosql数据库之一,和memcached类似redis优点:速度快,每秒可执行大约110000设置操作,81000个/每秒的读取操作支持丰富的数据类型,列表,结合,可排序集合,哈希等操作是原子的二、redis操作安装redisubuntu安装$......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》学习笔记1
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就......
  • 学习笔记1
    第一次学习笔记第一章 知识点 1、系统编程:内存空间用来存放程序和数据,所有的程序必须在内存空间中才能运行。用来容纳操作系统的内存空间叫做系统空间,容纳应用程序的内存空间叫做用户空间。操作系统实现内核提供服务以便使系统程序可以直接访问系统资源。 2、目的:(1)实现U......