安全规约的目的是为了证明打破所提出的方案意味着解决一个数学困难问题。
1.安全模型
当我们针对一个密码学系统提出一个方案时,我们通常不分析该方案在一系列攻击下的安全性,比如重放攻击或者合谋攻击等等。相反我们分析该方案在安全模型下的安全性。
一个安全模型可以当成是对密码系统多种攻击方式的抽象。如果一个方案在安全模型下是安全的,那么它就可以安全的抵抗在该安全模型下的任何攻击。
为了模拟密码系统的安全性,建立一个名为"challenger"的参与方,用于与敌手(adversary)交互。安全模型可以当作是敌手与挑战者之间的(交互)游戏。
挑战者根据密码系统的算法创建方案,并且挑战者知道秘密,比如说密钥。而敌手的目标是打破这个方案,安全模型主要由下面的定义组成。
- 敌手可以问询到哪些信息。
- 敌手什么时候可以问询信息。
- 敌手如何赢得游戏(打破方案)
不同密码系统的安全模型可能完全不同,因为安全服务不一样。
举一个例子:IBE针对合谋攻击的IND-ID-CPA安全模型。回顾一下IBE基于身份的加密
- 初始化 :挑战者 C \mathcal C C运行IBE的密钥生成算法(KeyGen)得到主密钥对 ( m p k , m s k ) (mpk,msk) (mpk,msk),把主公钥 m p k mpk mpk发给敌手 A \mathcal A A,挑战者保留主私钥 m s k msk msk来回应敌手的问询。
- 阶段1 :敌手 A \mathcal A A向 C \mathcal C C做出私钥问询。 C \mathcal C C 按照IBE的密钥生成算法响应对任何身份的查询。
- 挑战 :敌手选择 I D ∗ ID^* ID∗(私钥在阶段1从未被问询过**)与两个不同的消息 ( m 0 , m 1 ) (m_0,m_1) (m0,m1)给 C \mathcal C C。 C \mathcal C C随机选择其中一条消息 m b ( b ∈ { 0 , 1 } ) m_b(b \in\{0,1\}) mb(b∈{0,1}),使用主公钥 m p k mpk mpk和 I D ∗ ID^* ID∗对其进行加密,产生一个挑战密文 C T b = E ( m p k , I D ∗ , m b ) CT_b=E(mpk,ID^*,m_b) CTb=E(mpk,ID∗,mb)给 A \mathcal A A。
- 阶段2 :敌手 A \mathcal A A继续向 C \mathcal C C做出私钥问询。不允许问询 I D ∗ ID^* ID∗对应的私钥。
- 猜测 : A \mathcal A A输出一个猜测比特 b ′ b' b′,如果 b ′ = b b'=b b′=b, A \mathcal A A赢得游戏。
如何发起合谋攻击呢?
假如一个IBE方案针对合谋攻击是不安全的,两个用户 I D 1 ID_1 ID1, I D 2 ID_2 ID2,二者可以使用他们的密钥 d I D 1 , d I D 2 d_{ID_1},d_{ID_2} dID1,dID2去联合解密由第三方 I D ∗ = I D 3 ID^*=ID_3 ID∗=ID3加密的密文 C T CT CT。现在研究一下所提方案在上述安全模型下是否安全。
遵循安全模型的定义, A \mathcal A A可以问询 I D 1 ID_1 ID1, I D 2 ID_2 ID2的私钥,设置 I D ∗ = I D 3 ID^*=ID_3 ID∗=ID3作为挑战身份。
假如所提出的方案针对合谋攻击不安全,那么敌手总是可以正确的猜测加密的消息进而赢得游戏的胜利。如果所提出的方案在安全模型下是安全的,那么所提出的方案在抵抗合谋攻击时也是安全的。
一个密码系统所要求的正确安全模型定义是敌手在安全模型下无法赢得游戏。否则,无论方案怎么构造,敌手在这样的安全模型下都能赢得游戏,因此这个方案是不安全的。为了满足这一要求,必须防止敌手提出任何trivial的问询。比方说,不允许敌手问询 I D ∗ ID^* ID∗,因为一旦敌手问询了 I D ∗ ID^* ID∗,这将允许敌手通过 I D ∗ ID^* ID∗的私钥,对挑战密文直接运行解密算法来赢得游戏。
安全模型是理想的,如果敌手可以在任何时间进行任何查询,而不是那些允许简单攻击的查询,那么安全模型就是最好的。在理想安全模型下可证明安全的方案比在其他安全模型下可证明安全的方案更安全。
2.弱安全模型及强安全模型
对于同一安全服务,一个密码系统可能由多个安全模型。这些安全模型可以分为下面两种类型。
- 弱安全模型。如果 A \mathcal A A被限制在其允许的查询集合中,或者必须事先向 C \mathcal C C透露一些查询,则安全模型是弱的。例如,在基于身份加密的IND-SID-CPA安全模型中, A \mathcal A A不能进行任何解密查询,必须指定挑战身份才能看到主公钥。
- 强安全模型。如果 A \mathcal A A不限制它可以进行的查询(除了那些允许普通攻击的查询),并且 A \mathcal A A不需要事先向 C \mathcal C C透露任何问询,则安全模型是强的。例如,在基于身份加密的IND-ID-CCA安全模型中, A \mathcal A A可以对任何不同于挑战密文的密文进行解密查询,并且在挑战阶段之前, A \mathcal A A不需要指定挑战身份。
如果一个方案在强安全模型下是安全的,这代表它有强安全性。在安全模型下"strong"要比"weak"更好。
标准安全模型:被广泛接受为定义密码系统安全服务的标准的安全模型。例如,针对选择消息攻击下的存在不可伪造性是数字签名的标准安全模型。请注意,标准安全模型不一定是密码系统的最强安全模型。
3.测试证明
为了衡量所设计的方案在相关模型下是否安全,我们可以将所提出的方案交给挑战者进行测试。挑战者执行所提出的方案,然后呼叫攻击。任何敌手都可以与挑战者交互并提出问题,挑战者遵循安全模型进行相关问询的响应。如果没有敌手能够在多项式时间内以不可忽略的优势赢得这次游戏,那么所提出的方案就是安全的。
不幸的是,我们不能通过这种方式测试来证明所提出方案的安全性。即使没有对手能够在这场游戏中获胜,也并不意味着所提出的方案是真正安全的。原因是,敌手可能会在呼叫攻击阶段隐藏其破坏方案的能力,并在方案被采纳为应用程序的标准时发起攻击以破坏方案。
4.矛盾证明
证明思路如下:
- 一个数学问题被认为是困难的
- 如果所提方案是不安全的,我们证明这个问题是简单的。
- 假设错误,所以方案是安全的
先说明一个数学问题被公认是困难的。然后给予一个打破假设 ,存在一个敌手在多项式时间内以不可忽略的概率打破所提方案,就是说假设敌手能够通过测试按照证明中描述的步骤来破解所提出的方案。下面来展示数学困难问题对于该敌手是简单的。这个矛盾表明打破假设一定是错误的,换句话说,该方案是安全的并且无法被破解。因此所提出的方案是安全的。
当且仅当我们可以在敌手的帮助下有效解决潜在的难题时,矛盾出现。如果存在的难题很简单或者我们无法高效的解决潜在的难题时,那么证明将无法获得矛盾。
当然,没有矛盾的证明并不意味着所提出的方案是不安全的,而是表明所提出的方案不能证明是安全的。
也就是说,给定的证明不能让我们相信所提出的方案是可证明安全的。
5.什么是安全规约
矛盾证明中从不安全到简单的过程称为规约。如果我们可以通过敌手的攻击找到数学困难问题实例的解决方案。那么规约就会起作用。
但是安全规约并不能直接规约敌手对所提出方案的攻击到解决一个潜在的难题。这是因为所提出的方案和问题实例是独立产生的。
在安全归约中,我们将原方案替换为一个经过精心设计的不同方案,该方案与某个问题实例相关联。通过分析敌手对此类不同但精心设计的方案的攻击行为,我们能够提取出问题实例的解,从而解决相应的数学难题。安全归约的核心与难点在于如何生成此类不同但精心设计的方案。
一些重要的概念:
- 与所提方案相关联的真实方案、挑战者、及真实攻击的概念。
- 与不同的但经过精心设计的方案相关联的模拟方案、模拟器及模拟相关的概念。
6. 真实方案与模拟方案
在安全规约中,真实方案与模拟方案是两个常见的方案。但是他们的产生和应用是完全不同的。
- 真实方案是指按照所提出方案的算法描述,通过安全参数生成的方案。真实方案可视为所提出方案(算法)的具体实例化。当敌手按照定义的安全模型与真实方案交互时,我们假设敌手能够攻破该方案。为简化表述,可将所提出方案视为真实方案。
- 模拟方案是指根据归约算法,基于底层困难问题的随机实例所生成的方案。在安全性归约中,我们希望敌手能够与此类模拟方案进行交互,并以与破解真实方案相同的优势将其攻破。
在安全归约中,并不需要完整实现被模拟的方案。我们只需实现那些涉及响应敌手查询的算法即可。例如,在IND-CPA安全模型中证明加密方案时,无需为模拟方案实现解密算法,因为模拟器不需要响应敌手的解密查询。
7.挑战者与模拟器
当敌手与一个方案进行交互,该方案需要回应敌手所作出的问询。使用两个虚拟参与方(分别为挑战者和模拟器)来区分是与真实方案进行交互还是与模拟方案进行交互,如果是虚拟方案,那就是与模拟器进行交互,如果是真实方案,那就是与挑战者进行交互。
- 当敌手与一个真实方案进行交互时,我们就说敌手是在与挑战者进行交互,挑战者创造了一个真实方案并且回应来自敌手的问询。挑战者仅仅出现在安全模型中,且在安全描述中敌手需要与真实方案进行交互。
- 当敌手与一个模拟方案进行交互时,我们说敌手是在与模拟器进行交互,模拟器创建了一个模拟方案以及回应来自敌手的问询。模拟器仅仅出现在安全规约中,是运行规约算法的一方。
由于挑战者运行在真实方案下,而模拟器运行在模拟方案下,因此两方出现在不同的环境中(安全模型与安全规约中)执行不同的计算。
8.真实攻击与模拟
在安全规约中,为了确保敌手打破模拟方案与打破假设具有同样的优势,我们需要证明模拟与来自真实世界的攻击(真实方案)是不可区分的。
真实攻击的概念和模拟解释如下:
- 真实攻击发生在敌手与挑战者交互的过程中,挑战者严格遵守安全模型运行实际的方案。
- 模拟发生在敌手与模拟器进行交互的过程中,模拟器严格遵循规约算法运行被模拟的方案。模拟是安全规约的一部分。
如果模拟与真实攻击是不可区分的,那么敌手无法区分是与真实方案交互还是模拟方案交互。
也就是说,模拟方案与真实方案在敌手的试图(view)是不可区分的。所以模拟和真实攻击不可区分就等价于模拟方案与真实方案不可区分。
当敌手被要求与给定方案进行交互时,我们强调给定方案可以是真实方案或者是模拟方案,或者既不是给定方案也不是模拟方案。
在打破假设时,我们假定敌手能够打破真实方案,除非模拟方案与真实方案是不可区分的,我们不能直接使用该假设来推理敌手也将打破模拟方案。
9.攻击与困难问题
安全规约的目标是规约敌手的攻击到解决一个底层困难问题。
一个攻击可以是计算类型的攻击,也可以是一个判定类型的攻击。
一个计算类型的攻击可以是伪造一个有效的签名,这需要敌手在指数大小的答案空间中去寻找一个正确的答案。
判定类型的攻击可以是在IND-CPA安全模型下猜测密文所对应的明文,仅仅需要敌手去猜测0或者1即可。
抗判定攻击的安全性也被称为不可区分安全性。根据攻击类型与困难问题类型,可以将安全规约分为以下三种类型:
- 对计算困难问题的计算攻击。例如在数字签名的EU-CMA模型下(详见证明数字签名的安全性),如果敌手可以伪造一个未曾问询过的新消息的有效签名,那么敌手赢得游戏。这个伪造就是计算攻击。在安全规约中,模拟器将使用伪造的签名去解决一个计算困难问题。
- 对于DDH的判定攻击。例如针对加密的IND-CPA安全模型下(详见证明公钥加密的安全性),如果敌手可以在挑战密文情况下,直接猜出消息 m c m_c mc,敌手将赢得游戏。这个猜测就是一个判定攻击。在安全规约中,模拟器将使用敌手对加密消息的猜测来解决判定困难问题。
- 对于计算困难问题的判定攻击。这是一个特殊的规约类型,因为这仅仅适用于在随机预言机模型下的规约情况,在这种情况下模拟器使用敌手做出的哈希问询来解决一个计算困难问题。
很少规约一个计算攻击到解决一个判定困难问题上面,尤其是数字签名或者加密。
10.规约开销与规约损失
假设存在一个敌手可以在多项时间内以不可忽略的优势 ϵ \epsilon ϵ打破所提方案。在安全规约中,我们将构造一个模拟器来解决底层困难问题,其中 ( t ′ , ϵ ′ ) (t',\epsilon') (t′,ϵ′)定义如下:
t ′ = t + T , ϵ ′ = ϵ L t'=t+T,\epsilon'=\frac{\epsilon}{L} t′=t+T,ϵ′=Lϵ。
- T T T表示规约开销,即时间开销。T的大小取决于敌手的问询数量以及回应每次问询所需的计算开销。
- L L L表示规约损失或者规约损失,损失因子。 L L L的大小取决于所提出的安全规约。最小损失因子为1,这表示在规约过程中没有损失。许多方案具有与查询次数(如签名查询或者哈希问询)呈线性关系的损失因子。
在安全规约中,只要 T T T与 L L L是多项式量级,以 ( t ′ , ϵ ′ ) (t',\epsilon') (t′,ϵ′)解决底层困难问题是可以接受的,因为这意味着可以在多项式时间内以不可忽略的优势解决底层困难问题。如果任一参数是指数大的,安全规约将会失效,因为此时不存在矛盾。
11.松散规约与紧密规约
在规约证明过程中,这两个规约方式用来衡量不同的规约损失。
- 当安全归约中的损失因子 L L L与敌手发起的查询次数(如签名查询或哈希查询)至少呈线性关系时,我们称该安全归约为松散的。
- 当 L L L为常数或较小值(例如查询次数的次线性函数)时,我们称该安全性归约是紧密的。
如果 L L L与一个整数 k k k的 2 k 2^k 2k一样大,我们就说规约具有 k k k比特的安全损失。理论上,基于群的密码学方案,我们必须将群规模额外增加 k k k比特的安全参数,以确保所提方案与底层困难问题具有同样的安全性。在衡量安全归约是否紧密时,我们很少考虑时间开销。主要原因在于:安全归约的时间开销主要由困难性假设和安全模型决定,而与所提出的安全归约方案无关。
12.安全等级回顾
假设一个方案 S S S,很难计算它的安全等级,因为我们不知道哪个攻击是最高效的。但是,我们可以计算出方案 S S S的下界安全等级与上界安全等级。
- 假设解决一个困难问题 A A A可以用来解决方案 S S S。那么S的上界层级就是问题A的安全层级。在基于群的密码学中,离散对数问题是最基础的困难问题。要解决离散对数问题需要首先解决基于群的密码学方案。因此,所有基于群构造方案的安全等级上界,均由该群上离散对数问题的安全等级决定。
- 假定打破方案 S S S可以被归约到解决一个底层困难问题 B B B。 S S S的下界等级可以由底层困难问题 B B B计算得到。但是我们不能说 S S S的下界安全等级就是问题 B B B的安全等级。因为它还取决于规约开销与规约损失。当且仅当不存在规约开销与规约损失时,等式成立。
举一个例子:
- 假设方案生成一个循环群 G \mathbb G G。
- 群 G \mathbb G G上的离散对数问题有80比特的安全性。
- 群 G \mathbb G G上的问题 B B B拥有60比特的安全性。
- 群 G \mathbb G G构造的方案安全性可以被归约到底层困难问题 B B B。准确的说,如果存在一个敌手以 ( t , ϵ ) (t,\epsilon) (t,ϵ)打破方案,那么存在一个模拟器在 2 5 ∗ t 2^5*t 25∗t次尝试后能以 ϵ 2 10 \frac{\epsilon}{2^{10}} 210ϵ的优势打破底层困难问题。
所提方案的安全等级至多为 t ϵ \frac{t}{\epsilon} ϵt,方案的上界安全等级为80比特,由于底层困难问题 B B B的安全等级为60比特,所以:
2 5 ∗ t ϵ 2 10 = 2 15 ∗ t ϵ ≥ 2 60 \frac{2^5*t}{\frac{\epsilon}{2^{10}}}=2^{15}*\frac{t}{\epsilon}\geq2^{60} 210ϵ25∗t=215∗ϵt≥260
因此 t ϵ ≥ 2 45 \frac{t}{\epsilon}\geq2^{45} ϵt≥245。方案的下界安全等级就是45比特。因此,所提方案的安全等级范围为 [45,80]比特。
由于归约开销和归约损失的影响,所提方案的安全级别下界并非60而是45。为确保上述推导中方案的安全级别至少达到80比特,我们可采用以下两种方法。
- 在离散对数假设下为所提方案S设计安全归约,且不产生任何归约成本或归约损失。也就是说,从该方案到离散对数问题的安全归约质量是完美的。然而,现有文献中极少有方案能紧密归约至离散对数假设。
2. 以更大的安全参数生成群 G \mathbb G G,使得底层困难问题 B B B具有95比特的安全性,此时该方案的安全级别下界为80比特。该解决方案的代价是必须增加群表示的位长,这将降低群运算的计算效率。
安全范围 [45,80]并不意味着必然存在能在 2 45 2^{45} 245步内攻破该方案的攻击算法,仅表明45比特安全性是可证明的安全级别下界。
需要强调的是,在实际安全归约分析中,由于归约成本为 t + T t + T t+T,无法通过 ( t + T , ε L ) (t + T, \frac{\varepsilon}{L}) (t+T,Lε)计算出安全等级 t / ε t/\varepsilon t/ε,因此确定安全等级下界极其困难。
底层困难性假设应尽可能弱化至离散对数假设水平,且参数 ( T , L ) (T,L) (T,L)应尽可能小,这一原则始终成立。
13.理想的安全规约
理想安全规约也是最佳的安全规约,他应该具有以下四个特征:
- 安全模型。安全模型应当采用最强安全模型,使得敌手能够以最大化、灵活且自适应的方式向挑战者发起查询,并以最低要求赢得游戏。
- 困难问题。安全归约所基于的底层困难问题,必须是同一数学原语上定义的所有困难问题中最难的一个。例如,离散对数问题就是群上定义的所有问题中最困难的问题。
- 规约开销与规约损失。规约开销 T T T与规约损失 L L L是最小值。T与攻击者发起的查询次数呈线性关系,且 L =1。
- 对敌手的计算限制。敌手除时间和优势外不受任何计算限制。例如,允许敌手自行调用哈希函数。但在随机预言机模型中,敌手不可直接调用哈希函数,而必须通过问询随机预言机实现。
遗憾的是,在现有文献提出的所有安全性归约方案中,这些特性之间往往存在固有的权衡关系。例如,可以构建一个基于弱困难度假设的高效签名方案,但其安全归约必须依赖随机预言机;同样,也能构造安全归约中不含随机预言机的签名方案,但这会以强假设条件或较长的公钥为代价。就目前技术而言,要构造同时满足上述四个特性的理想安全归约方案似乎仍不可行。