密码学基础(九) - 公钥加密中的高等概念
陷门置换构造加密方案
陷门置换(Trapdoor Permutation)是公钥加密体制中的一种抽象概念,
在一些结构中,参数生成算法Gen输出一些附加信息和I,从而实现的有效求逆。称这些附加信息为陷门(trapdoor),并将单向置换的族称为陷门置换的附加属性族。
陷门的形式化定义为:
一组多项式时间算法(Gen,Samp,f,Inv)如果满足以下条件则称其为陷门:
- 概率性的参数生成算法Gen:输入,输出(I,td)其中|I| n,I的每一个值定义了一个置换的定义域和值域,
- 用表示由Gen算法生成的结果,并且只输出I。则(,Samp,f)是一族单向置换
- 用表示的输出,则确定性的反向算法Inv,将td以及y 作为输入,然后输出x ,表示成x := 。则需要保证所有由Gen()生成的(I,td),有一个概率均匀的选择x ,有
也就是对陷门置换,如果未知陷门,则很难求的逆;如果已知陷门,则能够高效率的求的逆。
陷门置换构造的公钥加密方案:设=(Gen,f,Inv)是一族陷门置换,令hc为一个确定性的多项式时间算法,这个算法接收I以及x作为输入,然后输出一个比特,称hc为的硬核谓词,如果对于所有PPT上的算法A,存在一个可忽略函数negl满足
陷门置换的不对称性意味着任何一个知道与相关的陷门td的人而可以从中恢复出x,并由此从计算出
但是如果只给了一个I,对于一个概率均匀选择的x,很难从计算出
从任何一组陷门置换构造公钥加密方案:设=(Gen',f,Inv)是一族陷门置换,其硬核谓词为hc,则可以构造一个公钥加密方案如下:
- Gen:输入安全参数,运行Gen'()获得(I,td),输出公钥I,私钥td
- Enc:输入一个公钥I以及一条明文m {0,1},概率均匀的选择一个r ,r满足,输出密文c :=
- Dec:输入一个私钥td以及一条密文c,计算r:=,然后输出明文m :=
定理:如果是一族硬核谓词为hc的陷门置换,那么上面所构造的加密方案是CPA安全的
加密更长的明文:在前面的RSA-lsb中已经介绍过如何利用加密单比特明文的加密方案加密更长的明文
秘密共享以及门限加密
安全(交互)协议可能比基本的密码原语(例如,加密和签名方案)复杂得多。一方面是因为它们可能涉及多方交换几轮消息,另一方面是因为它们旨在实现更复杂的安全需求。
秘密共享
应用情景:一个发牌员持有一个秘密(比如核弹的发射密码),希望通过给与每个用于一点份额在用户集合之间共享这个秘密,任意t个用户都能通过将他们的份额组装起来从而恢复这个秘密,但是用户数量小于t则无法知道任何关于这个秘密的信息
上述的应用情景称为(t,N)门限秘密共享,而(t,N)门限秘密共享有有两种情况,,以及的情况:
-
的情况:
假设秘密信息- 发牌员概率均匀的选择,然后计算,则每个用户的份额就是
- 因为,当个用户都提供了自己的份额后能够恢复秘密信息
- 并且,当用户数量少于的时候,无法获得任何关于秘密的信息
-
的情况,与上面那种情况不同的是,在选择的时候需要满足一定的约束,并且显然效率是很低的。主要由Shamir秘密共享算法实现。
Shamir秘密共享方案:这个方案是基于一个有限多项式域设计的,其中满足秘密 并且,其原理主要是:给定个点,能够确定唯一的多项式,满足
即,给定中任意个不重复的点,,都有一个唯一的多项式满足
该方案的工作原理如下,设,没有重复并且不含零元素,这些信息是可以公开的:
- 共享:给定一个秘密,发牌员均匀随机的选择,然后定义一个多项式,每个用户的秘密份额为
- 恢复:个用户交出他们的份额然后利用计算出多项式多项式,则秘密为。而且显然,对于任何用户数量小于t的用户都无法计算出p,也就无法获取任何关于秘密s的信息
令,以及,秘密,则Shamir秘密共享算法:
构造多项式:随机选取整数,则
共享份额:,,,
恢复秘密:显然,任意两个点都能够恢复多项式,而秘密信息
可验证秘密共享
在秘密共享方案中存在着两种恶意行为,而可验证秘密共享(Verifiable Secret Sharing,VSS)用于抵抗这两种恶意行为
- 腐败的发牌员:给用户发放不一致的份额,这样会导致不同的用户组会恢复出不同的秘密
- 在恢复阶段中一个恶意的用户可能会提交一个假的份额,从而影响恢复过程
更加形式化的定义是,可验证秘密共享方案需要满足以下两个条件:如果用户集合中有t-1个腐败的用户,并且相互串通,甚至其中可能包括发牌员,则:
- 在共享阶段结束的时候,需要保证任何t个份额都能够会付出秘密s
- 如果发牌员是诚实的,那么秘密就是发牌员的密钥
当然上面的第一个条件是假设用户集合中的大多数( t个)用户是不腐败的,那么N应该满足N t+t-1 > 2(t-1)
可验证秘密共享方案:设H是一个由随机预言机构造的函数,假设由G()生成的可信任参数(G,q,g)是提前发表了的,其中q是一个素数,所以是一个域,并且所有用户都可以访问广播频道
- 共享阶段:
- 设将要分享的秘密为s,则发牌员概率均匀的选择一个,然后利用Shamir秘密共享方案共享,将发送给用户,此外,发牌员利用广播频道广播,以及“被掩盖的秘密”c := H() s
- 每个用户在收到了自己的份额后需要验证,如果不满足,则在广播频道上报错
- 如果有超过t-1个用户报错,则发牌员不合格,协议终止;否则,发牌员广播作为回应;如果广播出去的份额仍然无法通过验证,则这个发牌员是不合格的,协议终止;否则,用户将广播的作为自己的份额
- 恢复阶段:在恢复之前需要先进行验证,如果用户组中的用户不能通过验证,那么这个用户将被丢弃,而在这剩下的t个通过验证的用户中,可以恢复出,然后计算s:=cH()
电子选举
这种技术依赖于El-Gamal加密方案的一种变体的同态加密方案:给定公钥,如果要加密明文,则计算,概率均匀的选择一个,然后发送密文;如果要解密,想用标准的El-Gamal加密方案计算出M,然后计算
- 缺点:如果明文空间比较大,那么效率将会非常低;如果明文空间比较小,那么接收方可以使用穷举搜索高效的解密
- 优点:对于中的加法同态:
使用同态加密进行电子选举的基本方法是让每个投票者对其投票进行加密,从而获得一个密文。收集所有人的密钥,然后将所有的密文相乘,从而得到最终投票结构的密文,称为最终密文,然后将私钥发送到权威机构进行解密,从而获取投票的总和
然而存在着一个缺陷:权威机构必须是可信的,否则,其既可以(正确地)解密最终的密文,也可以不解密任何个别选民的密文而作弊。
解决的方法是同时委托多个机构,然后利用秘密共享将私钥分享给这些机构
不过仍然存在着一个缺陷:如果权威机构为了解密某个密文而恢复这个私钥,那么所有的机构都会知道这个私钥,那么他们可以按照自己选择解密任何密文。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)