Data security.隐私保护-秘密分享


Data security.隐私保护-秘密分享


一、问题提出

1.问题描述

例如假设一家公司对所有支票进行数字签名(参见RSA)。如果给每个高管一份公司秘密签名密钥的副本,那么这个系统会非常方便,但是很容易被误用。如果需要公司所有高管的配合才能签署每张支票,那么这个系统是安全的,但是不方便。有时候需要进行折中,比如解决方案要求每次授权支票至少需要三个高管联合进行签名,用(3,n)的门限阈值方案实现。那么一名不忠的高管必须至少有两个同伙,才能在该计划中伪造公司的签名进行支票的获取。

所以核心操作就是把一个key拆开,然后分散开来
可以得到两种保密模式:

  • 严格的模式: 需要所有的拥有部分key的参与方同时参加,才能得到最终正确的结果
  • 阈值的模式: 不需要所有的拥有部分key的参与方同时参加,但是需要一定的门限阈值,实现(k,N)的门限阈值同时表决(N个参与方中选k个来使),进而得到最终正确的结果

而问题的关键是:

  • 割裂性: 拥有部分key的参与方仅靠自身无法知道最终正确的结果,必须联合多个参与方
  • 决定性: 对于严格的模式,必须所有参与方联合,才具有决定性;对于阈值的模式,需要至少约定数量的参与方联合,才具有决定性

二、简介

上述问题正是适合于隐私计算的基础技术:Secret Sharing(秘密分享) 。大概就是说有一个秘密,如一个整数 D,不希望泄露。同时有 N 个人,如果每个人都知道 这个秘密D,那么这个D就不是秘密,也就不安全了。但是如果把D进行切分,得到N个分片,随机的分给N个人,要用到的时候需要N个人的部分信息聚合到一起,才能解密D 的值,那么是安全的。但是这种方案比较脆弱,如果一个人不在了,这个秘密就真成了无法探知的秘密了。所以为了健壮性。设计了一种新的模式,在这种模式下,不需要所有的人一起解密,只需要一定的人数K(1 < K < N)就可以解密
因此,秘密分享可分为两类:
①严格的秘密分享:需要所有人一起解密
②阈值的秘密分享:不需要所有人,只需要满足一定人数,就可以解密
基于秘密分享的架构如下,各个分片的去向可以是云服务厂商的云服务。
在这里插入图片描述

三、严格的秘密分享

3.1 Additive Secret Sharing 加法秘密共享

在这里插入图片描述
计算逻辑:

  • 首先,用户A和B作为数据的持有方,用户C需要知道A和B数字的和,但是A和B不想将各自持有的数告诉C
  • 然后,选择n个分片Server(可以是第三方的云服务),并且A和B各自将持有的x和y随机切分成n份,分给n个Server,x分为[[x]]1、[[x]]2、…、[[x]]n,y分为[[y]]1、[[y]]2、…、[[y]]n
  • 然后,用户C向各个Server请求和计算算子,各个分片分别求和,得到n个Server有[[z]]1=[[x]]1+[[y]]1、[[z]]2=[[x]]2+[[y]]2…、[[z]]n=[[x]]n+[[y]]n
  • 然后,用户C收集n个分片参与者的[[z]]1、[[z]]2、…、[[z]]n,并且结算求和
  • 最终,用户C获得了用户A和用户B的两个数字的和,但是用户A和用户B的数据并没有泄露,用户C并不知道这两个值

3.2 Mulplication On Two Additive Shares 使用添加两个随机数的乘法运算

在这里插入图片描述
计算逻辑:

  • 首先,用户A和B作为数据的持有方,用户C需要知道用户A和用户B的数字的乘积,但是A和B不想告知C各自持有的值。
  • 然后,选择n个分片Server(可以是第三方的云服务),并且A和B各自将持有的x和y随机切分成n份,分给n个Server,x分为[[x]]1、[[x]]2、…、[[x]]n,y分为[[y]]1、[[y]]2、…、[[y]]n
  • 然后,需要一个随机添加的两个数字a和b,以及ab的乘积c,这个可以由一个第三方的组织提供(仅仅提供数字,用户A、B、C都不知晓。)
  • 然后,选择同样的n个分片Server(可以是第三方的云服务),将添加的数a,b,c,随机切分成n份,分给n个Server,a划分为为[[a]]1、[[a]]2、…、[[a]]n,b划分为[[b]]1、[[b]]2、…、[[b]]n,c划分为[[c]]1、[[c]]2、…、[[c]]n
  • 然后,对于公式z=xy,进行转换,z=xy=(x-a+a)(y-b+b)=(e+a)(f+b)=ef+eb+fa+ab,其中e=x-a、f=y-b
  • 然后,用户C通过参与者分片Server,联合计算出e和f,此时e和f就属于公开的数字了。各个分片计算[[e]]i=[[x]]i-[[a]]i,然后用户C进行求和,得到e;各个分片计算[[f]]i=[[y]]i-[[b]]i,然后用户C进行求和,得到f
  • 最后,对于最终的求解:z=xy=ef+eb+fa+ab,需要计算公开值ef,两个公开的数字乘积可直接由C求解;eb+fa,一个公开的数字乘以一个秘密数字,需要每个分片乘以公开数字,即每个参与者计算[[b]]ie+[[a]]if,然后由用户C进行汇总求和,即可获得解密数据;ab,也就是c的值,由于c的值通过秘密分享的方式分配给各个参与者分片,只需要进行加法秘密分享即可获取,即各个分片获取[[c]]i,然后由用户C进行汇总求和,即可得到解密数据
    最后,C将上述各个结果累加,就获得了A和B的数的乘积,而没有泄露A和B的具体值。

有人会问了,为啥不直接把x,y直接分片,然后分片组合相乘再求和呢?我觉得是因为如果分片数量为n的话,那么就需要n2个Server,开销比较大,但是添加两个随机数去辅助就好多了。

3.3 复杂运算

理论上基于加法和乘法我们是可以计算出其他所有的运算的,包括指数 对数等计算。
在这里插入图片描述
在这里插入图片描述

四.阈值的秘密分享

4.1 分析

阈值的秘密分享的基本思路是,基于秘密分享的便携性与安全性的考量,如果有个n个秘密分片,我们只需要凑齐 k( 1 < K <n )个人,他们手中的信息拼凑起来,就可以获取秘密。
考虑下述问题:

  • 随机性:挑选的k个人,需要是随机挑选的k个人,不能是一个固定的选取
  • 必然性:随机选出的这k个人,必须能够将需要的数字进行解密

则想到线代所学,k个变量,需要k个方程可解,则可以想到把秘密和其他几个变量构成k个变量,然后由k个方程可解,这k个方程从哪里来?就是n个参与者都分到一个方程,然后抽出k个抽出来的

4.2 计算逻辑

秘密数字:D;
参与方:n个参与者,D1,D2,…,Dn
一个大的素数:p,p>max(D,n)
①首先,构造出n个方程式,构造公式 D i = q ( i ) = ∑ j = 0 j = k − 1 a j ∗ i j = D + a 1 ∗ i + . . . + a k − 1 ∗ i k − 1 D_i=q(i)=\sum_{j=0}^{j=k-1}a_j*i^j=D+a_1*i+...+a_{k-1}*i^{k-1} Di=q(i)=j=0j=k1ajij=D+a1i+...+ak1ik1,其中a0=D。
例如,k=3,n=10:
D1=q(1)=D+a1+a2,其中a0=D,
D2=q(2)=D+2a1+4a2,其中a0=D,
……
D10=q(10)=D+10a1+100a2,其中a0=D
②则,为了得到Di,我们还需确定a1~ak-1,然后分别计算得到Di,这些变量在[0,p)的范围内均匀分布中进行获取
③D1…Dn也可进行约束是大素数p的取模,但p更多的作用是控制a变量的选择,防止数据的过分膨胀(唯一解的问题,在构造的时候基本可以规避)
④最后,将这个n个方程划分给n个参与者。需要计算的时候,只需要将k个方程获取进行联合计算就可以计算出a也就是秘密D

4.3案例介绍

在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值