zoukankan      html  css  js  c++  java
  • 安全计算初探

    为什么要选择安全计算?

    安全计算的作用就是让人们在保护数据隐私完成计算任务。在数据爆炸的今天,在网络用户毫无隐私地赤裸裸地暴露在网络服务提供者面前的今天,在个人隐私在网上被当成商品买卖的今天,在国家立法保护数据隐私的今天,在用户隐私意识觉醒的今天,人们对于隐私保护的强烈需求必将带来下一波技术浪潮。好了,这一节就说这么多。

    什么是安全计算?

    安全计算对绝大多数人来说是一个陌生的领域,即使对于计算机科班出身的人来说也未必准确知道安全计算是干嘛的。所以在开始之前,我想有必要解释一下什么是安全计算。安全计算,中文全称为安全多方计算,英文全称为Secure Multi-party Computation,缩写为SMC,指的是在保护数据安全的前提下实现多方计算。

    那什么是多方计算呢?其实就是其字面意思:多个参与者将各自的数据凑在一起,并在这个大数据集上进行一定的计算,并得到最后的计算结果。形式化的描述就是:假定有 n 个参与方 P_1, P_2, dots, P_n ,他们各自拥有自己的数据集 a_1, a_2, dots, a_n 。那么多方计算的目的就是得到某个函数 f 的输出,该函数的输入就是上面的 a_i 们,即 f(a_1, a_2, dots, a_n) 。举个简单的例子:假定五道口某工科学校想统计该校男生的恋爱经历分布情况,那 a_i 取值就是0(母胎单)或1(被甩过)。在这种情况下f就是简单的求和,即 f(a_1, a_2, dots, a_n) = sum_{i}a_i 。

    那什么是保护数据安全的多方计算呢?当然就是保护各个参与方所拥有数据的安全啦(好吧是不是有点废话)。试想要实现上面说的安全计算,最简单的方法是什么?当然是找一台服务器,大家把数据都传到那台服务器上,然后直接在那台服务器上进行计算,而且数据是明文放在服务器上的,所以服务器的操作者可以随意蹂躏那份数据,想算什么函数就算什么函数。但这种简单的方法有一个很严重的问题,那就是操作服务器的人能知道每个参与者的确切数据。在上面的例子中,就是服务器操作者可方便得知每个五道口男子技工学校的男生到底是母胎单还是被甩过,要是这种信息泄露出去这以后还怎么见人啊?!有人说,匿名调查行不行?网上填表行不行?但问题是调查问卷也得有人收啊,网上填表也能通过ip知道你是谁啊,这种方法其实一点都不安全。

    安全计算解决的就是这个问题。有了安全计算,大家都不用把确切数据告诉别人(或曰:真实数据从未离开过自己),最后仍然能得到联合计算的结果。在我们的例子中大家不需要告诉别人自己的感情经历就能让学校得到统计结果。

    安全计算的用途

    那安全计算到底有什么用呢?上面举的只是一个很简单的例子,实际生活中的需求肯定比这个复杂得多,包括模型训练和大规模统计等等。可以说,凡是一个计算任务需要用到来自多个参与者的数据,但各个参与者又不想(或不被允许)交换或公开数据,那安全计算就适用于这样的计算任务。

    比如,某机构组织了一场拍卖且有多个参与方报价,但大家都不想在自己未中标的情况下让别人知道自己出价多少,也就是说,除了最后的中标者需要让卖方知道自己的出价,其他人都不想透露自己的出价。安全多方计算就适用于此场景。

    又如,北京市多家医院都有艾滋病人的数据,现在我们想根据艾滋病人的各项信息训练一个模型,预测一个未确诊的艾滋病人真的患上艾滋病的概率。但各家医院艾滋病人数据不一定能随意交换,更不能泄露给公众,因此这些医院可以使用安全多方计算训练模型。

    再如,一家借贷公司A想预测贷款给一个试图借贷的客户的风险,但A公司只知道该客户的很简单的信息(如姓名、性别和年龄等)以及在自家借贷的历史,一些很关键的信息(如社保、健康状况等)却不为A公司所知。同时另一家政府机构B知道这些信息,但这些信息按规定是保密的。这时候双方就可以在不交换原始数据的情况下直接用预测模型预测风险。

    但无论多复杂的需求,其实都能拆解成一个个子需求。比如本节第一个例子中的竞价问题在安全计算当中其实就是比较问题;第二个例子中的模型训练问题可以分解为一些基本操作,包括常见的线性操作(如加和乘)和非线性操作(如sigmod函数、relu函数)等;最后一个例子当中的数据连接问题也可以用保护隐私的集合求交方法解决。所以只要实现常见的基本操作,我们就能执行各种各样的安全计算任务了。

    不过是不是有了安全计算我们就能高枕无忧呢?是不是以后我们所有的个人信息都可以藏起来不让别人知道还不影响社会的正常运行呢?事实并非如此,至少基于目前的技术来说离数据完全安全隐私毫不泄露的乌托邦还有不少距离。在后续文章中我会陆续介绍不同的安全计算方法,到时候大家能发现,现在的安全计算之所以尚未广泛应用,除了很多人不知有安全计算这一技术之外,还有一个很大的问题是以目前的技术,安全计算的效率、准确性和可扩展性都存在这样那样的问题。当然我们不可因噎废食,正如人工智能有今日之繁荣很大程度上得益于昔日人工智能科学家们的坚持,对于安全计算这种未来技术,我们也应抱定此种态度。至少安全计算解决日常生活中一些简单的问题还是不成问题的。社会在发展,需求在变化,技术在进步,现在也是时候让安全计算技术出现在世人面前了。

  • 相关阅读:
    第十九天:类和对象
    第十五天:模块
    十四天:匿名函数
    十四天作业
    第十三天:迭代器、递归
    十二天:闭包和装饰器
    一个炒鸡简单的购物车
    十一天
    第十天
    第十天作业
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312759.html
Copyright © 2011-2022 走看看