基于随机数的密码学:当随机性失效时保持安全性
1 引言
一条古老的安全格言说,如果你把窗户开着,那么在门上装坚固的锁也没有意义。这里的锁是指现代公钥加密,其已被证明能够达到强大的IND‐CCA目标。而窗户则是指这些证明中所作的假设:每次加密时,加密者都能获得完美且全新的(与之前独立的)随机性。为了让加密在实践中兑现其理论上的承诺,我们必须关上这扇窗户。本文提出基于随机数的公钥加密作为实现这一目标的实用方法,并进一步发展了基于随机数的数字签名。
Randomness
随机性失效会导致密码学系统失效,这一点如今已众所周知,无需赘述。值得关注的新情况或许是问题正在加剧。让我们来解释一下。随机性失效有两个来源。第一个来源已经存在一段时间,并且不会消失,即漏洞。一个典型的例子是Debian Linux在2006年9月到2008年5月期间存在的漏洞,一名程序员从OpenSSL源代码中删除了几行代码,导致PRNG的种子仅包含15比特的熵。[1]HDWH[19]由于所谓的“故障RNG”,在相当一部分TLS和SSH服务器中发现了密码学漏洞。类似案例不胜枚举。第二个随机性失效的来源可能也已存在一段时间,但我们直到最近才意识到其严重性,这归因于大规模监控披露表明,颠覆是蓄意且有针对性地削弱随机性的行为。在2014年西南偏南(SXSW)会议上,斯诺登表示:“我们知道今天我们使用的加密算法是有效的⋯⋯受到攻击的是随机数生成器,而不是加密算法本身。” 其中最典型的例子是Dual EC,这是美国国家安全局设计并植入后门的随机数生成器,随后推动其成为标准并得到广泛应用。通过该后门实际破坏安全性的能力已在 [14]中得到证实。
公钥加密(PKE)安全性的基本定义,即IND‐CPA和IND‐CCA,在随机性不佳的情况下无法提供任何保证。已有大量研究工作提出了新的安全性定义以提供此类保证,并构建了满足这些定义的公钥加密方案。
避免因随机性不佳而导致漏洞的最简单方法是完全不使用随机性。确定性公钥加密(PKE)[3,6,12,17]然而仅在消息具有高最小熵时才能提供安全性。这限制了实用性(例如,我们可能希望加密投票,而投票具有低最小熵),并且尽管在不同背景下,CGPR [13]表明实际上“真实”数据的熵通常相当低。
对冲式公钥加密(PKE)[4,7,27]扩展了确定性公钥加密(PKE),以确保只要消息和随机性合在一起具有足够的最小熵,就能提供隐私保护。这是一个显著的优势,我们建议尽可能使用对冲式公钥加密(PKE)。但局限性依然存在。由于消息实际上通常并不具备熵[13],,且“随机性”可能完全可预测(这种情况既出现在Debian Linux漏洞中,也出现在Dual EC颠覆中),因此消息与随机性合在一起仍可能缺乏足够的熵,从而无法使对冲加密提供安全性。确定性公钥加密(PKE)和对冲式公钥加密(PKE)的另一个局限性在于,仅当消息不依赖于公钥时才能提供安全性。(这一第二个局限性可以部分解决,但需要付出一定代价[26]。)Yilek [32]定义并实现了针对随机性重置攻击的安全性,其中随机性本身是完美的,但对手可以强制其在不同的加密操作中重复使用。这在虚拟机重置的场景下是有用的,但应用范围并不广泛。PSS [24]提出了相关随机性攻击,其中加密是在某些初始均匀随机性的攻击者指定函数下进行的。然而,他们提供的负面结果表明,对于许多函数而言,无法实现安全性。
总之,所有这些概念都存在一些局限性,它们提供的实际好处尚不明确。最重要的是,这些概念都是在因漏洞导致 RNG 失效的旧有思维模式下设计的,当 RNG 被篡改时,它们可能会严重失效。而后者正是我们需要防范的新的现实。
Nonces
罗加威 [28,29]提出了基于随机数的对称密钥加密,其中加密算法是确定性的,以共享密钥、消息和一个称为随机数的量作为输入。只要随机数不重复,就能保证安全性。该概念随后由罗加威和史林普顿(RS)[30]加以强化。罗加威建议数据包序列号可充当随机数的角色。他提供的动机包括减少实现者的错误实现更强的安全性。我们建议随机数可以更广泛地使用,并且是抵御不良随机性的良好防御手段。我们深入追求的目标是基于随机数的公钥加密。
为此,我们首先注意到,将 [28–30] 中定义的基于随机数的对称密钥加密直接扩展到公钥环境是不可行的。这种扩展会使加密算法 E 变为确定性的,以加密密钥 ek、消息 m 和随机数 n 作为输入,输出密文 C= E(ek m, n)。隐私游戏会向对手提供一个预言机,该预言机接收消息 m0、 m1 和一个随机数 n(在 [28–30], 的定义中,随机数由对手选择,但不能重复)并返回 C= E (ek mb, n),其中 b 是由游戏随机选择的挑战位。安全性要求对手在猜测 b 时仅有很小的优势。但在公钥环境中,由于对手拥有加密密钥 ek 并可自行进行加密,因此这种安全性无法实现。于是,对手可以随意选择 m0、 m1、 n 查询其预言机,获得密文 C= E(ek mb, n),并自行计算 C0= E(ek m0, n)。若两者相等,则它知道挑战位 b 为 0,否则为 1。
我们定义一个基于随机数的公钥加密方案 NPE 如下。接收者像往常一样运行密钥生成算法 NPE.Kg 以获得加密密钥ek和解密密钥dk。与以往不同的是,发送者首先在本地运行一个seed generation算法 NPE.sKg 以获得一个 种子xk。加密算法 NPE.Enc 是 确定性的,除了常规的ek和消息 m外,还接受两个新输入:一个随机数 n和种子 xk,并返回密文NPE.Enc(ek,xk m, n)。解密过程保持不变,接收解密密钥dk和一个密文 C后返回一个消息。接收者无需知道该种子,且密钥与种子完全独立。发送者可以在多次加密中重复使用同一个种子,也可以在每次加密时生成一个新的种子,或介于两者之间的任何方式,而接收者对此将完全无感知。
安全性通过两个游戏及相应的条件来体现。基于随机数的隐私一(NBP1)要求,只要消息‐临时值对不重复,就应保持IND‐CCA隐私性。也就是说,安全性的失效唯一可能发生在对同一消息重复使用随机数的情况下。这是一个非常强的安全保证。但有一个前提,即该保证成立的条件是种子对对手保持私密。基于随机数的隐私二(NBP2)则考虑了对手可能攻破发送者系统并获取种子的情况。即使在此情况下,只要随机数对对手而言是不可预测的,NBP2仍能保证IND‐CCA隐私性。该形式化定义依赖于一个有状态的nonce generator NG,它接收攻击者指定输入 η 以生成下一个随机数,从而使随机数间接处于对手的控制之下。
在实际应用中,我们期望使用多种因素的组合作为随机数,例如当前时间 (不会重复)和之前的密文,同时也会使用系统随机数生成器中的随机性,因为对于NBP2而言,需要随机数不可预测性。(这与对称环境不同。)然而,正如我们现在所解释的,在随机性较差的情况下,所提供的安全性保证要比以前好得多。
直观上,我们的定义表达了以下含义。考虑两种情况:一种是预期的、理想的情况,即发送方种子保持私密。在这种情况下,无论随机性的质量如何,我们都能获得IND‐CCA隐私,唯一的要求是消息‐临时值对不重复。后者是一个较为宽松的条件,只要使用合理的随机数(例如直接使用日期和时间作为随机数),这种重复就极不可能发生。另一种情况是发送者的系统被泄露,种子被暴露。此时,我们实际上处于标准PKE的场景中,无法确定性地提供IND‐CCA。我们保证不会比标准PKE更差,即只要随机性(此处为随机数的一部分)良好,我们就能提供IND‐CCA。但事实上我们表现得更好,因为我们对随机数的要求仅仅是不可预测性。这意味着即使RNG的输出存在关联或结构,只要它们仍保持不可预测,我们就是安全的。
换言之,如果攻击者想要破坏隐私,仅破坏随机数生成器(RNG)是不够的。他们还必须侵入发送者的系统,找到种子并将其窃取。频繁更换种子(实际上无需任何成本)会使这一过程更加困难。这提高了攻击门槛。诚然,考虑到美国国家安全局(NSA)在恶意软件方面的能力,我们不应低估其渗透特定发送者系统的能力。但这种攻击必须针对每个发送者单独进行,从而使得大规模监控变得更加困难。
Hedged extractors and our scheme
单独实现 NBP1 或 NBP2 都很容易。我们可以通过在传统的(随机化的)IND‐CCA 公钥加密方案下进行加密来获得一个 NBP1 基于随机数的公钥加密方案,其中随机数由发送方种子作为密钥的伪随机函数作用于消息和随机数得到的结果设定,但没有理由认为该方案也具备 NBP2 安全性。我们也可以通过在传统的 IND‐CCA 公钥加密方案下进行加密来获得一个 NBP2 基于随机数的公钥加密方案,其中随机数由以种子为密钥的提取器作用于(消息和)随机数得到的结果设定,但没有理由认为该方案也具备 NBP1 安全性。为了同时实现这两个性质,我们引入并使用对冲提取器。
对冲提取器HE接收一个种子(也称为密钥)xk、一条消息 m和一个随机数 n, 并确定性地返回一个字符串 r= HE(xk,(m, n))。它具有两个性质:(1)它是一个伪随机函数,意味着如果xk是随机且保密的,则即使对于能够选择 m, n的对手来说,其输出看起来也是随机的;(2)它是一个提取器,意味着如果xk是随机但已知的,那么当(m, n)不可预测(即具有足够的最小熵)时, r看起来是随机的。同样,单独实现任一目标都是简单的,难点在于在同一构造中同时实现这两个目标。
我们给出了两种解决方案,一种在随机预言模型中,另一种在标准模型中。第一种方案简单且实用,很可能成为我们的实际选择,即直接将随机预言应用于xk,(m, n)。第二种方案通过异或操作将一个伪随机函数与一个强随机性提取器结合。随机预言模型下的方案提供了最优的安全性,而标准模型下的方案由于强随机性提取器本身的局限性(即它们仅保证对独立于种子的输入有效,且这些输入在已知先前输入的条件下仍保留最小熵)而导致安全性略低。
我们的基于随机数的公钥加密方案通过与孤立情况相同的范式定义,即在传统(随机化)IND‐CCA 公钥加密方案下进行加密,其中随机数由以发送方种子为密钥的对冲提取器作用于消息和随机数所得的结果确定。在假设传统方案满足 IND‐CCA 安全性以及对冲提取器安全性的前提下,该方案的 NBP1 和 NBP2 安全性均得以证明。
Discussion and pragmatics
我们可以将基于随机数的密码学视为将传统上密码学与系统随机数生成器之间的抽象边界向密码学一侧移动。这种观点认为,在存在劣质随机数生成器的情况下,更安全、更优的架构是让密码学承担尽可能多的安全保障责任,换句话说,尽可能减少对其环境的依赖。我们在此建议,仅要求环境产生具有相对较弱要求的随机数即可。这一观点在某些方面与旨在增强随机数生成器以抵御故障或颠覆的研究工作所代表的观点相反[16]。在实践中,这两种方法可以共存,它们的共同存在将提升安全性。
我们的基于随机数的加密方案简单且模块化,可将任意给定的传统IND‐CCA方案转化为NBP1+NBP2安全的基于随机数的方案。通过选择实用的对冲提取器(例如我们在随机预言模型中的设计),我们保留了初始PKE方案的效率特性。在我们的方案中,解密过程保持不变,解密器无需更改其软件,甚至无需知晓正在使用随机数。这些特性使得基于随机数的PKE更易于部署,成为对抗弱随机性的实用防御手段。
在上述讨论的旨在提高PKE对随机性失效抵抗能力的前期工作中,model 保持不变,即所考虑安全性的对象在语法上仍然是如[18]所述的经典公钥加密方案。基于随机数的加密是一种新模型(因为发送者拥有种子)和新语法(存在种子生成算法且加密算法不同)。正是这些变化,尤其是不仅仅是随机数,而是随机数与种子的结合,带来了根本性的改变,从而相较于前期工作提供了显著更强的对抗不良随机性的保障。
选择种子,如同选择密钥一样,确实需要(良好)随机性。这里的观点与上述所有前期工作一致,即静态与动态随机性使用之间存在差异。我们假设密钥生成时具有良好的随机性,因为可以为此投入努力。当前的密钥生成软件通常要求用户通过移动鼠标来生成随机比特。良好的种子生成也需要类似的投入,但预期种子会在一段时间内持续使用,因此这种操作并不频繁。这种机制是灵活的。如果由于系统重启导致种子丢失,或被泄露,用户可以选择投入精力重新选择一个新的种子。如果你从多个系统(如台式机、笔记本电脑和手机)进行加密,每个系统都可以拥有自己独立选择的种子。
Nonce-based signatures and beyond
我们定义了基于随机数的签名,其中签名算法是确定性的,不仅需要签名密钥和消息,还需要种子和随机数。我们要求(1)如果种子保持隐藏时,无论随机数如何生成,我们都具有常规安全性(不可伪造性);(2) 如果种子被暴露,则只要随机数是不可预测的,我们仍然具有安全性。第5节 形式化了这一点,并展示了如何使用对冲提取器将任何签名方案转换为具有这些安全属性的基于随机数的方案。
由于其速度快和签名尺寸短,实践中最具吸引力的签名方案是 DSA、El Gamal 和 施诺尔 的椭圆曲线版本[31]。然而,这些方案是随机化的,当随机性不佳时会严重失败。在 cfrg论坛上的讨论显示出人们强烈支持将这些方案改为确定性的。这很容易实现,可以通过将随机数作为伪随机函数(PRF)生成,该函数以作为私钥一部分的种子为密钥,并作用于消息;或者通过随机预言(RO)作用于私钥和消息来生成[9,21,23,25],,流行的 [11]Ed25519 签名方案已经体现了这一点。使方案基于随机数(nonce‐based)是对这种传统去随机化方法的补充,在保留确定性签名优点的同时增加了更多优势。详见第 5 节以获取更广泛的背景和讨论。
随机数与种子结合后,同样可用于密码学的许多其他领域,以在随机性不佳的情况下提供弹性,甚至带来其他优势。我们的工作旨在起到示范作用,而非详尽无遗。
Related work
BKS [8]引入了有状态的PKE。在此方案中,发送者也可以维护一个种子。他们表明这能带来显著的效率提升。然而,他们的方案是随机化的,并且不使用随机数。一个有趣的未来研究方向是将他们的方法与我们的方法结合,以在基于随机数的PKE中获得类似的效率提升。
罗加威[29]将随机数讨论为“显式地呈现初始化向量”。作为动机,他表示,当初始化向量是隐含的时候,实现者甚至书籍都会出错。他指出,随机数通常很容易获得,例如数据包序列号。在对称情况下,他似乎并未明确将随机性失效时的鲁棒性作为一个目标。有趣的是,在论文的最后一节中,他进一步指出:“考虑基于随机数的公钥加密方案,就如同考虑基于随机数的对称加密方案一样合理。这提供了一种有效减弱发送者对随机性需求的方法。” 我们的工作正是追随了这一建议。令人惊讶的是,这一想法竟然等待了12年。
2 符号说明和标准定义
我们让 ε表示空字符串。如果 X是一个有限集,我们用 x←$ X表示从 X中均匀随机选取一个元素并将其赋值给 x。算法可能是随机化的,除非另有说明。运行时间指最坏情况。如果 A是一个算法,我们用 y ← A(x1,…; r)表示在输入 x1,…上使用随机性 r运行 A并将输出赋值给 y。我们让y ←$ A(x1,…)表示随机选取 r,然后令 y ← A(x1,…; r)的结果。我们用[A(x1,…)]表示当以输入 x1,…调用时, A的所有可能输出的集合。我们采用[10]的基于代码的游戏框架。
(示例见图1。)通过Pr[G]表示游戏G执行后返回true的事件。随机预言机具有可变输出长度,由游戏过程 RO表示,该过程接收 x, l并返回一个长度为 l的随机字符串。定义在 X上的随机变量X的最小熵为 H∞(X)= −log(maxx∈X(Pr[X= x]))。
Function families
函数族 F:F.Keys ×F.Dom → F.Rng 是一个双参数函数,它取一个位于密钥空间 F.Keys 中的密钥 K,以及定义域 F.Dom 中的一个输入 x, 并返回值域 F.Rng 中的输出 F(K, x)。在随机预言模型中,F 接受一个预言机 RO。
将F作为伪随机函数的安全性通过与对手 A相关联的游戏Gprf F(A)来定义, 该游戏如图1所示。此处F可访问随机预言,因此该游戏处于随机预言模型中。表 S, T初始时假设处处为空。对手 A的优势定义为Advprf F(A) = 2 Pr[Gprf F(A) ] −1.
Public-key encryption
一个公钥加密方案PE定义如下。接收方密钥生成算法PE.Kg输出一个加密密钥ek以及对应的解密密钥dk。加密算法PE.Enc以ek和消息 m ∈{0, 1} ∗为输入,返回密文 c。确定性的解密算法PE.Dec以ek, dk和密文 c为输入,返回{0, 1} ∗ ∪{⊥}中的一个值,且我们要求满足标准的解密正确性。敌手 A攻破PE的IND‐CCA安全性的优势定义为Advind PE(A)=
2Pr[Gind PE(A) − 1对应图1中描述的游戏Gind PE(A)。这表示一个传统的(非基于随机数的方案),因此PE.Enc是随机化的。我们将此类方案用作基础方案,并需要显式表示其随机源,写作c ← PE.Enc(ek m; r),表示使用随机源 r运行 PE.Enc以确定性地返回 c。随机源的长度记为PE.rl。
数字签名方案
DS定义如下。签名者密钥生成算法DS.Kg返回一个签名密钥sk和 一个验证密钥vk。签名算法DS.Sig以sk和消息 m ∈{0, 1}∗作为输入,输出一个签名 s ∈{0, 1}DS.ol。验证算法DS.Ver以vk、消息 m ∈{0, 1}∗和签名 s ∈{0, 1}DS.ol作为输入,返回一个比特 b ∈{0, 1}。对手 A在攻破DS的 EUF‐CMA安全性上的优势定义为Advuf DS(A) = Pr[Guf DS(A)],其中游戏Guf DS(A) 如图1所示。同样,我们可能需要显式表示DS.Sig的随机性 r ∈{0, 1}DS.rl,写作s ← DS.Sig(sk m; r)。
3 对冲提取器
我们的基于随机数的方案通过使用发送者种子作为密钥的对冲提取器为基础方案提供随机性来实现。我们在此处引入并构建的这一原语是一种函数族,具有两个安全属性:第一个是它是一个伪随机函数(PRF);第二个是我们定义并称为真实或随机(ror)安全性的属性,用于形式化在密钥(种子)已知时输出的随机性。显然,这只能在某些限制条件下实现,而不同构造所达到的ror安全性类型也会有所不同,从我们在随机预言模型构造中实现的“尽可能最佳”版本,到我们在标准模型构造中实现的较弱但我们认为仍然有意义的版本。为了明确目标,我们首先引入随机数生成器的概念。
随机数生成器是一种算法NG,它在输入随机数选择器 η和当前状态St时,返回一个属于NG的范围集合NG.Rng ⊆{0, 1}∗的随机数 n,以及更新后的状态,记为(n, St) ←$ NG(η,St)。如果NG.Rng ={0, 1}NG.nl,我们称该生成器具有随机数长度NG.nl ∈ N。设 P为一个称为预测器的对手,并考虑图2中游戏G pred NG (P)。Adv pred NG(P) = Pr[G pred NG(P)]且 Adv pred NG(q1, q2) = maxP Adv pred NG(P), 其中最大值取遍所有最多对 GEN进行 q1 ∈ N次查询且对 EXPOSE进行 q2 ∈{0, 1}次查询的 P。现在我们进行解释:对 GEN的一次调用将生成序列 中的下一个随机数,并不向对手返回任何内容。对手可以通过选择选择器 η来影响随机数的选择。EXPOSE预言机允许额外访问随机数生成器的状态。要获胜,对手需要猜测某个已生成的随机数,或在生成的随机数之间制造一次碰撞。
随机数生成器代表了基于随机数的对称加密的另一种偏离。在后者中,对手选择随机数,但我们在第1节中看到,这在公钥环境中不起作用。相反,我们通过随机数生成器来建模发送者选择随机数的过程。
在讨论中,如果随机数生成器NG对于不进行 EXPOSE查询的攻击者而言是不可预测的,即对于“实际”的 q1值,Adv pred NG(q1,0) 是“小”的,则称其为弱不可预测;如果即使对于进行 EXPOSE查询的攻击者而言NG也是不可预测的,即对于“实际”的 q1值,Adv pred NG(q1,1) 是“小”的,则称其为强不可预测。如果NG是强不可预测的,则它也一定是弱不可预测的,但反之不一定成立。也就是说,弱不可预测的随机数生成器的类别大于强不可预测的随机数生成器的类别。
令HE: HE.Keys ×HE.Dom → HE.Rng 为一个函数预言机族(这意味着它可以访问随机预言机)。第一个输入称为“密钥”或“种子”。其定义域的形式为HE.Dom ={0, 1} ∗ × HE.NS,因此输入是一对字符串,第一个称为“消息”,第二个称为“随机数”,后者取自与HE相关联的随机数空间HE.NS。考虑与HE、随机数生成器NG以及对手 G相关的图2中游戏Gror HE,NG(G)。对 EXPOSE的 查询次数为0或1次,而对其他预言机的查询次数不限。设 Advror HE,NG(G)= 2 Pr[G ror HE,NG(G)] −1.
注意,这里对手在输入时会获得密钥(种子)xk,这与伪随机函数的概念不同,后者模拟了发送方种子的泄露。安全性要求对于由对手选择的消息和来自随机数生成器的随机数,HE(xk,(·,·)) 的输出应与随机值不可区分。显然,这只有在某些限制条件下才可能实现,这些限制条件将在我们讨论下面的构造方案时显现出来。
在游戏 Gror HE,NG(G) 中,我们称对手 G 是 无感知的,如果它的 RoR查询不依赖于种子 xk。更正式地说,存在一对 <算法>(G1, G2),使得 GRoR,EXPOSE,RO(xk) 执行以下操作: St ←$ GRoR,EXPOSE,RO 1 (ε); c′ ← GEXPOSE,RO 2 (xk, St); Return c′. 这代表了我们为了在标准模型中实现ror安全性而施加的限制之一。
Hedged extractors
一个对冲提取器HE:HE.密钥 ×HE.定义域 → HE.值域是一个如上所述的函数预言机族,其目标是:(1)HE 是一个伪随机函数,即对于任何具有实际资源的对手 A,Advprf HE(A) 的值都很小;并且(2)对于某一类不可预测的随机数生成器NG和某一类ror对手 G(通过各个对冲提取器的结果具体指定),Advror HE,NG(G) 的值也较小。我们给出了一个随机预言模型构造和一个标准模型构造。两者都实现了PRF安全性,但在所实现的ror安全性类型上有所不同。随机预言模型构造针对不可预测的随机数生成器(包括弱不可预测和强不可预测)以及所有ror对手实现了ror安全性。这是“最优可能”的,因为显然不可预测性假设是必要的。标准模型构造则针对强不可预测生成器和无知的ror对手实现ror安全性。这些限制反映了我们所使用的基础工具—— 随机性提取器的局限性。对无知对手的限制反映出随机性提取器仅适用于种子独立分布,而对生成器的强不可预测性要求则反映出,在从一系列输入中进行提取时,不仅要求每个输入具有一定最小熵,而且要求在已知其他输入的情况下仍然保持最小熵。
我们首先在随机预言模型(ROM)中给出一个简单且高效的对冲提取器构造方法 HE1。设 为提取器期望的输出比特数, k为期望的种子(密钥)长度。与 , k相关联的是对冲提取器 HE =HE1[, k]:{0, 1}k×({0, 1}∗×{0, 1}∗) →{0, 1}定义为 HERO(xk, x)= RO((xk, x), ). 此处为 HE.Keys ={0, 1}k,HE.Dom ={0, 1} ∗ × HE.NS,其中 HE.NS ={0, 1} ∗,以及 HE.Rng ={0, 1} 。
以下引理表明,该构造实现了PRF安全性,并且在假设随机数生成器不可预测的情况下,也实现了真实或随机安全性。注意,后者仅要求每个随机数 individually 不可预测,但随机数之间可能存在任意相关性,且可能在给定 n1 的情况下容易预测 n2。然而,提取器仍然有效。
引理1。 设 、 k ≥ 1为整数,并设HE= HE1[, k]为如上所述与 和 k相关的 ROM函数族。
- 如果 A是一个向其 RO预言机发出 q2次查询的对手,则 Advprf HE(A) ≤ 2q2k. (1)
- 设NG为一个随机数生成器。如果 G是一个向其 RoR预言机发出 q1次查询、向其 RO预言机发出 q2次查询,并向其EXPOSE预言机发出 q3 ∈{0, 1}次查询的对手,那么 Advror HE,NG(G) ≤ q2 · Advpred NG(q1, q3). (2)
注意,在第二种情况下,归约保持了 EXPOSE查询的次数,这意味着由q3反映的数目就是 G所进行的查询次数。这已经是最理想的情况了。
证明(引理 1)。 对于等式1的证明,考虑图3中的游戏G0, G1,其中G1包含方框中的代码而G0不包含。令 c表示游戏Gprf HE(A)中的挑战位,则以下内容(理由见下文)建立了等式1: Advprf HE(A)= Pr[Gprf HE(A)| c= 1] −(1 − Pr[Gprf HE(A)| c= 0]) (3) = Pr[G1] − Pr[G0] (4) ≤ Pr[G0 sets bad] (5) ≤ q2 2k. (6)
等式3是对优势定义的标准重述。在游戏中G0,,对 Fn和 RO预言机的回复是独立分布的,因此它等价于游戏Gprf HE(A)的 c= 0情况,最多只是将结果从真翻转为假。在游戏中G1,,对 Fn查询的回复由HERO给出,使其等价于游戏 Gprf HE(A)的 c= 1情况。这证明了等式4。游戏G0,和G1在bad事件发生前完全相同(仅在将bad设为true之后的语句上有所不同),因此游戏玩法基本引理 [10]证明了等式5。在游戏中G0,,所有预言机查询的回复都是随机的,并且与 xk无关,因此后者作为RO查询的一部分被查询的概率至多为等式6中的量。
对于公式 2,考虑图 3中的游戏 G2,G3,其中 G3包含方框内的代码,而 G2不包含。令预测器对手 P如图3中所定义。设c表示游戏 G ror HE中的挑战位NG(G), 以下内容证明了公式2: Advror HE,NG(G)= Pr[G ror HE,NG(G)| c= 1] −(1 − Pr[G ror HE,NG(G)| c= 0]) (7) = Pr[G3] − Pr[G2] (8) ≤ Pr[G2 sets bad] (9) ≤ q2 · Advpred NG(G) (10) ≤ q2 · Advp red NG(q1, q3). (11)
公式7是优势定义的标准重新表述。在游戏G2,中,对 RoR和 RO预言机的查询响应是独立分布的,因此它等价于游戏G ror HE,NG(G)的 c= 0情况,直至将结果从真翻转为假。在游戏G3,中,对 RoR查询的回复由HERO给出,使其等价于游戏G c= 1的ror HE情况,NG(G)。这证明了公式8的合理性。游戏G2,和G3在bad 事件发生前完全相同,因此游戏玩法基本引理[10]证明了公式9的正确性。在游戏 G2,中,所有预言机查询的回复都是随机且独立的,因此对手 P可直接模拟对手 G 的预言机。其输出是 G的 RO‐查询中随机一个随机数,由此得到公式10。公式11是因为 P对其GEN预言机进行了 q1次调用,并对其 EXPOSE预言机进行了q3次 查询。
接下来,我们基于伪随机函数F和近似异或通用哈希函数H给出一个标准模型对冲提取器。我们本质上将后者用作强提取器。该构造很简单:在消息和随机数上计算PRF,在仅随机数上计算哈希函数,然后通过简单的异或操作组合结果。其背后的直觉是,只要这两个方案生成的输出中至少有一个是随机的,则最终结果也是随机的。对冲提取器的PRF安全性仅依赖于F的PRF安全性假设得以证明。对于一类受限的随机数生成器NG和对手 G,我们证明了对冲提取器的真实或随机安全性。具体而言,即使存在 EXPOSE查询揭示状态的情况,NG仍必须保持不可预测性,并且 G的 RoR查询不得依赖于种子。这些限制反映了强提取器的固有局限性。
我们从一些定义开始。对于 ε ∈[0, 1],若函数族H满足H.Rng ={0, 1} (对于某个 ∈ N ),并且对于所有不同的x, y ∈H.Dom以及所有 s ∈{0, 1},,均有 Pr[H(hk, x)⊕ H(hk, y)= s: hk←$ H.Keys] ≤ ε.
我们的标准模型构造如下。设 为提取器所需的输出比特数。令 F: F.Keys × ({0, 1}∗ ×{0, 1}∗) →{0, 1} 是一个被假定为伪随机函数的函数族,令 H: H.Keys × H.Dom →{0, 1} 是一个几乎异或通用的哈希函数,其定义域为 H.Dom ⊆{0, 1}∗。我们将与 ,F, H 相关联的标准模型对冲提取器 HE = HE2[F, H]:(F.Keys×H.Keys) ×({0, 1}∗ × H.Dom) →{0, 1} 定义为
Algorithm HE(xk,(x, y))
(hk, fk) ← xk;
z1 ← H(hk, y);
z2 ← F(fk,(x, y));
Return z1 ⊕ z2
这里HE.Keys = F.Keys × H.Keys,HE.Dom ={0, 1} ∗ × HE.NS 与 HE.NS = H.Dom,以及 HE.Rng ={0, 1} 。以下说明此对冲提取器实现了伪随机函数安全性和 受限的真实或随机安全性。
引理2. 设 ≥ 1为一个整数。设F: F.密钥 ×({0, 1} ∗×{0, 1} ∗ ) →{0, 1} 是一个函数族。设H: H.密钥 × H.定义域 →{0, 1} 是一个(1+ γ) · 2−-几乎异或通用哈希函数。设HE= HE2[F,H]为如上所述与 、F和H相关的函数族。
- 如果 A是一个向其 Fn预言机进行 q次查询的对手,则存在一个对手 B(在 证明中描述)使得 Advprf HE(A) ≤ Advprf F(B). (12) 对手 B还向其 Fn预言机发出了 q次查询,并且其运行时间为 A加上H的 q次计算 所需的时间。
- 设NG是一个随机数生成器,其输出属于集合H.Dom。如果 G是一个无感知 的对手,向其 RoR预言机发出 q次查询,且Adv pred NG(q,1) ≤2−m,则 Advror HE,NG(G) ≤ q 2√γ+ 2 2m. (13) 为了证明这一点,我们首先需要一些更多的定义。回顾一下,对于 ε ∈[0, 1],若函数族 H满足:对所有不同的 x, y ∈ ∈H.Dom,有Pr[H(hk x) = H(hk y) : hk ←$ H.Keys] ≤ε ,则称该函数族H为 ε‐几乎通用的。对于满足H.Dom ={0, 1}∗ ×{0, 1}∗ 的函数族H,若对所有 x1, y1 ∈{0, 1}∗以及所有满足 x2= y2的 x2, y2 ∈{0, 1}∗, 都有Pr[H(hk, (x1, x2)) = H(hk, (y1, y2)) : hk ←$ H.Keys] ≤ ε.,则称H在第二个输入分量上是 ε‐几乎通用的。对于 k ∈ N和 ε ∈[0, 1],一个(k, ε)‐强提取器SE是一个(标准模型) 函数族,使得对所有满足Adv pred NG (1, 1) ≤ 2−k的NG,均有Adv ror E,NG(1, 0, 1) ≤ ε。这是对
基于随机数的密码学:当随机性失效时保持安全性
4 基于随机数的公钥加密
在本节中,我们定义基于随机数的公钥加密,首先给出语法,然后给出两个安全目标NBP1和NPB2。我们给出一种构造方法,通过使用对冲提取器同时满足这两个目标。通过第3节中的构造实例化该提取器,可得到具体的基于随机数的PKE方案,一个在随机预言模型下,另一个在标准模型下。
Syntax
一个基于随机数的公钥加密方案NPE规定了以下内容。接收方密钥生成算法NPE.Kg返回一个加密密钥ek和相应的解密密钥dk。发送方种子生成算法 NPE.sKg返回一个种子xk。加密算法NPE.Enc接受ek、xk、消息 m ∈{0, 1} ∗以及从随机数集合 NPE.NS 中选取随机数 n ,以返回密文 c。该算法是确定性的。解密算法 NPE.Dec(同样为确定性的)接收ek,dk和密文 c,并返回一个属于{0, 1}∗ ∪{⊥}的值。若对于所有(ek, dk) ∈[NPE.Kg],、所有xk ∈[NPE.sKg],、所有 m ∈{0, 1}∗以及所有n ∈ NPE.NS,均有 NPE.Dec(ek, dk, NPE.Enc(ek,xk m, n)) = m,则称方案 NPE 是正确的。
接收方密钥生成算法在基于随机数的公钥加密方案中的作用与在随机化公钥加密方案中相同。发送方种子生成算法是基于随机数的公钥加密方案的一个新元素。加密过程改为使用随机数而非随机性输入,并且重要的是,现在是确定性的。解密则与标准公钥加密方案中的相同。与对称基于随机数的加密不同,解密算法不会获得随机数。
基于随机数的加密是一种发送方侧强化,可以添加到现有加密方案中,使得接收者对它的存在无感知,并且接收者实现无需任何更改。
Security definitions
令 NPE为一个基于随机数的公钥加密方案。令 NG为一个随机数生成器,其返回的随机数属于NPE.NS。我们针对 NPE、NG以及对手 A定义图5中的游戏。我们通过以下方式定义 A在这些游戏中的优势 Advnbp1 NPE,NG(A)= 2 Pr[Gnbp1 NPE,NG(A)] −1 and Advnbp2 NPE,NG(A)= 2 Pr[Gnbp2 NPE,NG(A)] −1, 分别。这些游戏在随机预言模型(ROM)中描述;标准模型定义通过仅考虑不查询RO预言机的方案和对手得出。“nbp”表示“基于随机数的隐私”。接下来我们讨论这些定义。
游戏Gnbp1 NPE,NG(A) 形式化了在发送方种子未被暴露情况下的安全性,这一点在形式化中体现为对手不将种子作为输入;而游戏Gnbp2 NPE,NG(A) 则形式化了在发送方种子被暴露情况下的安全性,通过将种子作为输入提供给对手来实现。两者均要求在选择密文攻击下的不可区分性安全。在Gnbp1 NPE,NG(A) 中,人们自然会考虑的限制是要求随机数不重复。我们所采用的限制更弱,从而得到更强的安全性条件,即消息‐临时值对不得重复。(因此,即使随机数重复,只要消息不同,仍能保证安全性。)我们将针对任意随机数生成器实现这一概念,意味着在对随机数施加最少限制的情况下即可获得非常好的隐私保护。在Gnbp2 NPE,NG(A) 中,不施加任何限制,因此从理论上讲该概念更强,但我们仅在对冲提取器是ror‐安全的前提下才能实现此安全性,而这将进一步归约为随机数生成器的不可预测性。因此,在这种情况下,安全性要求随机数必须是不可预测的。
在游戏 Gnbp2 NPE,NG(A) 中,我们称对手 A 是 无感知的,如果其 ENC, DEC 查询不依赖于种子 xk。更正式地,存在一对算法 (A1,A2),使得 AENC ,DEC, RO(ek,xk)执行 以下操作: St ←$ A ENC,DEC,RO 1 (ek); c′ ← ARO 2(xk, St); Return c′.
Scheme
我们指定一种方案 NPE,该方案同时实现NPB1和NPB2两种安全性概念,即: 只要消息‐随机数对是唯一的且发送方状态保持秘密,或即使发送方状态被泄露给对手但 随机数具有足够的不可预测性,该方案仍能保证安全性。该构造实际上是一种转换 R2NPE,它以一个基础的、随机化的公钥加密方案 PE和一个对冲提取器 HE作为输 入,输出一个基于随机数的公钥加密方案 NPE= R2NPE[PE, HE],其算法如图6所示。
随机数空间即为对冲提取器的空间,也就是NPE.NS= HE.NS。该构造要求对冲提取器 提供的随机性足够充分,即HE所提供的随机性满足PE.rl= HE.ol。
我们首先证明该方案实现了NBP1安全性,即只要发送方种子保持机密,该 方案作为基于随机数的方案就是安全的。该定理通过其他相关对手针对底层概 率公钥方案以及对冲提取器HE的PRF性质的优势来限定对手优势。对于第3节 中描述的构造,后者
优势随后由引理1(针对随机预言模型构造)和2(针对标准模型构造)分别限定。
定理5. 设PE是一个(标准的、随机化)公钥加密方案。设HE是一个对冲提取 器。设基于随机数的公钥加密方案NPE=R2NPE[PE,HE]如上所述与它们相关 联。设NG为一个随机数生成器。设A为一个对手,其对 ENC预言机最多进行 q1次查询,对DEC预言机最多进行 q2次查询,以及对 RO预言机最多进行 q3 次查询。则该证明指定了对手B和 G,使得 Advnbp1 NPE,NG(A) ≤ 2Advprf HE(G)+ Advind PE(B), (14) 其中对手 B最多向其 ENC预言机发出q1次查询,向其 DEC预言机发出 q2 次查询;在计算方面,它对NG执行 q1次求值,并维护一个已生成密文的数组。对手 G最多向其 Fn预言机发出 q1次查询,向其 RO预言机发出 q3次查询; 它为PE生成密钥,并执行 q1次加密和 q2次解密运算,此外还进行 A的计算。
证明。 对手 B 获取 ek 后,首先设置 St ← ε,S0 ← ∅ 和 S1 ← ∅。然后, 对手 B 在内部运行以 ek 为输入的对手 A。对于查询 ENC(m0, m1, η),对手 B 计算 (n, St) ←$ NG(η, St),检查是否满足 (m0, n) ∈ S0 或 (m1, n) ∈ S1, 若满足则返回 ⊥。否则,它向自身的预言机查询 ENC(m0, m1) 并将结果返回 给 B。对于查询 DEC(c),通过游戏中相应的预言机进行回答;而对于潜在的 查询 RO(x, l),则通过惰性采样模拟随机预言机进行回答,如游戏中所述。 对于每个 d ∈{0, 1},针对伪随机函数的对手 Gd 初始化 St 为 ← ε、 S0 ← ∅ 和 S1 ← ∅ 为 B,并生成密钥对 (ek, dk) ←$ PE.Kg。然后,对手 Gd 在输入 ek 上运行对手 A 。当收到查询 ENC(m0, m1, η) 来自 A 时,对手 Gd 计算 (n, St) ←$ NG(η, St),检查是否 (m0, n) ∈ S 0 或 (m1, nonce) ∈ S 1,若是,则返回 ⊥。 Gd 从其预言机 Fn(md, n) 获取 r,计算 c ← PE.Enc(ek md; r) 并返回 c。对查询 DEC(c) 的响应通过计算 m ← PE.Dec(ek, dk c) 并返回 m 来完成。潜在查询 RO(m0, l)
参考游戏中的随机预言机。当 A提供其输出 b′时, Gd输出 b′ ⊕ d。
我们定义一个混合博弈 G,其中所有计算都按之前的方式进行,只是在使用新 的消息 mb和随机数 n进行加密时,使用了一个全新的随机字符串 r ←{0, 1}。 与博弈 Gnbp1 NPE,NG(A) 的差异可以如图 7 中的博弈 G 所述加以说明。
在G中的 A视图与Gind PE(B)中的视图完全相同。此外,我们观察到 2 Pr[Gprf HE(G0)]= Pr[Gnbp1 NPE,NG(A)|b= 0] − Pr[G|b= 0]+ 1, 原因是,如果在Gprf HE(G0)中选择了比特 b= 0 ,那么 A的视图与在G中选择 b= 0 时完全相同;所有密文都是对 m0使用新鲜随机性进行的加密。类似地,如果在G prf HE(G0)中选择比特 b= 1,那么 A的视图与在Gnbp1 NPE,NG(A)中选择 b= 0时完全 相同;所有密文都是对 m0的加密,其随机性是通过NG和HE从消息 m0和输入 η 计算得到的,但在这种情况下 G0输出的是“错误”的比特。同理, 2 Pr[Gprf HE(G1)]= Pr[G nbp1 NPE,NG(A)|b= 1] − Pr[G|b= 1]+ 1, 因为如果在Gprf HE(G0)中选择比特 b为 b= 0,那么 A的视图就与在G中使用 b= 1时 完全相同;所有密文都是对 m1使用新鲜随机性进行的加密。这就是 G1需要反转 A输 出的原因。总体而言,我们得到 Advnbp1 NPE,NG(A)= Pr[G nbp1 NPE,NG(A)|b= 0]+ Pr[G nbp1 NPE,NG(A)|b= 1] −1 = Pr[G nbp1 NPE,NG(A)|b= 0] − Pr[G|b= 0] + Pr[G nbp1 NPE,NG(A)|b= 1] − Pr[G|b= 1]+ 2 Pr[G] −1 ≤ 2 Pr[G p rf HE(G0)] −1+ 2 Pr[G p rf HE(G1)] −1+ Advnbp 1 PE(B) = Advp rf HE(G0)+ Advp rf HE(G1)+ Advnb p 1 PE(B).
证明通过定义 G为以1/2的概率分别选择 G0或 G2而结束。
对冲提取器同时作为提取器和伪随机函数的特性意味着,即使发送方种子泄露, 只要随机数足够不可预测,上述方案仍然是安全的。下面定理中的归约保持了 无感知性,即如果 A是无感知的,则 G也是无感知的。这使得我们能够在标准 模型对冲提取器的情况下基于引理2得出结论。
定理6。 设PE是一个(标准的、随机化)公钥加密方案。设HE是一个对冲提 取器。设与上述方案相关的基于随机数的公钥加密方案NPE= R2NPE[ PE,HE]如上所述。设NG为一个随机数生成器。设 A为一个对手,其最多向 它的 ENC预言机发出 q1次查询,向它的 DEC预言机发出q2次查询,以及 向它的 RO预言机发出 q3次查询。则该证明指定了对手 B和 G,使得 Advnbp2 NPE,NG(A) ≤ 2Advror HE,NG(G)+ Advind PE(B), (15) 其中对手 B对其 ENC预言机最多进行q1次查询,对其 DEC预言机最多进行 q2次查 询,并为 q3次查询模拟一个随机预言机。对手 G对其 RoR预言机最多进行 q1次查询, 对其 RO预言机最多进行 q3次查询;它为PE生成密钥,并计算 q1次加密和 q2次解密, 此外还执行 A的计算。此外,如果 A是无感知的,则 G也是无感知的。
证明。 该证明遵循与定理5相同的思路。针对底层公钥加密方案PE的对手 B行 为如下:它以加密密钥ek作为输入,生成种子xk←$ HE.Keys,然后在输入 (ek, xk)上运行对手 A。当 A发起查询 ENC(m0, m1, η)时,对手 B向其预言 机查询 ENC(m0, m1)并将结果返回给 A。对于查询 DEC(c),通过向其自身的 预言机发出相同查询来回答;对于查询 RO(x, l),则通过惰性采样模拟随机预 言机进行回答。对手 B输出与 A相同的输出比特。
对于每个 d ∈{0, 1},针对提取器的对手 Gd行为如下:它获取一个提取器种子 xk ∈ HE.Keys,生成一个密钥对(ek, dk) ←$ PE.Kg,然后在输入(ek, xk)上运行 对手 A。当收到 A的查询 ENC(m0, m1, η)时,对手 Gd调用 RoR(md, η)以获得 一个随机字符串 r。然后计算 c ← PE.Enc(ek md; r)并返回 c。对查询 DEC(c)的响 应通过计算 m ← PE.Dec(ek, dk c)并返回 m来完成。潜在的查询 RO(x, l)将被转 发至游戏中提供的随机预言机。当 A提供其输出 b′时, Gd则输出 b′ ⊕ d。注意 Gd 仅通过 A使用种子,如果 A仅在所有加密查询之后才使用它,则 Gd也仅在所有 RoR查询之后才使用它。因此,如果 A是无感知的,则 Gd也是无感知的。
我们定义一个混合游戏H,其中所有计算都按之前的方式进行,只是在加 密时使用了一个新的随机字符串 r ←{0, 1} ;与游戏Gnb p 2 NPE,NG(A) 的差异 在图 7 中用框出的代码标出。
H中的 A视图与Gnbp2 PE(B)中的视图完全相同。此外,我们观察到 2 Pr[Gror HE,NG(G0)]= Pr[Gnbp2 NPE,NG(A)|b= 0] − Pr[H|b= 0]+ 1, 原因是,如果在Gror HE,NG(G0)中选择比特 b= 0,则 A的视图与在H中选择 b= 0 时完全相同;所有密文都是对 m0使用新鲜随机性进行的加密。类似地,如果 在Gror HE,NG(G0)中选择 b= 1,则 A的视图与在Gnbp2 NPE,NG(A)中选择 b= 0时完 全相同;所有密文都是对 m0的加密,其随机性通过HE和NG从消息 m0和输 入 η计算得出,但在这种情况下 G0输出的是“错误”的比特。同理, 2 Pr[Gror HE,NG(G1)]= Pr[Gnbp2 NPE,NG(A)|b= 1] − Pr[H|b= 1]+ 1, 因为如果位 b被选为 b= 0在 Gror HE中,NG(G0),那么 A的视图与在H中使用 b= 1时完全相同;所有密文都是对 m1使用新鲜随机性的加密。这就是 G1需 要反转 A输出的原因。最后的计算过程与定理 5中的完全相同。
上述定义的 仅考虑了单个 和单个 。然而,实际 场景涉及 和多个接收者。这意味着,一方面,发往同一接 收者的 将基于不同的 进行;另一方面,发送方 将使用相同的 为发往不同接收者的 生成 。为了在这些场景中实现 ,我们通过以下 扩展 Gnbp2 NPE,NG(A)和Gnbp1 NPE,NG(A): ENC2(ek, m, η) (n, St)←$ NG(η, St) c ← NPE.Enc(ek, xk, m, n) Return c
上述讨论的方案可以轻松证明能够实现相应修改后的游戏;对冲提取器为每次 加密提供均匀且独立的随机性。
通过在游戏过程中生成多组密钥和种子,并扩展预言机以添加参数来选择 要处理消息的特定发送方和/或接收者,可将此游戏扩展到多个发送方和多个接 收方。证明随后通过两个混合论证完成,一个用于减少发送方的数量,另一个 用于减少接收方的数量。在将接收方数量减少到游戏中未包含的接收方时,需 要预言机ENC2来模拟发往这些接收方的加密。
5 基于随机数的签名
在本节中,我们定义并构造基于随机数的数字签名方案。
Background
消除签名过程中的随机性并非新方法,且易于实现。一种将给定的随机化存在不可伪造性(EUF‐CMA)数字签名方案 DS 转换为确定性方案的简单方法如下。设 F 为一个伪随机函数。密钥生成算法执行 (sk, vk) ←$ DS.Kg 和 fk ←$ F.Keys,并 将 (fk, sk) 作为新方案的私有签名密钥进行存储。对消息 m ∈{0, 1}∗ 的签名通过首先 计算 r ← F(fk m),然后执行 s ← DS.Sig(sk m; r) 来生成。该方法源于 MNPV [23] , 并且容易证明其有效性,即在假设 F 是一个伪随机函数的前提下,所构造的确定性签名 方案保留了原始随机化方案的存在不可伪造性(EUF‐CMA)安全性。
然而,上述解决方案会改变私钥,而这并不总是可取的。例如,在已部署的方案中 进行此类修改可能会存在问题,或者当多个应用程序使用相同的签名密钥且格式不易更 改时也会出现问题。一个民间流传的解决方案是保持密钥不变,并通过将随机预言机应 用于现有的私钥sk和消息来获取随机数 r。对于椭圆曲线数字签名算法(ECDSA)这 类数字签名(DS),KM[21]证明了该方法的有效性。BPS [9]进一步证明了该方法在一 般情况下的有效性(即适用于任何基础的存在不可伪造性(EUF‐CMA)方案)。这种 去随机化方法已被用于Ed25519签名方案[11],并且Pornin在RFC[25]中为数字签名算 法(DSA)和椭圆曲线数字签名算法(ECDSA)指定了该方法。
在我们的模型中,签名者拥有一个私钥和一个种子。签名过程同时使用私钥、种子 和随机数,并且是确定性的。如果种子(以及私钥)保持保密,则无论随机数如何 生成,我们都能获得通常的存在不可伪造性(EUF‐CMA)级别的安全性。到目前 为止,这提供的安全性与确定性签名方案相同。附加条件是,如果种子被暴露(但 私钥未被泄露),只要随机数是不可预测的,我们仍然能够保持安全性。
私钥和种子由同一个实体持有,即签名者。因此人们可能会问,为什么种 子会被暴露而私钥却不会。也就是说,系统要么是安全的,此时两者都安全; 要么不安全,此时两者都会被暴露。如果情况如此,那么基于随机数的签名相 比经典确定性签名确实没有提供额外的优势。然而,我们可以设想一些场景, 其中私钥和种子的安全级别不同。例如,私钥可能已经存储在硬件中,而种子 则没有。种子可能存储在与签名方案私钥不同的位置,并且可以根据应用需求 以任意频率重新生成(从从不重新生成,到固定时间间隔、每次系统重启或每 次签名操作时生成)。由于这是仅针对签名者的签名生成修改,用户还可以在 不同设备上使用不同的种子,或者将修改后的方案与标准的概率性方案结合使 用。
我们提出的方案再次基于对冲提取器。
Definitions
一个基于随机数的签名方案NDS规定了以下内容。签名者密钥生成算法NDS.Kg返回一个签名密钥sk、一个验证密钥vk以及一个种子xk。确定性的签名算法NDS.sign以sk、xk、消息 m ∈{0, 1} ∗和来自随机数集合NDS.NS的随机数 n作为输入,输出一个签名 s ∈{0, 1} NDS.ol。确定性验证算法NDS.vrf接收
vk、消息 m ∈{0, 1}∗ 和候选签名 s ∈{0, 1}NDS.ol,返回一个比特 b ∈{0, 1}。如果 对于所有 (sk,vk,xk) ∈[NDS.Kg], 以及所有 m ∈{0, 1}∗ 和 n ∈ NDS.NS,真实签名 的验证均成功:NDS.vrf(vk m,NDS.sign(sk, xk m, n)) = 1,则方案NDS是正确的。
为了形式化安全性,我们考虑图8nbuf1 NDS中与基于随机数的签名方案NDS、返回NDS中随机数的随机数生成器NG以及对手A相关的游戏G{v26},{v29}
17

被折叠的 条评论
为什么被折叠?



