比特比较
学习&&转载文章:
- 通过共享随机数来实现比特分享,再通过比特分享来实现比特串比较。
- 利用比特分享的方式,可以对
比特的一个数按比特进行多方分享,之后可以据此实现多方比较,多方比较则可以用来构造安全多方计算的基础模块,无论是隐私保护的机器学习还是隐私保护的DNA比较等,都需要用到多方比较模块。
安全模型#
安全多方计算的安全显然是在有攻击者情况下的安全,在不同情形下,实现安全的难度也不同,最极端的例子是一个安全多方计算协议的所有参与者都是恶意参与者,那么这个协议的安全性就很难保证了。
要实现安全,首先应该针对不同的情况建立不同的模型,而后针对这些模型进行研究。
首先假设有攻击者(Adversary),攻击者可以通过各种手段收买或者控制(Corrupt)部分参与者,而参与者一旦被收买或者控制,该参与者的所有通信历史信息和本地信息都会被攻击者掌握。
攻击者:
- 攻击者可以实际理解成黑客,他通过黑客手段入侵到了参与者的计算机中,取得了参与者计算机的控制权,因此可以掌握所有该参与者掌握的信息;
- 攻击者也可以理解成竞争公司的人,通过金钱来贿赂参与者,以此取得信息。

那么显然,攻击者能够最大收买的参与者人数,很大程度上影响了协议是否安全。
(t,n)门限攻击者结构是指参与者总数是
的攻击者结构指攻击者收买的参与者的人数小于参与者总人数的 ,即 ; 的攻击者结构指攻击者收买的参与者的人数小于参与者总人数的 ,即 。
攻击者模型分为半诚实攻击者模型和恶意攻击者模型:
- 在半诚实攻击者模型下,被攻击者收买的参与者遵守协议,不会在协议执行中途退出,也会诚实地发送自己的计算结果,不会篡改协议计算结果,但是被收买的参与者的所有信息,包括历史通讯信息、计算结果等都会被攻击者得知。
- 在恶意攻击者模型下,被攻击者收买的参与者不会再诚实地遵守协议,可能会篡改协议计算结果,其发送给其他参与者的信息有可能是虚假和伪造的。
攻击者的能力还可以根据其计算能力进行划分:
- 在计算意义下安全的模型中,攻击者的计算能力是概率多项式时间的,意味着攻击者无法解决常见的困难问题,即使计算出来,所花费的时间也已经超过了信息的有效期,获得的信息已经是过时的信息。
- 另一种模型为信息论意义下安全的模型,在这种模型下,攻击者的计算能力是无限的。
Shamir秘密分享#
设
原理介绍#
一个
- 秘密分配
秘密管理中心

- 秘密重构
门限值

- 安全性要求是指任意攻击者通过收买等手段获取了少于$ t
t s s $的信息。
方案介绍#
Shamir于1979年,基于多项式插值算法设计了
-
秘密分享:
-
参与者
秘密的在有限域 中随机选取 个元素,记为 ,并取以 为变元的多项式 -
对于
, 秘密计算 -
对于
, 通过安全信道秘密地将 分配给
-
- 秘密重构:
(1)
即可求解出系数
(2)另一种方式是使用多项式插值法进行重构主秘密,假设这$ t
参与者
显然,
定理:对于有限域
上 次的多项式,设为 ,存在有限域 上的 个元,记为 ,使得:$f(0)= {\textstyle \sum_{i=1}^{n}\lambda _if(i)} (𝜆_1,…,𝜆_𝑛)$为重组向量(recombinationn vector)。 证明:
设
,则 ,且 可以被表示为: 考虑一个
阶矩阵: ,由于矩阵 是满秩矩阵,因此存在 ,使得 因此有:
对于矩阵
证明:
这里把
若要计算重组向量,可通过计算矩阵
证明:
-
首先假设
是参与者集合, 掌握输入 ,需要共同计算的函数为 -
在有限域
上的 门限体制主要流程为:- 输入阶段,每个参与者
将自己的输入 ,利用 门限秘密共享体制,秘密选取最高 次的随机多项式 ,满足 ,然后 将 发送给参与者 - 计算阶段,假设输入的
和 已经通过至多 次的随机多项式 和 通过Shamir门限体制共享给了各个参与者, ,其中 是随机的多项式系数,参与者 掌握输入 的子秘密 和输入 的子秘密 ,至多 次的原因是多项式的系数是随机产生的,因此 次的系数也有可能是0。
- 输入阶段,每个参与者
-
加法(多方计算
)- 每个参与者
独立计算 。 即为 通过随机多项式共享后的结果,通过多项式插值法或者解方程即可恢复秘密 。 - 子秘密可以直接相加,是因为对于
,多项式的次数并没有发生变化,新的多项式 的最高次数依旧为 , 个参与者共享他们所掌握的 ,即可根据 个方程解 个未知数,解出 ,或者也可直接使用拉格朗日插值法求解出 。
- 每个参与者

- 乘法(多方计算
)- 首先每个参与者计算
,接着每个 独自选取次数为 次的随机多项式 ,且满足 。向各个参与者分配 ,且 。 - 所有参与者分配结束后,
掌握了信息 ,同时 是公开的重组向量,即 满足 ,因此 可计算 ,再利用多项式插值法,即可获得 。【即只需要 方就可以获得秘密 】
- 首先每个参与者计算

共享随机数#
本次主要介绍多方比较的实现方法,用之前介绍过的
协议主要基于拉格朗日插值,也可以通俗地理解成 个方程求解 个未知数。
BGW协议可以实现单比特分享,本次要介绍另一个比特分享方式。

按比特分享#
如有一个比特串
首先简要介绍一个多个参与者共同产生同一个随机数的方式
假设有

多方随机数生成#
本质上就是秘密分享-加法运算的应用,共同生成一个随机数。
参与者
假设参与者
同理
注意此时每个参与者
通过每个参与者都产生一个随机数并进行秘密共享,所有参与者共同协作产生了一个随机数
随机单比特分享(Joint Random Bit Sharing)#
本质上是秘密分享-乘法运算的应用
在学习了多方共同产生随机数后,可以利用此来实现多方的随机单比特分享,每个参与者拿到一个随机比特的Share,在重构之前每个参与者都不知道该随机比特的具体值。
- 首先所有参与者利用上节所讲述的共享随机数生成方式共同生成一个随机数,将其记为
,将参与者 拿到 的子秘密记为 (保持与上节的符号统一),用 表示 处于被分享成子秘密的状态, 由 组成。
每个参与者只知道自己的子秘密
- 之后通过第二次科普介绍的Shamir多方乘法,计算
],参与者 能够计算出 的一个子秘密,之后所有参与者分享自己计算出的 的子秘密,即公开 ]【即每个参与者都共享自己的子秘密】,每个参与者通过公开的 都可使用拉格朗日插值法重构出 【即每个参与者都可以计算出 】,若重构出的 则各方再重新生成随机数 。
每个参与者都能计算出
- 参与者
在计算出 后,计算 ,由于这些操作都是在有限域 内进行,因此 ,此时能够计算出两个 , 或 ,则 的逆乘上 有两种结果: 或者 。- 因为
,当 时, ; - 当
时, 。 - 所以参与者可以约定选取
,那么所有参与者就可以计算出相同的 ,参与者 设置
- 因为
在约定好范围后,每个参与者能够计算出
- 对于参与者
来说, 掌握 的子秘密 , 设置 , 即为 获得的随机比特 的一个子秘密。- 因为参与者
只知道 ,对于 来说 依旧有两种可能,分别是 ,因此 无法确定 的值是0还是1,只有所有参与者对 进行重构才能确定 的值,从而计算出 。 是所有参与者共同产生的随机数,因此 的值也是随机的,且在重构之前每个参与者都只掌握随机比特 的一个子秘密 ,不知道 的具体值。
- 因为参与者
利用秘密分享的乘法,构造更多计算
疑问:
为什么会等于 ?
比特比较#
比特或#
上次介绍了共享随机数和比特分享,通过共享随机数来实现比特分享,再通过比特分享来实现本次要介绍的比特串比较。
- 在介绍比特比较之前先简单介绍一下比特或
- 比特异或的实现方法较为简单,利用之前介绍过的
下Shamir共享机制的加法就能实现 - 而比特或则无法直接通过Shamir共享机制的加法或者乘法实现。
- 比特异或的实现方法较为简单,利用之前介绍过的

注意之前介绍过,在算数电路上实现乘法和加法即可实现任意函数,而在布尔电路上实现异或和或即可实现任意函数。安全多方计算就是为了在保护隐私信息下共同计算目标函数,如果把比特或通过使用加法和乘法的函数表示,那么即可通过加法和乘法实现或门的功能。

上图有误:应该是异或和或可以实现任意函数
思考一下与的特点,当多个比特相或时,其中只要有一个比特的值为1,或的结果就是1,因此可以统计出现1的个数,只要超过0次,最后的值就为1。
可以设计出这样一个函数:若函数有个
将
回忆一下,在Shamir秘密分享机制中,当秘密分享函数的输入为0时,得到0的就是秘密,因此需要避免输入为0。
让
设计函数来模拟异或,使用秘密分享的加法和乘法可以计算函数。
把
下面开始介绍比特比较:
具体要介绍的比较为小于,即如果比特串
比特比较:
假设有两个𝑙比特长的比特串
比如,比特串
比特串
比特串
再接着让
最后,计算
它所使用的原理是,如果比特串
将比特串
在上面的例子中,用橘色表示1,蓝色表示0,则

比特串

现在比特串
将上述比较方式中的

执行两个数的比较,转换为函数,函数计算通过秘密分享的方式实现!
作者:Hang Shao
出处:https://www.cnblogs.com/pam-sh/p/17179097.html
版权:本作品采用「知识共享」许可协议进行许可。
声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2020-03-04 C 命令行参数
2020-03-04 递归和迭代
2020-03-04 C 简答题
2020-03-04 面试问题汇总
2020-03-04 2018 C笔试题