学习《现代密码学——基于安全多方计算协议的研究》 第三章 (秘密共享部分)

本文主要是介绍学习《现代密码学——基于安全多方计算协议的研究》 第三章 (秘密共享部分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

第3章 密码学基础

3.1 秘密共享

【定义3-1】(秘密共享)

【定义3-2】((t-n)门限秘密共享)

3.1.1 研究进展

1.可验证秘密共享

2.权重秘密共享

        3.主动秘密共享

4.理性秘密共享

5.动态秘密共享

6.多秘密共享

7.量子秘密共享

3.1.2 经典协议

【协议3-1】 Shamir (t-n)门限秘密共享方案

个人写的一个例子:

好的,让我们通过一个简单的例子来解释 Shamir 秘密共享方案。


第3章 密码学基础


        某公司打算将一个包含重要商业机密的秘密信息告诉n个员工。但是,公司不希望任何一个员工单独获得秘密信息,它希望至少t个员工同时在场时才能获知秘密信息。那么,这个公司该如何实现秘密的分发呢?
        这是秘密共享的典型应用场景,秘密共享是安全多方计算常用的密码学原语之一。如果把安全多方计算看作高楼,那么秘密共享、茫然传输、同态加密技术、零知识证明技术、比特承诺等密码学原语就是这座高楼的地基。和很多其他领域相同,安全多方计算的地基一直在不断地发展和完善。本章将为读者展示设计安全多方计算协议时常用的密码学原语。

3.1 秘密共享


        现代密码学体制基于Kerchhoff假设,即一个秘密系统的安全性与它所使用的密钥的安全性相关,与它所采用的加解密算法无关。对称加密系统的安全性取决于其所使用密钥的安全性;公钥加密系统的安全性取决于其所使用私钥的安全性。因此,为了保证秘密系统的安全性,密钥的管理极为重要。在传统的密钥管理方案中,为了防止密钥丢失,往往将密钥在多处进行备份。但是,随着密钥备份数量的增加,密钥被泄露的概率也不断增加。为了解决上面的问题,1979年Shamir和Blakley分别提出了秘密共享的概念和解决方案。一个完整的秘密共享算法由子秘密生成算法、秘密分发算法和秘密恢复算法三部分组成。

【定义3-1】(秘密共享)


        秘密发布者D根据访问结构Γ将秘密在参与者P中分享,每个参与者得到的秘密份额被称为子秘密。访问结构Γ定义了参与者的授权子集,由任意授权子集中的参与者贡献出他们持有的子秘密可以恢复被共享的秘密,但是非授权子集中的参与者不能获得关于秘密的任何有用信息。


【定义3-2】((t-n)门限秘密共享)


        一个秘密共享算法被称为是(t−n)门限秘密共享算法,如果它满足:秘密分发阶段秘密发布者 D 将秘密s∈GF(q)在 n 个参与者{p1,p2 ,…,pn }之间共享;秘密恢复阶段,至少需要t个参与者贡献出他们的子秘密才能恢复出秘密。


3.1.1 研究进展


        秘密共享不论在理论研究还是在实际应用方面,都具有非常重要的价值。因此,秘密共享的概念被提出后,国内外众多学者纷纷加入到秘密共享的研究行列中。图3-1显示了秘密共享算法的最新研究方向和理论基础。

1.可验证秘密共享


        在秘密共享过程中,如果秘密发布者或参与者存在欺诈行为,则秘密的安全性可能得不到应有的保障。下面看两个小故事。
        故事1:假设Alice是秘密分发者,Bob是秘密接收者之一。由于一些私人恩怨,Alice给Bob发送了一个假的子秘密。因此,如果Bob参与秘密恢复,则会因为Bob手中的假子秘密导致无法恢复出真实的秘密。


        故事2:假设Bob是秘密接收者之一。在秘密恢复阶段,由于个人原因Bob提供了虚假的子秘密,这样可能导致大家都无法得到真实的秘密。
        上面两个故事分别讲述了秘密分发者和秘密恢复者即参与者存在的欺诈行为。为了防止这些类欺诈行为得逞,可验证秘密共享(Verifiable Secret Sharing,VSS)方案被提出。很多学者通过在普适秘密共享方案的基础上增加验证模块实现可验证秘密共享算法。可验证秘密共享分为交互式和非交互式两类。交互式方案中实现的验证算法需要参与者之间或参与者和分发者之间进行信息交互,而非交互式方案则不需要交互信息,因此多数交互式方案的效率低于非交互式方案。


2.权重秘密共享


传统秘密共享方案中,参与者的地位是平等的。但在现实生活中,参与者之间可能存在着职位或者权利大小的区别。例如,有一个秘密需要在公司的高层之间共享,职位越高的参与者恢复秘密的能

力应该越强。当恢复秘密的时候,总经理和一名部门经理可以恢复出秘密,但是如果总经理不在场,可能需要三名部门经理才可以恢复出秘密。由此产生了权重秘密共享方案。第一个权重秘密共享方案是由Morillo等人基于图的分解结构提出的。


        3.主动秘密共享


        现实生活中有一类机密性高且有效期长的秘密需要被共享。此时如果应用传统的秘密共享方案,攻击者有足够的时间逐个攻破各参与者的子秘密,从而最终恢复出秘密信息。这种攻击方式被称为移动敌手攻击。Ostrovsky等人提出了使用主动秘密共享方案来抵抗移动敌手攻击。
主动秘密共享方案中假设在每一个子秘密生存周期内,移动敌手至多可以控制一定数量的参与者。在(t-n)门限秘密共享方案中,移动敌手只有在一个子秘密生存周期内攻破 t个参与者才能恢复出秘密信息。因此,通过设置合理的门限参数和子秘密生存周期,可以保证秘密在较长一段时间内的安全性。
        根据更新子秘密的主体角色的不同,主动秘密共享方案分为两类。第一类方案中,子秘密由参与者更新。由于此时参与者之间需要进行大量的交互,因此这类方案往往效率较低。第二类方案中,子秘密由秘密分发者更新后分发给参与者,此类方案无须参与者之间进行信息交互,因此其效率相对第一类方案较高,但是要求秘密分发者定时在线。


4.理性秘密共享


        传统秘密共享方案中,参与者的诚实度在协议开始之前就确定了。现实生活中的参与者往往是理性的,他们会根据实际情况作出对自己有利的选择,并非完全按照协议执行或者完全按照攻击者的意志执行。Halpern和Teague将博弈论和秘密共享结合,提出了解决这个实际应用问题的理性秘密共享方案。理性秘密共享方案将协议分为若干“轮”,参与者会根据每一“轮”中所获得信息量的大小决定是否继续参与到协议中。


5.动态秘密共享


        随着时间的推移,秘密共享方案中可能会产生一些变量。考虑如下三个应用场景。
        场景 1:子秘密被分发之后,如果有新的参与者加入或有参与者退出,秘密分发者需要重新为所有的参与者分发子秘密。这样不仅效率较低,而且浪费资源。
        场景 2:在秘密共享方案实施初期,由于参与者之间互不信任,因此需要设置一个较高的门限参数。但是,随着时间的推移,参与者之间变得互相信任,这时可以降低门限值从而提高协议执行效率。
        场景3:在秘密共享方案实施初期互相信任的参与者,在秘密共享期间由于其他原因,开始互相猜疑,因此需要提高门限值以增强系统的安全性。

        上述三个应用场景中,场景1要求参与者在秘密共享过程中可以动态加入或者退出,场景2和场景3要求门限值可变。动态秘密共享就是为了满足上述需求而提出的。动态秘密共享方案按照可动态变化对象的不同,分为参与者可变的秘密共享方案和门限值可变的动态秘密共享方案。动态秘密共享方案也是近几年的研究热点。


6.多秘密共享


        假设某公司有m个商业秘密,每个商业秘密都包含用于商业运营的重要信息。该公司雇佣了n个员工,现在公司需要将m个秘密在n个员工之间共享,但是它不希望任意一个员工单独获取秘密。该公司规定,每一个秘密都需要根据一个特殊的访问结构在n个员工中分享。
该公司可以执行多次秘密共享过程来实现这些秘密的分享。但是如果这样,秘密分发机构需要执行大量子秘密分发操作,同时每个员工需要保存多个子秘密。也就是说,这种方案存在子秘密的管理烦琐和执行效率低等问题。
        为了实现一次共享多个秘密,多秘密共享(Multi-Secret Sharing,MSS)方案被提出。1993年,Blundo等基于信息论提出了一个多秘密共享方案。此后,大量多秘密共享方案被提出。7.4节对多秘密共享进行了详细地介绍,感兴趣的读者可以直接阅读该章节。


7.量子秘密共享


        量子秘密共享是密码学与量子力学结合的产物。量子秘密共享的概念最早是由Hillery、Buzek和Berthiaume在1999年基于三粒子纠缠态提出来的。量子秘密共享中最为经典的三个方案分别是基于三粒子纠缠态的HBB方案、基于非纠缠态的GG方案及基于量子态的方案。
        随着计算机计算能力的不断提高,基于计算复杂度的传统密码算法的安全性越来越受到考验,而量子密码学恰恰能解决这个问题,因此成为了近几年来的研究热点。

3.1.2 经典协议
 

【协议3-1】 Shamir (t-n)门限秘密共享方案


        Shamir (t-n)门限秘密共享方案是基于Lagrange插值定理设计的。
子秘密生成阶段:
步骤1:秘密发布者 D 随机选取n个不同的非零元素a1 ,a2 ,…,an ∈GF(q)(q为素数且q﹥n),并构造t−1次多项式 f(x)=at−1 xt−1 +at−2 xt−2 +…a1 x1 +s。其中,s是需要共享的秘密信息。步骤2:D 随机的从有限域GF(q)中选取n个不同的非零元素x1 ,x2 ,…,xn ,并计算yi = f(xi )。秘密分发阶段:
        D通过安全信道将(xi ,yi )分别发送给Pi(i=1,2,…,n)。
秘密恢复阶段:

        t个参与者(不妨设P1 ,P2 ,…,Pt )利用下面公式可恢复出秘密s。

个人写的一个例子:

好的,让我们通过一个简单的例子来解释 Shamir 秘密共享方案。

        

        假设密文为1017(S=1017),发布者将这个秘密分为6个,只有当至少3(k=3)个人合作时才能恢复出完整的秘密。

      

                                多项式:f(x) = a_0 + a_1x + a_2x^2

        上面多项是的:a_0为S=1017    a_1  和 a_2是发布者生成的随机数。(其实这里的多项式是和k有关的,假设k=5,那么多项式就为f(x) = a_0 + a_1x + a_2x^2+a_3x^3+a_4x^4,同时也要发布者生成的随机数k-1个。)

        假设发布者生成的随机数135和56.(a_0 =1017,a_1=135,a_2=56)

                                多项式为:f(x) = 1017 + 135x + 56x^2

因为发布者将这个秘密分为6个,也就是x_1=1,x_=2.....x_6=6    将x带入多项式

                        当:x_1=1

                                得:f(x) = 1017 + 135x + 56x^2

                                               =1017+135*1+56*1^2

                                                =1208   

                                          即:D_1{1,1208}

                        

                                当:x_2=2

                                得:f(x) = 1017 + 135x + 56x^2

                                               =1017+270+224

                                                =1511   

                                          即:D_2{2,1511}

                                当:x_3=3

                                        得:f(x) = 1017 + 135x + 56x^2

                                               =1017+405+504

                                                =1926   

                                          即:D_3{3,1926}

                                    当:x_4=4

                                        得:f(x) = 1017 + 135x + 56x^2

                                               =1017+540+896

                                                =2453   

                                          即:D_4{4,2453}

                                        当:x_5=5

                                        得:f(x) = 1017 + 135x + 56x^2

                                               =1017+675+1400

                                                =3092   

                                          即:D_5{5,3092}          

                                       当:x_6=6

                                        得:f(x) = 1017 + 135x + 56x^2

                                               =1017+810+2016

                                                =3843   

                                          即:D_6{6,3843}

        多项式构造的6个点分别为D_1{1,1208},D_2{2,1511},D_3{3,1926},D_4{4,2453},D_5{5,3092} ,D_6{6,3843},这就是发布者生成的子密钥。

        假设解密的参与者为1,2,3

        即:x_1,y_1={1,1208},x_2,y_2={2,1511},x_3,y_3={3,1926}

通过拉格朗日多项式计算:

                        

                =1208·l_1(x)+1511·l_2(x)+1926·l_3(x)

                密文是x=0时的多项的解

                即:x=0

                       =1208*3+1511*-3+1926*1

                        =3624+(-4533)+1926

                        =1017

       本章节就分享到这里,后续继续分享第三章节。

       关于Shamir秘密共享算法的部分时,我发现书中对该算法的讲解并不十分深入,导致了我对这一概念的理解仅停留在表面层面。因此,我通过查阅其他资源来进一步学习,但仍然觉得了解不够全面。如果有朋友发现我表述的不准确或不清晰之处,希望能一起探讨讨论,共同提高。

        

        本文所包含的内容系《现代密码学——基于安全多方计算协议的研究》一书。这些内容的目的是为了学术交流和个人学习,并且在此过程中尊重原作者的知识产权。特此对作者的辛勤工作表示感谢,并感谢他们为密码学领域做出的贡献。如有侵权行为,请及时联系我进行删除或修改。感谢您对知识产权的尊重与支持。

这篇关于学习《现代密码学——基于安全多方计算协议的研究》 第三章 (秘密共享部分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973151

相关文章

Linux命令学习之二

每日一结 ​               命令置换:是将一个命令的输出作为另一个命令的参数,命令格式如下: commond1 `command2` 其中,命令command2的输出将作为命令command1的参数,需要注意的是, 命令置换的单引号为ESC键下方的 ` 其意思就是说,先运行单引号内的命令,再将其命令作为

Linux命令学习之一

每日一结                                                                                        注:当用户不确定一个软件包的类型时, 可使用file命令查看文件类型

javaweb学习-jstl-c:forEach中 varStatus的属性简介

varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性。就拿varStatus=“status”来说,事实上定义了一个status名的对象作为varStatus的绑定值。该绑定值也就是status封装了当前遍历的状态,比如,可以从该对象上查看是遍历到了第几个元素:${status.count} 我们常会用c标签来遍历需要的数据,为了方便使用,varSta

java学习—null和isEmpty 区别

String fly1 = new String(); String fly2 = ""; String fly3 = null; 解释如下: 此时fly1是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) 此时fly2是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串) 此时fly3是未分配内存空间,无值,是一种无值(

javaWeb学习—getRequestURI,getRequestURL等的学习

我使用的是SpringMVC框架,做一个小的例子,说明一下对这个内容的学习和理解! 1:我的项目名称为 dufyun_SpringMVC  2:我测试的地址为 ${pageContext.servletContext.contextPath}/testName 3;后台获取的代码为: @RequestMapping(value="/testName",method=Req

maven学习系列——(五)maven聚合与继承

这一篇学习和整理maven的聚合和继承! 并用具体的项目讲解说明! 参考: http://www.cnblogs.com/xdp-gacl/p/4242221.html

maven学习系列——(四)maven仓库

这一篇学习和整理maven仓库的一些知识点 ! 参考: http://blog.csdn.net/wanghantong/article/details/36427433

maven学习系列——(三)maven项目的创建

这一篇大概会整理和总结到有如下知识点: (1):maven的使用入门一些命令 (2):用命令创建项目 (3):使用IDE集成工具创建项目–Eclipse和idea 3:使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目 新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:create -DgroupId=c

maven学习系列——(二)maven的安装和一些基本的配置

这一篇主要会总结maven在window上的安装,以及Eclipse安装maven插件。 会整理和贴出具体的安装步骤等! 配置大概会整理一下,方便自己查看和使用! Maven 的使用在Windows上使用比较多,一般的开发都是在Windows上;Linux上的使用相对比较少,不过会总结Windows和Linux系统两种安装方式。 首先会介绍在Windows和Eclipse安装Maven,L

maven学习系列——(一)maven简介

这个系列学习maven,主要是看maven实战和其他网站上整理出自己一些知识点,方便自己以后查找和使用! 这个系列的我先根据自己在公司经常使用到的一些知识点进行整理,后期在做完善! 计划:要在2017 年之前学习和整理完成! 1:什么 Maven ? - Maven意为“知识的积累”、“专家”或者“内行”的意思,maven是一个跨平台的项目管理工具,是 Apache的一个成功的开源