如何写好Simulation证明(二): 半诚实模型下MPC的定义
3. Secure Computation – Simulation for Semi-honest Adversaries
我们在这里考虑的模型是 static semi-honest 敌手下的两方安全计算. 这样的敌手能够在协议开始之前决定控制某一方, 并且需要按照协议的描述执行.
需要注意的是, 这是一个非常弱的假设. 如果敌手没有按照协议流程执行, 那就会打破这个协议, 比如以一种不随机的方式挑选随机带.
通常我们在设计MPC协议的时候, 设计半诚实敌手模型下的安全的协议是第一步. 设计这样的安全协议比设计恶意敌手模型下的安全协议要容易得多, 因为我们明确知道敌手会干嘛(以协议要求的方式运行).
3.1 半诚实敌手的安全性定义
两方安全计算. 假设两个人的输入分别为
模拟保护的隐私. 我们如何形式化地定义这里头的安全性?
这个形式化的定义意味着: 参与者不能从协议的执行过程获得任何其他的信息
有一个点需要我们注意, 由于参与者是半诚实的, 这保证了他们使用他们的 input tape 上面的字作为输入. 这很重要, 因为这保证了输出跟敌手是无关的. 举个例子, 如果输入是
安全性定义. 在给出安全性定义之前, 我们先给出下面的符号:
- 协议
以 为输入, 安全参数为 , 那么我们用 表示第 个人的view. 具体来说 . 其中 , 表示这个参与者的随机带, 表示消息. - 类似于view. 以
为输入, 安全参数为 , 那么我们用 表示第 个人的输出. 另外整个协议的输出表示为 .
正式的安全性定义:
其中
Remarks. 我们介绍一下这个定义里simulation的逻辑. 比如在
确定性函数
其实很容易理解, 我们关注去掉的几项.
在确定性函数中, 由于没有随机性, 协议的输出一定严格等于函数的输出, 所以可以去掉.
(这里可能之后再补充细节一点.)
半诚实敌手模型中的triviality. 在这个模型下, 很多密码学原语是很好达到的. 因为他会按照协议的规定去做. 比如零知识是trivial的, 在这个协议中, Prover就给Verifier说: this is true. Verifier也会接受, 当然是不泄露任何信息的, 因为他啥也没说. 但是这个协议也是对的, 因为这是半诚实敌手模型. 再比如承诺方案. 承诺阶段, Commiter啥也不发, 打开阶段, Commiter把那个值发给Receiver. 显然是Perfect hiding的. 啥也不发当然1bit也不会泄露. 另外也是Perfect binding的, 因为他是半诚实的, 我们要求他打开的时候就会发那个特定的值. Coin tossing协议也是如此. 但是! 我们会看到, 即使在这种模型下, 两方一起计算简单的函数是non-trivial的.
附属信息. 在定义恶意敌手时, 我们需要会考虑 auxiliary input. 但其实定义中有一些附属信息, 比如我们考虑 non-uniform 的区分器, 这个区分器就是带附属信息的. 但是执行协议的敌手不需要附属信息, 因为我们考虑的是半诚实模型, 所以他们会按照协议的规定执行.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】