内容来自“光大科技-基于FATE的可验证秘密分享算法详解及应用场景分享”

理论

基于Shamir的秘密共享方案,通过多项式插值实现。

加入可验证功能,即发送多项式系数的模数给对方作为承诺,对方通过分享值和承诺去进行验证!

















秘密共享

以下内容转载自“秘密共享—隐私计算和区块链共识中的榫卯”并加入一些自己的笔记。

什么是秘密共享?

秘密共享(Secret Sharing,SS)是1979年由Shamir和Blakey提出的,并在此之后40多年秘密共享被广泛认识和深入的研究。

秘密共享著名的(t,n)阈值方案如图1所示:



图1秘密分享的结构

秘密分享分为:分享和重构两部分:

设秘密\(s\)被分成\(n\)个部分,每一部分被称为一个子秘密并由一个持有者持有,并且大于等于\(t\)个参与者所持有的子秘密可以重构(Reconstruction)秘密\(s\),而少于\(t\)个参与者所持有的子秘密无法重构秘密并且无法获得秘密\(s\)的任何信息。

实现方式

秘密共享方案的三种实现技术:

  • 基于超平面几何的秘密共享,包括Blakley方案和Brickell方案
  • 基于插值多项式的秘密共享,包括经典的Shamir阈值秘密共享方案
  • Mignotte,Asmuth & Bloom提出的基于中国剩余定理的秘密共享

基于中国剩余定理的秘密共享是在环上的运算,而Blakley & Brickell的超平面几何秘密共享方案和Shamir阈值秘密共享方案是在有限域上的运算,所以基于中国剩余定理的秘密共享和其他两个秘密共享的理论基础不尽一样。

Blakley和Brickell的超平面几何方案

来自【Blakley, G.R. Safeguarding cryptographic keys (PDF). in 1979 International Workshop on Managing Requirements Knowledge-1979】

1、Blakley的超平面几何分享

Blakley通过多维欧几里得空间来构造阈值秘密共享机制。任何\(t\)非平行\(t-1\)维超几何平面在一个t维空间中交于一点,秘密通过编码在坐标中完成秘密共享。如图3所示的三维欧几里得空间中的三个平面交于一点,秘密可以嵌入到交点的某一个坐标中。



图2 秘密分发的2维超几何平面

Blakley方案的秘密分发和秘密重构过程如下:

(1)秘密分发

构造\(n\)个\(t\)维空间中的\(t-1\)维超几何平面分发给\(n\)个参与者,其中\(n>=t\);图2是一个3维空间中的2维平面生成,一个秘密拥有者Dealer通过空间中的一个已知点\(P\)(秘密\(s\)是\(P\)的一个坐标值)的条件下生成任意多个过该点的平面。

(2)秘密重构

n个参与者中的t个参与者可以重构秘密s。如图3:任意3个参与者即可实现对共享点(包含秘密s)的重构,即三个非平行平面的交点



图3 三维欧几里得空间中的秘密重构

在秘密共享方案中,信息率是度量秘密共享方案安全性和效率的一个重要指标。所谓秘密共享的信息率可以简单理解为秘密的信息规模与每个子秘密的信息规模的比率。

Brickell的向量方法(矢量方法)相比于Blakley超平面几何的方法能够有效提高信息率。

2、Brickell的向量分享

Brickell的秘密共享方案采用向量方法,一个秘密拥有者Dealer把秘密\(s\)嵌入到一个向量中,再通过一个矩阵把秘密共享为\(n\)个子秘密分发给\(n\)个参与者,具体方法如下:

(1)秘密分发

选择秘密\(s\)和随机向量\((y2,y3, …… ,yt)\), 生成一个\(n*t\)矩阵\(M\),\(M\)有\(n\)行,每行记为\(Mi\),任意\(t\)个行向量都是线性无关的。秘密份额为\((s1,s2,……,sn)\),每个份额是行向量\(Mi\)和列向量\((s,y2,y3, …… ,yt)\)的乘积。即\(si = Mi* (s,y2,y3, …… ,yt)\)

(2)秘密重构



其中\(M\)是一个公开参数,每行对应于一个参与者的子秘密\(si\),任意\(t\)个参与者对应矩阵\(M\)的\(t\)个行向量,这\(t\)个向量组成一个\(t*t\)的方阵,根据前面的要求任意\(t\)个行向量线性无关所以此方阵满秩,所以可以有效的求解到\((ω1,ω2,……,ωt)\)使得:



也就是任意\(t\)个\(M\)矩阵的行向量可以张成\((1,0,……,0)\)然后通过如下计算可以重构\(s\):

Shamir的阈值秘密共享方案

来自【Shamir, A., how to share a secret. 1979】

Shamir秘密共享是目前应用最为广泛的阈值秘密共享技术,Shamir的方案的秘密分发和秘密重构过程如下:

(1)秘密分发

Dealer要共享一个秘密\(s\),分给\(n\)个参与者,其中任意\(t\)个参与者可以重构秘密\(s\),寻找一个\(t-1\)次多项式:



其中\(a_0=s\),Dealer为每一个参与者任意选择非0的\(xi\)计算\(si=f(xi)\),把\(si\)作为子秘密发送给参与者\(i\)。

(2)秘密重构

任何大于等于\(t\)个参与者通过其子秘密\(si\)和\(xi\)通过拉格朗日插值定理可以恢复上面多项式\(f(x)\),并且令\(x=0\)实现秘密\(s\)的重构。

进一步对shamir秘密分享过程进行分析,可以发现在秘密分享阶段的计算:



把以上的多项式用线性方程组的视角打开来看,是一个范德蒙德矩阵和一个列向量\((a0,a1……,at-1)\)乘积,其中范德蒙德矩阵和Brickell方案中的矩阵M是对应的。

因此,Shamir秘密共享是Blakley & Brickell方案中的特例,正因为范德蒙德矩阵的特殊性,线性无关性(\(xi\)不相等的任意\(t\)阶方阵都是满秩的)和构造简单,所以大多数方案应用Shamir秘密共享,如果需要把Shamir秘密秘密共享应用到一般模式可以考虑把范德蒙德矩阵用一般矩阵替代。

基于中国剩余定理的秘密共享

什么是中国剩余定理(CRT)?

物不知数问题:

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

CRT:



使用CRT解“物不知数问题”:

基于CRT的秘密共享:

举例:

可验证的秘密共享

在秘密共享中,为了解决参与者想验证Dealer是否欺骗自己以及Dealer如何证明自己没有欺骗参与者的问题,提出了可验证的秘密共享(Verifiable Secret Sharing,VSS),Feldman VSS 是一种基于Shamir秘密共享构造的可验证秘密共享方案。

(1)秘密分发

Dealer要共享一个秘密\(s\),分给\(n\)个参与者,其中任意\(t\)个参与者可以重构秘密\(s\),寻找一个\(t-1\)次多项式,

其中\(a_0=s\),Dearler为每一个参与者任意选择非0的\(xi\)计算\(si=f(xi)\)为\(i\)的子秘密发送给参与者\(i\).同时,Dealer计算\(A_j=g^{a_j}\),其中\(j=0,1,2……,t-1\)并公开这些参数。

(2)秘密验证

参与者收到秘密\(si\)后验证\(si\)的有效性,即通过验证以下等式是否成立:



其中\(A_j=g^{a_j}\) .

补充

分布式可验证秘密共享

在以上所有的方案中Dealer是一个知道秘密的实体。Joint Feldman VSS方案既能实现上述的可验证的秘密共享又能去掉Dealer,即一种无可信第三方的可验证秘密共享方案(Distributed Verifiable Secret Sharing,DVSS)

具体过程如下:

(1)秘密分发

每一个参与者Pi选择要共享的秘密\(si=a_0\)并随机选择其他参数生成\(t-1\)次多项式:

公开参数\(A_{ik}\)并公布,对每一参与者\(P_j\)生成秘密\(si\)的子秘密\(s_{ij}=f_i(x_j)\),将\(s_{ij}\)发送给参与者\(P_j\).

(2)秘密验证

每一个参与者可以验证其他参与者发送给自己的秘密是否有效,并把所有验证通过的参与者记为集合\(Q\);

所有参与者把秘密分享验证通过集合\(Q\)内的子秘密进行加运算就得到该参与者的子秘密\(si\).

问题:如何验证秘密有效?

联邦学习的应用

这里用到Paillier加法同态性怪怪的。

在区块链共识和隐私保护中的应用

被称为革命性的第三代加密货币的Cardano(ADA)的共识算法Ouroboros和致力于利用区块链打造一款具备无限扩容能力的自治分布式云计算网络项目Dfinity中的共识算法都不约而同的选择了分布式可验证的秘密共享技术。在信任环境、分布式结构上,区块链的共识节点和分布式可验证秘密的参与者都恰分的对应,这样分布式可验证秘密共享的特征在区块链共识中得到充分的展现,能恰到好处的解决区块链共识算法的吞吐率和资源浪费的问题。

在日趋严格的隐私保护政策下,各种隐私保护算法被提出,其中联邦学习和共享学习最为突出,其内部的安全层都有采用了秘密共享技术实现隐私保护的技术方案。在联邦学习中,基于秘密共享的逻辑回归模型中利用了秘密共享的加法同态性,数据拥有者将秘密共享给多方,在秘密共享的场景下,将明文的计算转换为子秘密的计算,实现了隐私保护,蚂蚁金服的共享学习框架中也采用秘密共享技术作为隐私保护实现的技术之一。

参考

1、Shamir密钥分享算法简析

2、基于中国剩余定理的秘密共享

基于FATE的可验证秘密分享算法详解及应用场景分享:学习的更多相关文章

  1. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

  2. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  3. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  4. [转] KMP算法详解

    转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的K ...

  5. 【转】AC算法详解

    原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...

  6. KMP算法详解(转自中学生OI写的。。ORZ!)

    KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...

  7. Tarjan算法详解

    Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...

  8. 安全体系(二)——RSA算法详解

    本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 ...

  9. 安全体系(三)——SHA1算法详解

    本文主要讲述使用SHA1算法计算信息摘要的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 安全体系(二)——RSA算法详解 为保 ...

  10. 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

随机推荐

  1. 连接数据库报错的异常可以用mysqli_report来捕获

    有时候数据库密码改了或者数据库删了,就会有一个mysqli的链接报错,是因为直接使用了类似代码 $connection = new mysqli('127.0.0.1', 'test_user', ' ...

  2. json编码格式化美化

    有时候你想存储一个json到文件中,然后让别人调用或者读取或者作为临时存储,诸如此类. 但是php json_encode后数据是压缩的没有格式化,导致读起来有点费劲. 所以你可以这样(php 5.4 ...

  3. 零基础入门gRPC:从 0 实现一个Hello World

    在之前讲解 Nacos 注册中心的过程中,我曾简要提到过 gRPC,主要是因为 Nacos 的最新版已经采用了 gRPC 作为其核心通信协议.这一变化带来了显著的性能优化,尤其在心跳检测.健康检查等接 ...

  4. VUE懒加载的table前端搜索

    // 前端搜索 fliterData() { const search = this.search if (search) { this.blist = this.list.filter(item = ...

  5. Golang基础库之net/http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现. HTTP协议 超文本传输协 ...

  6. nginx相关服务实践

    1. 实现客户端IP地址获取接口 普通版本 Nginx 的配置文件中提供了一个变量 $remote_addr 用来获取用户访问本实例时的 IP 地址,我们只要将这个变量的值返回给用户就行了(没错,就是 ...

  7. docker构建supervisor镜像

    1 介绍 记录使用docker 构建包含 supervior 的镜像, supervisor: 是一个管理和监控进程的程序,可以方便的通过配置文件来管理我们的任务脚本 将supervisor构建到系统 ...

  8. uni-app 坑

    1.fixed定位 在H5中,tabbar,顶部导航栏,系统状态栏(手机信号,电量显示等)包含在内容区,H5在定位时,需要算上这些高度(如果页面中存在这个元素的话) 解决办法:使用条件编译,针对不同的 ...

  9. VLC web(http)控制 (3) 播放控制

    VLC  web(http) 播放控制: 1.如果已经在打开视频 播放和暂停都是:http://127.0.0.1:8080/requests/status.xml?command=pl_pause ...

  10. MeteoInfo-Java解析与绘图教程(六)

    MeteoInfo-Java解析与绘图教程(六) 这一节主要说的是我们取到自动站的数据,如何通过插值,转化成格点数据,并绘制图层 //从数据库查询cimiss数据 List<Map<Str ...