【Joy of Cryptography 读书笔记】Chapter 3 秘密共享(Secret Sharing)

本文主要是介绍【Joy of Cryptography 读书笔记】Chapter 3 秘密共享(Secret Sharing),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Chapter 3 秘密共享(Secret Sharing)

本章节介绍的是一项密码学技术:秘密共享。本章节首先介绍秘密共享的基本概念,然后介绍其基于多项式插值的Shamir实现。

文章目录

    • Chapter 3 秘密共享(Secret Sharing)
      • 一、基本概念
        • 1、形式化定义
        • 2、正确性
        • 3、安全性
      • 二、最简单的实现
      • 三、多项式插值
        • 1、实数上的多项式插值公式
        • 2、扩展:模p
        • 3、多项式的基数(#)
      • 四、Shamir秘密共享
      • 五*、视觉秘密共享

一、基本概念

1、形式化定义

定义3.1 一个( t , n t, n t,n)门限的秘密共享(t-out-of-n threshold secret-sharing scheme,TSSS)由以下算法构成:

  • 秘密分发算法 S h a r e Share Share:一个随机算法,输入 m ∈ M m\in M mM,输出一系列秘密 s = ( s 1 , . . . s n ) s=(s_1,...s_n) s=(s1,...sn)
  • 秘密重建算法 R e c o n s t r u c t Reconstruct Reconstruct:输入任意 t t t个秘密,就能重建输出 m m m

在秘密共享中,记 U ⊆ { 1 , . . . , n } U\subseteq\{1,...,n\} U{1,...,n}是一个用户子集, { s i ∣ i ∈ U } \{s_i|i\in U\} {siiU}就是一组秘密分发。如果 ∣ U ∣ ≥ t |U|\ge t Ut,那么这组用户是授权的,也就是能够重建明文 m m m;否则是未授权的,不能知道明文的任何信息(部分信息也不可以)。

2、正确性

定义3.2 一个( t , n t, n t,n)门限的秘密共享是正确的,当且仅当对于所有授权的用户子集 U ⊆ { 1 , . . . , n } , ∣ U ∣ ≥ t U\subseteq\{1,...,n\},|U|\ge t U{1,...,n}Ut,以及对应的所有秘密分发 s ← S h a r e ( m ) s\leftarrow Share(m) sShare(m),都有 R e c o n s t r u c t ( { s i ∣ i ∈ U } ) = m Reconstruct(\{s_i|i\in U\})=m Reconstruct({siiU})=m

3、安全性

根据感性理解,秘密共享的安全性要求:对于未授权的用户将无法知道任何信息。下面给出形式化定义。

定义3.3 一个秘密共享算法 Σ \Sigma Σ是安全的,当且仅当 L t s s s − L Σ ≡ L t s s s − R Σ L_{tsss-L}^\Sigma \equiv L_{tsss-R}^\Sigma LtsssLΣLtsssRΣ,其中库的定义如下:

注意:是同一组用户子集 U i U_i Ui

对定义3.3的理解:安全性的定义基本是按照第二章的“left vs right”。这里安全性更多的是关注未授权的情况下,无论明文是什么,秘密分发的结果的概率分布相同,那就没有泄露信息。至于授权的情况,就没有泄露一说,因此处理为err(不是说不执行算法,而是在安全性上不关心这种情况)。

二、最简单的实现

这里将介绍一个简单的(2,2)门限秘密共享(2-out-of-2 TSSS)的实现。它是两方的秘密共享,也是最简单的一个场景。具体算法如下:

它的正确性显而易见(因为上述两个算法和一次性密码本的加密、解密是相同的)。下面主要证明它的安全性(定义3.3),即证明 L t s s s − L Σ ≡ L t s s s − R Σ L_{tsss-L}^\Sigma \equiv L_{tsss-R}^\Sigma LtsssLΣLtsssRΣ,这里也是使用了Hybrid方法:

第1步是对 ∣ U ∣ < 2 |U|<2 U<2的情况进行展开,可以分为三种情况,然后思考如何转换为 L t s s s − R Σ L_{tsss-R}^\Sigma LtsssRΣ。然后首先看第一种情况,可以看到分发的秘密只有 s 1 s_1 s1 s 2 s_2 s2与分发结果无关,因此在第2步中可以将 m L m_L mL转换为 m R m_R mR。然后针对第二种情况,可以发现这个秘密的构建和一次性密码本的加密算法是一样的,因此相当于调用一次性密码本的算法 L o s t − L O T P L_{ost-L}^{OTP} LostLOTP,这就是第3步的转换。在第4步,由于在第一章已经证明过一次性密码本的安全性,即 L o s t − L O T P ≡ L o s t − R O T P L_{ost-L}^{OTP}\equiv L_{ost-R}^{OTP} LostLOTPLostROTP,因此此处进行替换。第5步进行内联,发现这三种情况都已经是转化为使用 m R m_R mR了,因此第6步得到了 L t s s s − R Σ L_{tsss-R}^\Sigma LtsssRΣ

可以看到,上述证明中使用到了一次性密码本的安全性。其实还有一个更一般性的结论:对于已经证明具有一次性安全性(定义2.6 one-time secrecy)的算法 Σ \Sigma Σ,那么如下的(2,2)门限秘密共享算法也是安全的:

三、多项式插值

在介绍秘密共享的进一步具体实现前,先介绍多项式插值的原理

1、实数上的多项式插值公式

定理3.1 对于一组确定的点集 { ( x 1 , y 1 ) , . . . , ( x d + 1 , y d + 1 ) } ⊆ R 2 \{(x_1,y_1), ...,(x_{d+1},y_{d+1})\}\subseteq R^2 {(x1,y1),...,(xd+1,yd+1)}R2(其中 x i x_i xi均不相同),确定了唯一一个(至多) d d d次多项式 f f f,其系数都是实数且满足所有的点都在多项式上(即 y i = f ( x i ) , i = 1 , . . . , d + 1 y_i=f(x_i),i=1,...,d+1 yi=f(xi),i=1,...,d+1)。

**证明:**考虑如下的(至多) d d d次多项式(实际上它被称为拉格朗日多项式)
l j ( x ) = ( x − x 1 ) . . . ( x − x j − 1 ) ( x − x j + 1 ) . . . ( x − x d + 1 ) ( x j − x 1 ) . . . ( x j − x j − 1 ) ( x j − x j + 1 ) . . . ( x j − x d + 1 ) l_j(x)=\frac{(x-x_1)...(x-x_{j-1})(x-x_{j+1})...(x-x_{d+1})}{(x_j-x_1)...(x_j-x_{j-1})(x_j-x_{j+1})...(x_j-x_{d+1})} lj(x)=(xjx1)...(xjxj1)(xjxj+1)...(xjxd+1)(xx1)...(xxj1)(xxj+1)...(xxd+1)
可以知道它的取值为
l j ( x i ) = { 1 i = j 0 i ≠ j l_j(x_i)=\left\{ \begin{array}{rcl} 1 & i=j \\ 0 & i \neq j \end{array} \right. lj(xi)={10i=ji=j
因此,考虑如下多项式:
f ( x ) = y 1 l 1 ( x ) + y 2 l 2 ( x ) + . . . + y d + 1 l d + 1 ( x ) f(x)=y_1l_1(x)+y_2l_2(x)+...+y_{d+1}l_{d+1}(x) f(x)=y1l1(x)+y2l2(x)+...+yd+1ld+1(x)
可知 f ( x ) f(x) f(x)是一个(至多) d d d次多项式,而且对于每一个 x i x_i xi,都只有 l i ( x i ) = 1 l_i(x_i)=1 li(xi)=1,其余为 0 0 0,因此满足 f ( x i ) = y i f(x_i)=y_i f(xi)=yi。故 f ( x ) f(x) f(x)便是满足定理要求的一个多项式。

根据这个 f ( x ) f(x) f(x)的定义,可以知道求解 f ( 0 ) = ∑ i = 1 d + 1 y i ∏ j = 1 , . . . d + 1 , j ≠ i x j x j − x i f(0)=\sum_{i=1}^{d+1}y_i\prod_{j=1,...d+1,j\neq i}\frac{x_j}{x_j-x_i} f(0)=i=1d+1yij=1,...d+1,j=ixjxixj

下面证明 f ( x ) f(x) f(x)的唯一性。假设还有一个 f ′ ( x ) f'(x) f(x),构造 g ( x ) = f ( x ) − f ′ ( x ) g(x)=f(x)-f'(x) g(x)=f(x)f(x),可知 g ( x ) g(x) g(x)也是一个(至多) d d d次多项式,而且满足 g ( x i ) = 0 , i = 1 , . . . , d + 1 g(x_i)=0,i=1,...,d+1 g(xi)=0,i=1,...,d+1。这说明 g ( x ) g(x) g(x) d + 1 d+1 d+1个实根,但是最高次项至多 d d d次,因此 g ( x ) = 0 g(x)=0 g(x)=0,即 f ( x ) = f ′ ( x ) f(x)=f'(x) f(x)=f(x),故证明了唯一性。

2、扩展:模p

定理3.2 对于质数 p p p 和一组确定的点集 { ( x 1 , y 1 ) , . . . , ( x d + 1 , y d + 1 ) } ⊆ Z p 2 \{(x_1,y_1), ...,(x_{d+1},y_{d+1})\}\subseteq Z_p^2 {(x1,y1),...,(xd+1,yd+1)}Zp2(其中 x i x_i xi均不相同, Z p Z_p Zp是指小于 p p p的非负整数),确定了唯一一个(至多) d d d次多项式 f f f,其系数来自 Z p Z_p Zp且满足所有的点模 p p p后都在多项式上(即 y i ≡ p f ( x i ) , i = 1 , . . . , d + 1 y_i\equiv_pf(x_i),i=1,...,d+1 yipf(xi),i=1,...,d+1)。

这个定理是对定理3.1的一个扩展,也就是模 p p p后依然成立。它的证明和定理3.1的证明几乎是一致的,只不过需要说明加、减、乘、除法模 p p p后能保证同余。加、减、乘法的结果是显然的;至于除法,在 p p p是质数的前提下是成立的,不再做过多的证明。

3、多项式的基数(#)

定理3.3 对于质数 p p p 和一组确定的点集 { ( x 1 , y 1 ) , . . . , ( x k , y k ) } ⊆ Z p 2 \{(x_1,y_1), ...,(x_{k},y_{k})\}\subseteq Z_p^2 {(x1,y1),...,(xk,yk)}Zp2(其中 x i x_i xi均不相同),如果 d d d满足 k ≤ d k\le d kd p > d p>d p>d,那么满足系数来自 Z p Z_p Zp且穿过所有的点模 p p p后的值(即 y i ≡ p f ( x i ) , i = 1 , . . . , k y_i\equiv_pf(x_i),i=1,...,k yipf(xi),i=1,...,k)的多项式的个数是 p d + 1 − k p^{d+1-k} pd+1k

**证明:**采用数学归纳法进行证明。首先如果 k = d + 1 k=d+1 k=d+1,那么根据定理3.2可以知道只有唯一一个多项式, p d + 1 − k = p 0 = 1 p^{d+1-k}=p^0=1 pd+1k=p0=1,成立。

对于 k ≤ d k\le d kd,假设大于 k k k的情况下定理都成立(递归假设)。那么对于 k k k而言,取一个额外的点 x ∗ ∈ Z p , x ∗ ≠ x i , i = 1 , . . . , k x^*\in Z_p,x^*\neq x_i,i = 1,...,k xZp,x=xi,i=1,...,k。那么对应的 y ∗ y^* y共有 ∣ Z p ∣ |Z_p| Zp种取值。因此计算这 k k k个点确定的多项式的个数,相当于计算这 k k k个点再加上 ( x ∗ , y ∗ ) (x^*,y^*) (x,y)所确定的多项式的个数(因为都是 x ∗ x^* x,仅 y ∗ y^* y不同,因此每一组 ( x ∗ , y ∗ ) (x^*,y^*) (x,y)确定的多项式必不相同):
k 个点确定的多项式数量 = 等价转化 ∑ y ∗ ∈ Z p k 个点和 ( x ∗ , y ∗ ) 确定的多项式数量 = 递归假设 ∑ y ∗ ∈ Z p p d + 1 − ( k + 1 ) = ∣ Z p ∣ = p p ⋅ p d + 1 − ( k + 1 ) = p d + 1 − k \begin{aligned} k个点确定的多项式数量 \overset{等价转化}=& \sum_{y^* \in Z_p}k个点和(x^*,y^*)确定的多项式数量\\ \overset{递归假设}=& \sum_{y^* \in Z_p}p^{d+1-(k+1)}\\ \overset{|Z_p|=p}=& p\cdot p^{d+1-(k+1)}= p^{d+1-k}\\ \end{aligned} k个点确定的多项式数量=等价转化=递归假设=Zp=pyZpk个点和(x,y)确定的多项式数量yZppd+1(k+1)ppd+1(k+1)=pd+1k
由此得证。

四、Shamir秘密共享

基于多项式插值,Shamir实现了一种秘密共享的算法(SSS),具体算法如下:

在算法中,将秘密生成一个 t − 1 t-1 t1次多项式,明文作为多项式的常数项。然后将一个点作为秘密分发给用户。根据多项式插值,至少 t t t个点就可以求解出该多项式,并计算 f ( 0 ) f(0) f(0)获取 m m m;少于 t t t个点则无法确定唯一的多项式,因此无法获取信息——这正实现了秘密共享。该算法的正确性可以由多项式插值定理保证。

下面证明该算法的安全性(定义3.3)。首先需要证明一个引理:如果未授权,那么每个用户获取的秘密(也就是 y i y_i yi)相当于随机(等概率)取点。其形式化表示如下。

引理:对于一个质数 p p p,如下定义的两个库等价,即 L s h a m i r − r e a l ≡ L s h a m i r − r a n d L_{shamir-real}\equiv L_{shamir-rand} LshamirrealLshamirrand

引理证明:对于给定的 m ∈ Z p , U ( ∣ U ∣ < t ) , y i m\in Z_p,U(|U|<t),y_i mZp,U(U<t),yi,我们需要证明两个库给出对应结果的概率是相同的。

对于 L s h a m i r − r e a l L_{shamir-real} Lshamirreal,根据定理3.3可知,随机生成的不同多项式一共有 p t − 1 p^{t-1} pt1个(因为只要求 f ( 0 ) = m f(0)=m f(0)=m,相当于只确定了一个点)。而通过 U U U重建所得的多项式,如果它也恰好满足 f ( 0 ) = m f(0)=m f(0)=m(称为“好多项式”),将有 p t − ∣ U ∣ − 1 p^{t-|U|-1} ptU1个(知道 ∣ U ∣ + 1 |U|+1 U+1个点)。因此如果泄露秘密,那么随机生成的多项式应当是“好多项式”,其概率为 p t − ∣ U ∣ − 1 p t − 1 = p − ∣ U ∣ \frac{p^{t-|U|-1}}{p^{t-1}}=p^{-|U|} pt1ptU1=pU

对于随机取点的 L s h a m i r − r a n d L_{shamir-rand} Lshamirrand,每一个用户的 y i y_i yi都有 p p p种取值,故秘密 s s s一共有 p ∣ U ∣ p^{|U|} pU种。而对于一个多项式而言,不同的 x x x的取值必然只有一个,因此恰好取到这一种的概率为 p − ∣ U ∣ p^{-|U|} pU

因此两个库等价。

有了引理,接下来就可以使用Hybrid方法证明Shamir算法的安全性,也就是证明 L t s s s − L S ≡ L t s s s − R S L_{tsss-L}^S\equiv L_{tsss-R}^S LtsssLSLtsssRS。证明如下:

第1步时将其拆分为调用库 L s h a m i r − r e a l L_{shamir-real} Lshamirreal的形式,然后第2步根据引理将其等价替换为 L s h a m i r − r a n d L_{shamir-rand} Lshamirrand。由于 L s h a m i r − r a n d L_{shamir-rand} Lshamirrand中没有用到输入的 m L m_L mL,因此在第3步将其换为 m R m_R mR依然成立。第4步在此利用引理换回 L s h a m i r − r e a l L_{shamir-real} Lshamirreal,内联后得到 L t s s s − R S L_{tsss-R}^S LtsssRS

五*、视觉秘密共享

对于一些视觉信息(比如图片),也可以有秘密共享的方案。下面给出的是一个简单秘密分发方案,它是对每一个1x1的像素块进行秘密分发,分为两个2x2的像素块。因此一个图片最终会秘密分发为两个图片,而这两个图片的叠加就可以还原原始图片。

这篇关于【Joy of Cryptography 读书笔记】Chapter 3 秘密共享(Secret Sharing)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

# VMware 共享文件

VMware tools快速安装 VMware 提供了 open-vm-tools,这是 VMware 官方推荐的开源工具包,通常不需要手动安装 VMware Tools,因为大多数 Linux 发行版(包括 Ubuntu、CentOS 等)都包含了 open-vm-tools,并且已经优化以提供与 VMware 环境的兼容性和功能支持。 建议按照以下步骤安装 open-vm-tools 而不

未来工作趋势:零工小程序在共享经济中的作用

经济在不断发展的同时,科技也在飞速发展。零工经济作为一种新兴的工作模式,正在全球范围内迅速崛起。特别是在中国,随着数字经济的蓬勃发展和共享经济模式的深入推广,零工小程序在促进就业、提升资源利用效率方面显示出了巨大的潜力和价值。 一、零工经济的定义及现状 零工经济是指通过临时性、自由职业或项目制的工作形式,利用互联网平台快速匹配供需双方的新型经济模式。这种模式打破了传统全职工作的界限,为劳动

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C++】如何用C++创建对象,理解作用域、堆栈、内存分配-CSDN博客 中我们知道,你的对象是创建在栈上还是在堆上,最大的区别就是对象的作用域不一样。所以在C++中,一旦程序进入另外一个作用域,那其他作用域的对象就自动销毁了。这种机制有好有坏。我们可以利用这个机制,比如可以自动化我们的代码,像智能指针、作用域锁(scoped_lock)等都是利用了这种机制。

《C++标准库》读书笔记/第一天(C++新特性(1))

C++11新特性(1) 以auto完成类型自动推导 auto i=42; //以auto声明的变量,其类型会根据其初值被自动推倒出来,因此一定需要一个初始化操作; static auto a=0.19;//可以用额外限定符修饰 vector<string> v;  auto pos=v.begin();//如果类型很长或类型表达式复杂 auto很有用; auto l=[] (int

OpenStack:Glance共享与上传、Nova操作选项解释、Cinder操作技巧

目录 Glance member task Nova lock shelve rescue Cinder manage local-attach transfer backup-export 总结 原作者:int32bit,参考内容 从2013年开始折腾OpenStack也有好几年的时间了。在使用过程中,我发现有很多很有用的操作,但是却很少被提及。这里我暂不直接

基于springboot+vue+uniapp的“共享书角”图书借还管理系统小程序

开发语言:Java框架:springboot+uniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系统展示 后台登录界面 管理员功能界面 出借者管理 图书信息管理 图书归还管理 出租收入管理

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:局部注册和全局注册。 本篇文章参考黑马程序员 一、组件创建 ①定义 Vue 组件是一种具有特定功能的 Vue 实

读书笔记(一):双脑记

谁又知道年轻人那反复无常的大脑有着怎样的运行机制?尽管他们的大脑已被荷尔蒙折腾地七荤八素;却偶尔还会有灵感跻身夹缝之间; 层级化:每时每刻,人类都在进行抽象化,也就是说,从客观事实中发展出更具普遍意义的理论和知识。利用这种方法,我们得以不断地开发出新的更为简洁的描述层级,方便我们那容量有限的大脑加以处理。分层的概念几乎可以应用于任何复杂系统,甚至包括我们的社交世界,也即是人们的个人生