安全多方计算(SMPC)学习笔记

论文:《Secure Multiparty Computation》
作者:Yehuda Lindell

SMPC的基本概念

  • 概念:SMPC协议使多个参与方能够使用各自私有的输入,计算一个联合函数,并且他们除了计算结果什么也得不到。

  • SMPC协议的目标:使多个参与方以安全的方式,共同执行分布式的计算任务。

  • SMPC协议中的角色:

    1. 安全的参与方(honest parties)
    2. 攻陷的参与方(corrrupted parties)
  • SMPC的两种场景:

    1. 理想环境(ideal)
    2. 真实环境(real)
  • SMPC协议的重要需求特性:

    1. 隐私性 privacy
    2. 正确性 correctness
    3. 输入独立性 independence of inputs
    4. 输出可达性 guaranteed output delivery
    5. 公平性 fairness
  • SMPC模型的其他关注点

    • 敌手(Adversarial power)的模型——被动/主动攻击?
      • 允许敌对的行为(Allowed adversarial behaviour)——与敌手的类型(3种)有关
        • 半诚实敌手(Semi-honest adversaries)
        • 恶意敌手(Malicious adversaries)
        • 秘密敌手(Covert adversaries)
      • 腐化策略(Corruption strategy)——关注参与方何时/如何被腐化?
        • 静态腐化(Corruption strategy)
        • 适应性腐化(Adaptive corruption model)
        • 主动腐化(Proactive security model)
    • 模块化顺序和并发组合(Modular sequential and concurrent composition)

      考虑MPC协议与其他协议同时运行时的安全性

  • SMPC协议中明确的含义

    1. The ideal model and using MPC in practice
    2. Any inputs are allowed
    3. MPC secures the process, but not the output
  • SMPC的可行性

    理论上,任何分布式的计算任务都存在安全的多方协议

    1. 当攻陷的参与方的数量少于参与方总数的1/3时:
      安全的多方协议能够对任意功能的函数,做到公平性及输出可达。这在同步点对点网络和认证信道下,是计算安全的;如果信道同时是秘密的,则也是信息论安全的。
    2. 当攻陷的参与方的数量少于参与方总数的1/2时:
      安全的多方协议能够对任意功能的函数,做到公平性及输出可达。这在参与方具备接入广播信道能力的条件下,是计算安全的。
    3. 当攻陷的参与方的数量大于等于参与方总数的1/2时:
      安全的多方协议能够做到公平性及输出可达。

SMPC的相关技术

秘密分享技术

  • Shamir Secret Sharing
    秘密共享方案解决了销售商希望在n个参与方之间共享秘密s的问题,这样t+1或更多参与方的任何子集都可以重构秘密,但t或更少的参与方的子集不能学习关于秘密的任何东西。
    称之为 (t+1)-out-of-n-threshold secret-sharing scheme

Honest-Majority MPC with Secret Sharing

Private Set Intersection

Threshold Cryptography

Dishonest-Majority MPC

Efficient and Practical MPC

掷硬币协议(Coin-tossing Protocol)

在这里插入图片描述

当然没问题!下面是10个关于Java IO的面试题及其解答: 1. 什么是Java IO? Java IO (Input/Output)是Java编程语言中用于处理输入和输出的API。它提供了读取和写入数据的方式,包括文件、网络连接和其他输入/输出。 2. Java IO中的是什么意思? 是一种操作数据的方式,它将数据从源传输到目标。在Java IO中,可以是输入(用于读取数据)或输出(用于写入数据)。 3. Java IO中的字节和字符有何区别? 字节(Byte Stream)操作字节数据,而字符(Character Stream)操作字符数据。字节适用于处理二进制数据(如图像或音频文件),而字符适用于处理文本数据。 4. 如何使用Java IO从文件中读取数据? 可以使用FileInputStream类来从文件中读取数据。首先创建一个FileInputStream对象,然后使用read()方法读取数据,并使用close()方法关闭。 5. 如何使用Java IO将数据写入文件? 可以使用FileOutputStream类来将数据写入文件。首先创建一个FileOutputStream对象,然后使用write()方法写入数据,并使用close()方法关闭。 6. 什么是缓冲?为什么要使用它? 缓冲(Buffered Stream)是一种性能优化的,它使用缓冲区来减少对底层资源(如磁盘或网络)的访问次数,从而提高读写效率。 7. 如何使用缓冲读取文件? 可以使用BufferedReader类来读取文件。首先创建一个FileReader对象,然后将其传递给BufferedReader构造函数。接下来,使用readLine()方法逐行读取文件内容。 8. 如何使用缓冲写入文件? 可以使用BufferedWriter类来写入文件。首先创建一个FileWriter对象,然后将其传递给BufferedWriter构造函数。接下来,使用write()方法写入数据,最后使用flush()方法刷新缓冲区。 9. 什么是序列化?如何实现Java对象的序列化? 序列化是将对象转换为字节的过程,以便可以将其存储在文件中或通过网络传输。要实现Java对象的序列化,需要实现Serializable接口,并定义一个特殊的serialVersionUID字段。 10. 如何使用Java IO进行网络编程? 可以使用Socket类和ServerSocket类来实现基于TCP/IP的网络编程。Socket类用于创建客户端套接字,ServerSocket类用于创建服务器套接字。通过这些类,可以在网络上发送和接收数据。 希望以上面试题及其解答对你有所帮助!如果你还有其他问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值