GCM-SIV:高效抗随机数重用认证加密

GCM‐SIV:低于每字节一个周期的完整抗随机数误用的认证加密

Shay Gueron∗数学系 海法大学 和 英特尔公司,以色列 shay@math.haifa.ac.il
Yehuda Lindell†巴伊兰 大学计算机科学系,以色列 lindell@biu.ac.il

认证加密方案可同时保证隐私性和完整性,已成为现代协议中默认的加密级别。目前最受欢迎的认证加密方案之一是 AES‐GCM,因其出色的速度而受到青睐。当前的CAESAR 竞赛正在评估用于认证加密的新模式,以改进现有方法。如今,由于多个实际案例中出现随机性来源故障,人们越来越关注一个重要的特性:重复使用随机数(nonce)和初始化向量(IV)可能对安全性造成灾难性影响。一种(完整)抗随机数误用的认证加密方案具有如下特性:若使用相同的 nonce 对相同的相同消息进行两次加密,则会得到相同的密文,从而可检测出加密的是相同消息;否则,即使对不同消息使用了相同的 nonce,也会得到 full security。

在本文中,我们提出了一种新的基于AES‐NI和 PCLMULQDQ指令集的完整抗随机数误用的认证加密方案,该方案通过精心组合GCM构建模块与罗加瓦伊和史林普顿的SIV范式相结合而成。我们为我们的方案提供了完整的安全性证明,并使用AES‐NI和PCLMULQDQ指令集实现了优化实现。我们将我们的性能与OpenSSL 1.0.2对GCM的高度优化实现进行了比较,结果表明,我们的 nonce misuse-resistant 方案在Haswell架构上仅慢14%,在Broadwell架构上仅慢19%。在Broadwell架构上,GCM‐SIV加密仅需 0.92 cycles per byte,而GCM‐SIV解密与GCM解密完全相同,仅需0.77每字节周期数。此外,我们还与Bogdanov等人进行的其他优化认证加密实现进行了比较,得出结论:我们的模式极具竞争力。除了速度非常快之外,我们的新操作模式使用与GCM相同的构建模块,因此现有的硬件和软件可以被利用来轻松部署GCM‐SIV。我们得出结论: GCM‐SIV是GCM的一个可行替代方案,在几乎不增加成本的情况下提供了完整的抗随机数重用攻击能力。

1. 引言

认证加密

如果一个对称加密方案同时提供隐私性和完整性,则该方案实现了认证加密。非正式地说,这种方案可保证没有任何攻击者能够生成一个可解密为有效值的密文,并且明文的加密结果彼此之间是不可区分的。传统上,认证加密通过“先加密后认证”的范式实现,即首先进行加密,然后对得到的密文应用消息认证码 [5, 13]。这种方法论是可靠的,但通常效率较低。在[18]中,对组合方法进行了更广泛的研究,考虑了多种不同选项和安全目标。然而,在许多情况下,人们提出了专用的加密模式,以优化高性能。如今使用最广泛的此类模式之一是GCM,其在最新的Intel架构上具有非常快的性能。例如,在代号为Broadwell的架构上,其实现了每字节0.77个周期(以下简称C/B)的性能1。许多认证加密模式已被提出,目前正在开展的CAESAR竞赛正在评估其中的一些方案。

初始向量(IV)和随机数误用抵抗性

长期以来,认证加密被认为是针对对称加密方案的最高安全级别。确实,从对抗能力角度来看,情况确实如此。然而,人们发现,在许多情况下,加密过程可能会出现问题。例如,当需要随机初始向量(IVs)并在随机性较弱的设备(如手机)上执行加密时,IV 很可能以高概率重复。同样的问题也出现在强设备上,当随机源有缺陷时。同样,在基于随机数的加密方案中(要求每次使用唯一的随机数),重复

1 Broadwell(以及类似的 Haswell)是英特尔最近公布的一种微架构的架构代号。Broadwell 是第五代英特尔 R © Core处理器,Haswell 是第四代英特尔 R © CoreTM处理器。它们在不同的产品中可以有不同的配置。此后,为简洁起见,我们将其简称为 Broadwell 和 Haswell(或 BDW/HSW)。

109

在实践中,随机数的重复使用会发生并损害安全性。2要理解为何重复使用初始向量(IVs)或随机数(nonces)会导致灾难性后果,可以考虑计数器模式加密中计数器被重复使用的情况。在这种情况下,所有安全性都会丧失(攻击者可以轻易检测到这种情况,并通过将密文进行异或运算,从而获得明文的异或结果)。另一个例子是GCM加密,如果初始计数器被重复使用,则会完全破坏其完整性属性,攻击者在观察到两次加密后,便可在将来随意生成任意数量的伪造密文。

这些观察促使罗加瓦伊和史林普顿在其突破性工作中定义了抗随机数误用的认证加密[20]这一概念。具有此属性的加密方案提供了极高的安全性:如果使用相同的nonce加密相同的消息,则攻击者会通过两次获得相同的输出而检测到这一点;否则,将实现完全安全性。这意味着,使用相同nonce加密不同消息时,除了暴露消息不同之外,不会泄露任何信息。这种加密方案可以安全地应用于无法信任设备生成高质量随机性的场景。事实上,建议始终使用抗误用的加密方案,因为由于软件缺陷,低质量的随机性问题已多次出现。然而,抗随机数误用的认证加密本质上效率较低,因为它需要对数据进行两次遍历。

我们指出,已提出一种较弱的抗随机数重用攻击概念,在随机数重复的情况下允许泄露更多信息。具体而言,如果两个消息之间的随机数发生重复,并且这两个消息具有公共前缀,则该事实以及公共前缀的长度[6]将被泄露。此定义允许实现对 online encryption的支持,即加密器无需在任何时候保存整个明文(而在[20]所定义的更严格概念下这是无法实现的)。在本文中,我们采用更强的概念。

我们的贡献

在本文中,我们提出了一种新的快速加密模式,可实现 nonce misuse-resistant authenticated encryption。

我们的加密模式基于GCM加密模式,并谨慎结合了GCM中使用的构建模块与[20]中的SIV构造范式;我们将此模式称为 GCM‐SIV。我们的操作模式首先对明文和任何关联认证数据应用 GHASH(GCM认证器),然后对与初始化向量异或后的结果应用一个伪随机函数。我们证明了该函数在随机数、明文和关联数据上是一个伪随机函数,因此该结果可用作CTR模式中的初始化向量。因此,这是[20]中证明的初始化向量误用抵抗性模式的一个高效实例(并在[18]中进一步抽象)。

除了对方案的完整规范和安全性证明外,我们还提供了 GCM‐SIV的优化实现,并在Haswell和Broadwell Intel架构上将其性能与GCM进行比较。我们将我们的性能与在同一架构上的 highly optimized OpenSSL(v.1.0.2) implementation of GCM进行比较,并提供精确的周期数

在本文中,我们将初始向量(IVs)定义为必须被 randomly 选择的值,而随机数 (nonces)只需不重复即可。

计数。(我们认为,这种详细的研究对于真正理解新型加密模式的效率至关重要。)我们构造方案的优势在于:

  1. 部署简便性 :我们的构造使用与GCM相同的构建模块。因此,现有的代码库(以及硬件实现)可用于实现 GCM‐SIV。这在采用新的操作模式时是一个重要考虑因素。此外,我们的构造仅使用AES加密(而不使用其逆运算)。

  2. Intel架构上的加密性能 : GCM‐SIV的加密性能接近 GCM。在加密方面,GCM‐SIV在Haswell(分别为 Broadwell)上仅比GCM慢14%(分别为19%)。这种差异的原因在于,在GCM中可以使用英特尔AES‐NI和 PCLMULQDQ指令并行执行GHASH和AES操作,而在 GCM‐SIV中这些操作必须依次计算。

具体而言,我们的实现在Haswell架构上以每字节1.17 周期数运行,在最新的Broadwell架构上以每字节 0.92周期数运行。因此,我们在最新的英特尔架构上实现了完整的抗随机数重用攻击能力 with encryption costing less than one cycleper byte!

  1. 其他架构上的加密性能 :GCM‐SIV 在支持 AES‐NI 和无进位乘法(以某种形式)的 every架构 上运行速度快。当前的趋势是,大多数(即使不是全部)新的 64位架构 都提供此类支持。一些示例包括 AMD(推土机)和 英伟达 (丹佛)、ARM小核(A53)和 大核(A57),以及 苹果 (A7/A8)。凭借这种普遍的支持,AES‐GCM(因此我们的 GCM‐SIV)将在大多数现代平台上获得最佳性能。

我们注意到,在不支持 AES‐NI(且使用单线程)的架构上,GCM‐SIV 的开销与单独使用 GCM 相同。这是因为在这些架构上,GCM‐SIV 所执行的操作与 GCM 几乎完全相同,且单线程下 GCM 的计算无法并行化。

  1. 解密性能 : GCM‐SIV 的解密成本与 GCM 的解密成本 exact相同。这是因为它们具有相同的操作,并且在解密时都可以并行化。两者在 Broadwell 上均达到每字节 0.77 周期的速率。

  2. 短消息的加密 : 对于短消息(最多 32 字节), GCM‐SIV 实际上比 GCM more efficient。因此,在密钥封装以及需要发送大量短消息的场景中更具优势。

总之,GCM‐SIV 以极低的实际成本实现了 full抗随机数误用的认证加密。它具有安全性证明和完整实现,以验证其实际成本。最后,由于在多种处理器上已具备硬件支持,因此易于部署。

与其他完整抗随机数重用方案的比较。我们将GCM‐SIV与其他提供相同级别随机数误用抵抗性的方案进行比较。显然,GCM‐SIV比[20]中的原始SIV快得多,因为原始SIV使用的 是不可并行的CMAC。因此,在使用AES‐NI的平台上,性能主要受AES‐NI延迟的影响(Broadwell/Haswell上为7个周期),每字节周期数为4.44。因此,原始SIV方案在 Broadwell/Haswell上的性能至少为每字节5个周期。

HBS和BTM操作模式[14, 15]与我们的实现具有类似的 theoretical complexity。然而,我们的方案要简单得多,在小消息上我们的模式更快,并且重要的是,我们可以重用已广泛部署的GCM软件和硬件。最后,我们有一个完全优化的实现来验证我们对效率的主张,而据我们所知,目前尚无针对 HBS和BTM的此类结果。

在CAESAR竞赛的候选算法中,唯一实现完整抗随机数重用攻击的三种方案是AEZ [12],、Julius [2]和HS1‐SIV [16]; 另见[1]。在Broadwell平台上,AEZ(针对长消息)可达到 0.7 每字节周期数 的吞吐量[12]。AEZ相对于GCM‐SIV的这一性能优势仅存在于加密过程,而不适用于解密。此外, AEZ满足一种稍强一些的安全性形式,称为 robust认证加密。然而,这需要依赖一个非标准的安全假设作为代价;具体而言, AEZ内部使用的AES仅包含4轮运算,因此并非完整的分组密码操作。Julius(ECB/CTR)每块需要1次AES计算和2次域乘法运算。基于AES‐NI指令集对Julius进行的优化软件实现 由[3]完成,如下所述。如表1所示,其性能明显低于 GCM‐SIV。

HS1‐SIV 采用了不同的方法,旨在在没有 AES‐NI/PCLMULQDQ 指令的平台上实现良好的性能(例如 嵌入式系统)。ChaCha20/Poly1305 是另一种认证加密方案,针对不支持 AES‐NI/PCLMULQDQ 的 CPU 实现高性能。它 在小型设备客户端平台上正变得流行。然而,在具备 AES‐NI/PCLMULQDQ 指令的平台上(例如处理此类连接的 服务器以及最新且配备强大 CPU 的移动设备),由于专用硬件支持的存在,ChaCha20/Poly1305(流密码和认证器)的 性能不及 GCM‐SIV(以及 AES‐GCM)。经过优化的 ChaCha20(即仅加密)在 Broadwell 上消耗约每字节 1.04 周期,而我们所知最快的 Poly1305 实现在 HSW/BDW 上达到 0.67/0.66 每字节周期数。这明显慢于这些平台上的 GCM‐SIV。

除了上述内容外,[19]最近提出了一种抗随机数误用的 OMD 版本。他们的方案每个块需要 2 次 AES 操作,因此使用优化代码和 AES‐NI 时每字节至少需要 1.3 周期。

在HSW上与抗随机数重用的认证加密模式的比较。在最近的一篇文献[3],中,Bogdanov 等人报告了在英特尔Haswell架构上 针对认证加密操作模式的优化AES‐NI实现。在表1中,我们列出了抗随机数误用方案的结果,并将其与我们的结果进行比较。我们注意到,在这些模式中,只有Julius实现了完整的抗随机数重用攻击;其他模式实现了在线加密,因此仅达到较弱的概念

消息长度(字节) Mode 128 256 512 1024 2048
McOE‐G 7.77 7.36 7.17 7.07 7.02
COPA 3.37 2.64 2.27 2.08 1.88
POET 5.30 4.93 4.75 4.68 4.62
Julius 4.18 4.69 3.24 3.08 3.03
GCM‐SIV 2.20 1.66 1.41 1.28 1.22

表1:GCM‐SIV(底行)与抗随机数误用方案的AES‐NI优化实现(顶行)的性能比较,数据来自[3] 。测量基于 Haswell处理器,单位为每字节周期数。

误用抵抗性。[3] 的优化实现针对单条消息和并行处理的多条消息;参见表1。

请注意,对于所有消息大小,GCM‐SIV 都比 Julius 更快,甚至在考虑 Julius 的并行多条消息速度与 GCM‐SIV 的单条消息速度时也是如此。[3]显示的最快模式是 COPA [4]。注意,在处理单条消息时,对于所有消息大小,GCM‐SIV 显著快于 COPA。此外,对于 large messages(大小超过 512 字节),即使将 COPA 的并行多条消息与 GCM‐SIV 的单条消息进行比较,GCM‐SIV 也优于 COPA。(相比之下,对于短消息,COPA 在处理多条消息时最多快 25%。但请记住, GCM‐SIV 实现了比 COPA 更高的安全性,且 COPA 仅在并行处理多条消息时更快。)

这种比较显著地揭示了GCM‐SIV的效率,因为它将其与在完全相同架构上高度优化的类似模式实现进行了对比。3

结构

我们使用 [20, 18] 中定义的 CPA‐安全的基于初始化向量的加密(ivE)、基于随机数的认证加密(nAE)以及抗随机数误用的认证加密(mrAE)的概念。为了完整性,这些定义在附录 A 中重复给出。在第2节中,我们描述了 Rogaway 和什里普顿 [20], 提出的抽象 SIV 方案;在第3节中,我们提出并证明了基于任意异或通用哈希函数和任意伪随机函数的具体实例化的安全性。我们的证明包含具体分析与边界。在第4节中,我们描述了最终的具体方案,该方案使用 GCM 中的 GHASH 通用哈希函数和 AES。最后,在第5节中,我们提供了对

3 需要强调的是,McOE‐G、COPA 和 POET 并未实现完整抗误用方案,仅实现了称为“在线认证加密”的较弱的概念。然而,与任何完整的抗误用方案不同,它们确实支持单次遍历和恒定内存的在线加密。尽管如此,这种比较有助于理解 GCM‐SIV 的性能。

111

我们的方案的性能。我们的分析包括精确操作计数以及实验结果的描述。我们提供了在Haswell和Broadwell上对不同大小的消息的实际周期计数,并将其与优化的OpenSSL(v.1.0.2)实现的GCM的实际周期计数进行比较。

2. 抽象SIV加密方案

在[18],中,研究了多种认证加密的构造方法。其中称为 A4的构造方法是SIV操作模式[20]的一种推广,已被证明具有抗随机数重用特性。在本节中,我们描述这一抽象。

令 FK1:{0, 1}∗→{0, 1}n 为一个伪随机函数,并令 (Gen, Enc,Dec) 为一个 CPA安全的基于IV的加密方案。为简便起见,我们假设所有密钥的长度均为 n。令 k 为一个参数,使得最大消息长度为 2k · n 比特。

设Encode为一个函数,该函数将其(多个)输入以字符串形式输出为唯一编码。因此,Encode(x, y) 完全确定了输入对 x 和 y。我们指出,简单地将 x与 y拼接并非唯一编码,因为这意味着Encode(x, y) = Encode(x‖y1, y2),其中 y= y1‖y2和 ‖ 表示拼接。

Construction 2.1.

  • 密钥生成 : K1, K2 ∈{0, 1}n chosen uniformly and independently at random
  • 使用关联数据 A 和随机数 N 对 M 进行加密
    1. Compute T= FK1(Encode(N, A, M))
    2. Let IV be the n − k most significant bits of T,4 and compute C= EncK2(IV, M)
    3. Output:(N, A, C, T)
  • 解密 (N, A, C, T)
    1. Let IV be the n − k most significant bits of T.
    2. Compute M= DecK2(IV, C)
    3. Compute T′ = FK1( N, A, M)4.输出:
    If T′ = T then output(A, M); else out-put ⊥

安全性

在[18],中证明了以下内容(该构造在[18]中称为A4)。

Theorem 2.2 (Proven in Section A.3 of[18]) .
If is a secure IV-based encryption scheme and F is a pseudorandom function ,, then Construction 2.1 (Gen Enc Dec),, denotedΠ is a secure nonce-based authenticated encryption scheme.

具体而言,[18,附录A.3]证明了对于该构造的任何攻击者的 nAE优势 A为:
Adv nAE Π(A) ≤ Adv prf F (B(A))+ Adv ivE Enc(D(A))+ qd 2n

这在抽象SIV方案中不是必需的,但我们稍后会用到这一点。

参数如下。设 n为伪随机函数的输出长度。设 A向其加密预言机提出 qE次查询,向其解密预言机提出 qd次查询,其中 q= qE+ qd。加密查询的总长度为Le,解密查询的总长度为 Ld,其中L= Le+ Ld。设 tA为 A在给定此查询总数和长度情况下的运行时间,设 tF(L)为在长度为 L的输入上计算伪随机函数 F所需的运行时间,类似地, tEnc(L)为底层ivE 加密的运行时间。则归约 B的运行时间至多为tA+ 2tF(L) + tEnc(L),向其预言机最多提出2(qE+ qd)次查询,总长度至多为 L。归约 D的运行时间为 tA+ tF(L) + tEnc(Le),向其预言机最多提出 qE次查询,总长度至多为 Le。

定理2.2 考虑的是基于随机数的认证加密。然而,我们必须证明随机数 misuse-resistant au 认证加密。为了说明这一点成立,注意到只要每次输入到伪随机函数的内容不同,基于随机数的认证加密的安全性就成立,因为这保证了每次输出都是伪随机的(最多不超过发生碰撞的概率)。在基于随机数的加密设置中,这一点通过始终使用不同的随机数来保证。然而,在此构造中,由于伪随机函数应用于整个三元组 (N, A, M),因此只要相同的 (N, A, M) 不被使用两次,它每次都会接收到不同的输入。而这正是抗随机数误用设置中的情况。因此,我们得出结论:在此设置下实现了完全相同的安全性和安全边界。我们总结如下:

Corollary 2.3 . If(Gen, Enc,Dec) is a secure IV-based encryption scheme and F is a pseudorandom function then Construction 2.1 denotedΠ ,,, is a secure nonce misuse-resistant authenticated encryption scheme. In addition ,
Adv mrAE Π (A) ≤ Adv prf F(B(A))+ Adv ivE Enc(D(A))+ qd 2n
where B, D, qd and n are as above.

3. 通用‐SIV 实例化

在本节中,我们将描述我们的通用‐SIV构造,它是第2节中提供的抽象构造的实例化,具体如下:

应用于数据(关联认证数据以及明文)的伪随机函数是通过在数据上计算通用哈希函数,异或操作加入随机数,然后对结果应用一个伪随机函数来构造的。

所使用的加密方案是CTR模式,其中初始计数器为 n − k 位长,块中剩余的 k位用于消息的计数器,该消息最多包含 2 k个长度为 n的块。请注意,只要不重复使用相同的初始计数器,任何块中的计数器都不会被重复使用。

3.1 通用‐SIV规范

该方案使用以下基本组件:

  • 一个 ε { 0, 1 } ∗ → { 0, 1 } n H K 1 ε ‐异或通用哈希 函数:。形式上,若对于每个 x, y , z ∈ { 0, 1 } ∗,都有Pr K 1 [ H K 1 (x)⊕ H K 1 (y) = z ] ≤ ε(n)成立,则称该哈希函数为‐异或通用,其中概率是相对于 K1 的选择。为简便起见,我们假设密钥长度为 n。
  • 一个伪随机函数 FK2:{0, 1}n→{0, 1}n;为简便起见,我们假设密钥长度为 n。
  • 参数 k< n,其中 2k · n是最大消息长度。
  • GCM编码函数 Encode(x, y) . 这种编码方式通过添加一个额外的128位块来实现,其中前64位包含 x的长度,后64位包含 y的长度。

Construction 3.1.(分组长度为 n的通用SIV方案):

  • 密钥生成 : K1, K2, K3 ∈{0, 1}n chosen uni-formly and independently at random
  • 使用关联数据 A 和n位随机数 N 对 M 进行加密
    1. 步骤 1: Compute h= HK1(Encode(A, M))
    2. 步骤 2: Compute T= FK2(h⊕ N)
    3. 步骤 3 Encrypt M with CTR mode using the pseudorandom function F with key K3. The ini-:
    tial counter is taken to be the n − k most sig-nificant bits of T followed by k zeroes. Denote the initial counter by I1‖I2 where I1 ∈{0, 1} n−k and I2= 0k; stated otherwise , the initial counter equals I1 ·2 n−k + I2. The j th counter is defined to be I·2 n−k +[ I2+j 2 k ] f or j= 0… 2 k −1.()mod,, Denote the resulting ciphertext by C
    4. 输出:(N, A, C, T)
  • 解密 (N, A, C, T)
    1. 步骤 1: Decrypt C with CTR mode using F with key K3, and using the n − k most significant bits of T as the in tial counter; denote the resulting plaintext by M.
    2. 步骤 2: Compute h= HK1( Encode(A, M))
    3. 步骤 3: Compute T= FK2( h⊕ N)
    4. 输出: If T′ = T then output ; else out-put ⊥. A M (,)

我们注意到,对于标准的基于随机数的认证加密,取 T= h⊕ F K 2 (N)即可。然而,如果以这种方式计算 T,并且在两个不同消息中重复使用随机数 N,其哈希结果分别为 h, h′,则可能将两个标签进行异或,从而得到 h ⊕ h′(因为掩码F K 2 会消失)。在这种情况下,攻击者可以获得两条消息及其哈希值,并能够伪造消息(因为这足以学习 H的密钥 K 1 )。出于这一原因,我们将标签计算为T= F K 2 (h⊕ N)。形式上,要求 T通过将伪随机函数应用于(N, A, M)来计算,如构造2.1中所述。

5 此处必须使用恒定时间比较函数。

3.2 通用‐SIV 的安全性证明

符号说明

我们提供了一个具体的安全性分析,计算了攻击者的运行时间、他们的预言机查询次数以及他们的优势。对于一个攻击者 A,我们用 t(A) 表示其运行时间,用 q(A) 表示其进行的预言机查询次数。为了清晰起见,我们区分不同类型的预言机查询:用 qE(A) 表示对加密预言机的查询次数(在存在此类预言机的情况下),用 qD(A) 表示对解密预言机的查询次数(在存在此类预言机的情况下),用 qf(A) 表示对函数预言机的查询次数(用于区分伪随机函数与随机函数的攻击者)。最后,对于一个函数 F,我们用 tF(L) 表示在总长度为 L 的输入上计算 F 所需的时间。

安全证明

根据推论2.3,为了证明安全性,我们需要表明 FK1,K2(N‖M) d=ef FK2(HK1(M)⊕ N) 当 H是从{0, 1}∗→{0, 1}n出发的 ε‐异或通用哈希函数时,是一个来自{0, 1}n→{0, 1}n的伪随机函数。(注意,此处的 M包含了加密过程中使用的关联数据和明文消息的编码。为了清晰起见,我们移除了对 A的显式引用。) 在证明 F确实是一个伪随机函数之前,我们通过以下实验来定义伪随机函数的安全性:

实验 Expt b A,F

  1. 如果 b= 0,则随机选择 K 并设置 O= FK。否则,如果 b= 1,将 O 设为一个真正的随机函数 f:{0, 1} ∗→{0, 1} n。
  2. b′← AO(·)
  3. 当且仅当 b′= b 时 输出 1

Definition 3.2 . A family of functions F is a(t, qf , δ)‐伪随机函数 if for every adversary A running in time at most t and asking at most qf queries to its oracle itholds that, Advp rf F(A) def = ∣ ∣ Pr[Expt 0 A,F = 1] − Pr[Expt 1 A,F = 1] ∣∣≤ δ.

回想一下, tH(L) 表示计算长度为 L 的整体输入上的通用哈希函数 H 所需的时间, t(A) 表示算法 A 的运行时间,而 qf( A) 表示 A 对其函数预言机的查询次数。我们使用以下引理:

Lemma 3.3 . Let F be a family of pseudorandom func-tions from{0, 1} n to{0, 1} n and let H be a family of ε-XOR universal hash functions from{0, 1} ∗ to{0, 1} n . Define FK1 K 2 N‖M= F K 2 H K 1 M ⊕ N. Then F is a , ,()( ()),family of pseudorandom functions from{0, 1} ∗ to{0, 1} n , and there exists an adversary A1 such that f or every adver-sary A : Adv p rf F(A) ≤ Adv p rf F (A1) + ε ·(q f(A) 2) where t and the overall len g th o f messa g e sent b y A to its oracle is L. A 1 = t A+ t H L A q f A 1 = q f A ()()() · q f ()()()

113

证明: 在开始证明之前,我们使用特定方案重写伪随机函数实验:

实验 ExptAb,F(1n)

  1. 如果 b= 0 O= FK2 ◦ HK1 K1 K2 ←{0, 1}n , 则选择,,并设置。否则,如果 b= 1,将 O 设置为一个真正的随机函数 f:{0, 1}∗→{0, 1}n。
  2. b′← AO(·)(1n)
  3. 当且仅当 b′= b 时输出 1

我们首先将实验改为 ExptA,f,H(1n),其中 K1 如上所述选择,但在 b= 0 的情况下,使用一个真正的随机函数 f: {0, 1}n→{0, 1}n 来替代 FK2(因此在 b= 0 时为 O= f ◦ HK1)。通过一个直接的归约到 F 的伪随机性, 可得对于每个攻击者 A1,

∣ ∣Pr[Expt 0 A,F= 1] − Pr[ExptA,f,H= 1] ∣∣≤ Adv prf F(A1).(1)

攻击者 A1在攻击底层伪随机函数时调用 A,自行选择 K1 , 并通过首先计算 HK1(M) ⊕ N,然后将结果发送给其预言机, 来回答 A的每一个预言机查询 M‖N。如果 A1收到的是一个真正的随机函数作为预言机,则这完美地模拟了ExptA,f,H;相反, 如果 A1收到的是伪随机函数 F作为其预言机,则这完美地模拟了Expt0A,F。 A1的运行时间恰好等于 A的运行时间加上qf次 H 的计算时间,且A1对其预言机的查询次数与 A所进行的查询次数完全相同。因此, t(A1) = t(A) + tH(L) · qf(A),且 qf(A1) = qf(A)。

接下来,我们证明对于每个向其预言机进行 qf次查询的攻击者 A ,

∣ ∣ Pr[ExptA,f,H(1 n )= 1]−Pr[Expt 1 A,F(1 n )= 1] ∣∣≤ ε·(qf(A) 2). (2)

为了说明这一点,首先考虑事件 coll,当且仅当存在两个由 M‖N, M ′‖N ′ 发起的查询M‖N 6= M ′‖N ′ ⊕ N= H K 1 M M ′ ⊕ N ′, 使得()()成立时,事件 coll 等于 1。此时,成立:

Pr[ExptA, f ,H(1 n )= 1 | ¬coll]= Pr[Expt 1 A,F(1 n )= 1].

这是因为当 HK1( M) ⊕ N 6= HK1( M ′ ) ⊕ N ′对于 A向预言机查询的每一对不同的 M‖N, M ′‖N ′成立时,实验中输入到 f的所有输入都是不同的。因此,实验中关于 f(HK1( M)⊕N) 的输出分布与实验1中关于 f(M‖N)的输出分布相同。由于 Pr[ExptA, f ,H(1 n )= 1] = Pr[ExptA, f ,H(1 n )= 1 | ¬coll] · Pr[¬coll] + Pr[ExptA, f ,H(1 n )= 1 | coll] · Pr[coll] ≤ Pr[ExptA, f ,H(1 n )= 1 | ¬coll]+ Pr[coll]

接下来需要证明 Pr[coll] ≤ ε ·(q f 2).

为了理解这一点,注意到 A从未接收HK1 (M) ⊕ N,而是 接收 f(HK1 (M) ⊕ N),其中f是一个真正的随机函数。因此, A对K1 一无所知。直观上,这意味着 A所进行的查询发生 碰撞的概率与相同情况下发生的概率相同 如果先进行所有查询,然后随机选择K1,则会发生碰撞。为了 形式化地证明这一点,我们修改实验ExptA,f,H(1n),使得 在第 i次查询时,输出 f(i)被给出(我们不妨假设A永远不会 对预言机进行两次相同的查询)。然后,在实验结束时,随机 选择 K1,并在所有查询到预言机的值 M‖N上计算HK1(M) ⊕ N。只要不发生碰撞, A在两个实验中接收到的输出分布 是相同的。此外,如果发生了碰撞,则碰撞已经发生,之后对 A视图的影响不再重要(因为碰撞已经发生,而我们只关心是 否发生碰撞)。因此,两个实验中的碰撞概率是相同的。

在这个实验中,对于向预言机进行的一系列 qf distinct 查询M1‖N1,…, Mqf‖ Nqf,我们有

Pr[coll]= Pr[∃i, j ∈[qf]: HK1(Mi)⊕ Ni= HK1(Mj)⊕ Nj] = qf−1 ∑ i=1 qf ∑ j=i+1 Pr[HK1(Mi)⊕ HK1(Mj)= Ni ⊕ Nj] =(q2f) · ε.

其中概率是相对于指定具体哈希函数 H的 K1的选择而言的。 注意,最后一个等式成立是因为 H是一个 ε‐异或通用哈希函数。

结合方程(1)和(2),我们得到 Advprf F(A)= ∣

GCM‐SIV:低于每字节一个周期的完整抗随机数误用的认证加密

3.2 通用‐SIV 的安全性证明(续)

∣Pr[Expt 0 A,F= 1] − Pr[Expt 1 A,F= 1]∣ ≤ ∣Pr[Expt 0 A,F= 1] − Pr[ExptA,f,H= 1]∣ + ∣Pr[ExptA,f,H= 1] − Pr[Expt 1 A,F= 1]∣
≤ Advprf F(A1)+ ε ·(qf(A) 2)

并且这完成了证明。

基于伪随机函数的计数器模式的安全性是众所周知的。此处我们给出对最多包含 2 k − 1块且初始计数器长度为 n−k 位的消息进行加密的安全性界。这确保了只要初始计数器各不相同,伪随机函数每次都会应用于不同的输入。由于我们考虑的是随机初始计数器的情况,因此计数器重复的概率至多为 q E ( A 2 / 2 n − k ),其中 qE(A)是攻击者 A对加密预言机的查询次数。该安全性归约非常直接,伪随机函数的攻击者只需向其预言机查询所有相应的计数器即可。因此我们得出:

Lemma 3.4 Let F be a pseudorandom function {0, 1} n →{0, 1} n. Then there exists an adversary A2 making such that for every adversary A:
Adv ivE Enc(A) ≤ Adv prf F(A2) + qE(A)² / 2ⁿ⁻ᵏ.
其中 t(A2) = t(A) + L e(A) 且 q f (A2) = L e(A)/n,qE 为 A 对其加密预言机的查询次数,Le(A) 为其查询的所有明文的总长度,qf 为 A2 对其函数预言机的查询次数。

我们现在准备陈述为主构造提供安全性界限的主要定理(我们用Π表示构造3.1):

Theorem 3.5 Let F be a pseudorandom function and let H be an ε-XOR universal hash function. Then Construction 3.1 is a nonce misuse-resistant authenticated encryption scheme and there exists an adversary A′ for F such that for every A attacking Construction 3.1:
Adv mrAE Π (A) ≤ 2·Advprf F(A′)+ε·(qE(A)²)+ qE(A)² / 2ⁿ⁻ᵏ + qd(A) / 2ⁿ.
(A′ 的运行时间和预言机查询复杂度在证明中给出。)

证明 :根据推论2.3,我们有:
Adv mrAE Π (A) ≤ Advprf F(B(A)) + AdvivE Enc(D(A)) + qd(A)/2ⁿ
其中 F 是结合了通用哈希和底层伪随机函数的伪随机函数。根据引理3.3,存在一个攻击者A1,使得
Advprf F(A) ≤ Advprf F(A1) + ε ·(qf(A)²)
并且根据引理3.4,我们有存在一个攻击者A2使得
AdvivE Enc(A) ≤ Advprf F(A2) + qE(A)² / 2ⁿ⁻ᵏ.

现在,攻击者 B(A) 是一个 PRF 对手,其运行时间最多为 t(A) + 2tF(L) + tEnc(L)(其中 L 是 A 向预言机查询的值的总长度),并向其预言机提出最多 2(qE(A) + qd(A)) 次查询。此外,攻击者 D(A) 是一个 ivE 加密攻击者,其运行时间为 t(A) + tF(L) + tEnc(L),并向其预言机最多提出 qE(A) 次查询。

设 A′ 为包含 A1 和 A2 的攻击者。那么,我们有:存在一个针对底层伪随机函数的攻击者 A′,使得对于 mrAE 场景中的每个攻击者 A:
- A′ 的运行时间在 A 的运行时间上基本上是线性的。
- A′ 对其函数或预言机的查询次数最多为 2qE(A)+2qd(A)+ L/n
- 在 mrAE 场景下,当归约到底层伪随机函数 F 时,A 的优势为
Adv mrAE Π (A) ≤ Advprf F(A′) + Advprf F(A′) + ε ·(qE(A)²) + qE(A)² / 2ⁿ⁻ᵏ + qd(A) / 2ⁿ.
这完成了证明。

4. GCM‐SIV实例化

在本节中,我们描述了通用‐SIV构造的一个具体实例化,该构造使用了GCM规范中的一部分——GHASH。因此,这种构造以略微不同的方式使用了与GCM完全相同的组件,结果实现了随机数误用抵抗性。在本节中,我们使用以下引理,该引理表明GHASH确实是一种异或通用哈希函数:

Lemma 4.1 (Lemma 2 in[17]) . The GHASH function is an ε-XOR universal hash function with ε= ⌈L/n⌉ + 1 · 2⁻ᵗ, where L is an upper bound on the length of the input, n is the length of the block and t is the length of the output.

4.1 理论上的三密钥实例化

在此实例化中,我们直接在构造3.1中使用GHASH通用哈希函数。该哈希函数首先对 A 和 M 各自拼接零,使它们的长度变为分组长度 n 的整数倍。然后,再拼接一个额外的块,其中包含 A 和 M 的长度(A 的长度位于该块的前 n/2 位,M 的长度位于最后 n/2 位)。最后,在此结果上计算一个多项式。

请注意,GHASH 需要一个密钥,应用于 GHASH 输出的伪随机函数需要一个密钥,最后在计数器模式中使用的伪随机函数也需要一个密钥。因此,此实例化需要三个独立的密钥。尽管这是一个完全合理的实例化方式,但在实际应用中通常认为三个密钥过多;因此我们将其称为“理论实例化”。稍后,我们将介绍 2 密钥和 1 密钥的实例化方式。

将GHASH直接代入构造3.1时,只需将引理4.1中给出的 ε 值代入定理 3.5 的界即可。

Theorem 4.2 (3-Key GCM-SIV) . Construction 3.1 with the pseudorandom function F and the hash function GHASH is a nonce misuse-resistant authenticated encryption scheme. Furthermore, there exists an adversary A′ for F such that for every A attacking Construction 3.1 making qE encryption queries and qd decryption queries of overall length L:
Adv mrAE Π (A) < 2 · Adv prf F(A′) + (⌈L/n⌉+1) · qE(A)² / 2ⁿ + qd(A)/2ⁿ + qE(A)² / 2ⁿ⁻ᵏ
where t(A′) ≤ 6 · t(A) and qf(A′) ≤ 2qE(A)+2qd(A)+ L/n.

证明 :我们在引理4.1中取 t=n,从而得到 ε= ⌈L/n⌉ + 1 · 2⁻ⁿ。将其代入定理3.5证明中的公式,我们得到:
Adv mrAE Π (A) ≤ 2 · Advprf F(A′) + ε ·(qE(A)²) + qE(A)² / 2ⁿ⁻ᵏ + qd(A)/2ⁿ
< 2 · Advprf F(A′) + (⌈L/n⌉+1) · qE(A)² / 2ⁿ + qd(A)/2ⁿ + qE(A)² / 2ⁿ⁻ᵏ
≤ 2 · Advprf F(A′) + 2qE(A)² / 2ⁿ⁻ᵏ + qE(A)² + qd(A) / 2ⁿ
其中最后一个不等式成立是因为 L ≤ 2ᵏ · n 且因此 ⌈L/n⌉ / 2ⁿ ≤ 1 / 2ⁿ⁻ᵏ。

运行时间及预言机查询次数直接取自定理3.5的证明。

在使用 n=128 和 k=32 的特定 AES 实例化中,我们得出结论:
Adv mrAE Π (A) < 2 · Advprf F(A′) + qE(A)² / 2⁹⁵ + (qE(A)² + qd(A)) / 2¹²⁸.

请注意,设置 k=32 将加密块的数量限制为 2³²,因此可加密的消息最大长度为64GB。这是标准做法,并在GCM的典型实现中使用。

4.2 双钥GCM‐SIV

在此实例化中,同一个密钥用于应用于GHASH输出的伪随机函数以及计数器模式加密(即我们采用 K2= K3)。实现此方式有两种可能的方法。第一种方法是简单地限定 GHASH 输出与可能的计数器发生碰撞的概率,但这将导致额外的生日衰减。另一种方法是使GHASH的输出始终不同于加密中使用的计数器。这通过将GHASH的输出截断为 n−1 位,并使用一个 n−1 位的随机数来实现。然后,生成 T 时用于伪随机函数的输入的最高有效位被设为 always 零。此外,初始计数器取为 T 的 n−k−1 最高有效位后跟 k 个零,并将最高有效位设为1。这确保了计数器永远不会与生成 T 时用于伪随机函数的输入重叠。从安全性的角度来看,这意味着可以重复使用相同的密钥而完全不影响安全性(仅需对伪随机函数进行一次归约)。

该变体得出以下界限(通过与三密钥情况相同的方法获得,但由于单比特而更改了确切参数):

Theorem 4.3 (2-Key GCM-SIV) . Consider the above variant of Construction 3.1 with one key for the pseudorandom function F and one key for the hash function GHASH. Then, the result is a nonce misuse-resistant authenticated encryption scheme and there exists an adversary A′ for F such that for every A attacking Construction 3.1 making qE encryption queries and qd decryption queries of overall length L:
Adv mrAE Π (A) < 2 · Advprf F(A′) + qE(A)² / 2ⁿ⁻ᵏ⁻² + (qE(A)² + qd(A)) / 2ⁿ⁻¹
where t(A′) ≤ 6 · t(A) and qf(A′) ≤ 2qE(A)+2qd(A)+ L/n.

4.3 单钥GCM‐SIV

在此最终实例化中,我们采用单个密钥 K₀,并通过计算 K₁= AESK₀(0¹²⁸) 和 K₂= AESK₀(0¹²⁷‖1) 推导出两个密钥 K₁ 和 K₂。然后我们按照双密钥情况进行操作。此处的界限几乎完全相同(额外增加了一个针对伪随机函数的 single query 归约,但在此并不显著)。

5. GCM‐SIV的性能

在本节中,我们对GCM‐SIV构造进行了详细的性能分析,并提供了在最新高端处理器上测得的优化软件实现的实验结果,这些处理器的架构代号分别为Haswell(HSW)和 Broadwell(BDW)。GCM‐SIV的性能取决于消息长度。我们以字节为单位测量消息长度 |M| 和关联数据长度 |A|。

5.1 加密操作

计算 GCM‐SIV 的计算成本是以下各项的和:
GCM‐SIV加密 = 密钥派生 + GHASH + 标签生成 + CTR输入生成 + CTR加密
我们将分别讨论每个组件。

  • 密钥派生 :仅在单密钥 GCM‐SIV 变体中需要进行派生(用于从输入密钥 K₀ 派生出 K₁ 和 K₂)。该派生过程需要扩展一个 AES 密钥,并使用它来加密 2 个块。
  • GHASH : 对于每个16字节的块或部分块(在明文消息 M 和关联数据 A 中),以及包含数据长度的一个块,都需要在 GF(2¹²⁸) 中进行一次域乘法运算。因此,域乘法的次数等于 ` = ⌈(|M|+|A|)/16⌉ + 1。
  • 标签生成 :从GHASH的输出生成认证标签需要执行AES密钥扩展 K₂,并使用它来加密一个块(用 IV 进行 XOR 的成本可以忽略不计,并将最高位强制设为1)。
  • CTR INPUT Generation : 这涉及在计数器模式加密中为 AES 准备输入块。将最高位强制设为0,并递增32位计数器(位于计数器块的最低有效四分之一部分)的开销可以忽略不计。
  • CTR加密 这是对预处理输入执行 ⌈|M|/16⌉ AES 操作的成本。(注意,用于加密的密钥在准备标签时已经展开。)

5.2 实现优化

在高端英特尔处理器上的软件实现使用了AES‐NI和 PCLMULQDQ指令。存在一些优化可显著提升性能,

HSW/BDW 字节数 GCM‐SIV 两个键 GCM‐SIV 一个键 AES‐GCM
16 149 / 136 297 / 241 1289 / 1263
32 198 / 171 318 / 284 1277 / 1318
64 322 / 281 444 / 417 1292 / 1335
128 516 / 440 645 / 568 1415 / 1371
256 674 / 566 800 / 694 1558 / 1417
512 966 / 796 1093 / 930 1808 / 1730
1,024 1566 / 1252 1695 / 1385 2312 / 2108
1,536 2159 / 1713 2274 / 1843 2816 / 2416
2,048 2751 / 2171 2869 / 2300 3372 / 2842
4,096 5118 / 4005 5244 / 4136 5332 / 4354
8,192 9862 / 7666 9994 / 7782 9521 / 7388
周期 GCM‐SIV 两个键 GCM‐SIV 一个键 AES‐GCM
133 / 121 133 / 121 178 / 172
178 / 153 178 / 153 219 / 217
319 / 278 319 / 278 236 / 238
282 / 262 282 / 262 293 / 266
426 / 401 426 / 401 421 / 385
722 / 626 722 / 626 760 / 651
1315 / 1085 1315 / 1085 1252 / 989
1907 / 1544 1907 / 1544 1714 / 1305
2498 / 1996 2498 / 1996 2287 / 1765
4867 / 3837 4867 / 3837 4296 / 3243
9611 / 7498 9611 / 7498 8399 / 6289
C/B GCM‐SIV 两个键 GCM‐SIV 一个键 AES‐GCM
8,192 1.2/0.94 1.22/0.95 1.16/0.9
C/B 1.17/0.92 1.17/0.92 1.03/0.77

表2: GCM-SIV在Haswell和Broadwell(HSW/BDW)架构上,针对不同消息长度的加密性能。提供了与AES‐GCM(OpenSSL 1.0.2)性能的比较。数字单位为周期,最后一行除外,其性能以每字节周期数(C/B)表示。

与直接实现相比。我们简要描述这些优化。

  1. 密钥派生 (仅适用于单密钥GCM‐SIV)可通过一种新的软件优化来减少,该优化高效地流水线化指令。我们能够在HSW/BDW架构上以84个周期完成此派生。
  2. 当消息包含超过8个块时,GHASH可以通过以下方式优化:(1)准备一个包含 H“幂”的查找表,(2)交错多项式乘法,以及(3)推迟对 Q(x)(域多项式)的模归约,使其每8个块才执行一次[10, 11]。另见[8]以获取相关分析和改进的归约方法。实际上,这将 GHASH 的成本降低至 次多项式乘法 + 1/8 次归约,而非 ` 次域乘法。我们能够使用此方法在HSW和BDW上分别达到0.56和0.3 每字节周期数(C/B)的渐近性能(针对 8KB 消息)。
  3. 对于足够长的消息,加密可以并行处理8个块,交错使用AESENC/AESENCLAST指令[7, 9]。我们在HSW和 BDW上均实现了0.63 每字节周期数的渐近性能。

Remark 5.1 . For long messages the setup cost is small, and the differences between one key and two keys become negligible. From the above data we can predict the performance(for long messages) to be the sum of G HASH and encryption which is 1.19 C/B for HSW, and 0.93 C/B for BDW.

5.3 与AES‐GCM的理论比较

AES‐GCM 使用 CTR 模式进行加密,GHASH用于认证。它使用单个密钥,并涉及一个派生步骤: H= AES K (0¹²⁸ ) 和 MASK= AES K (·)。 6 该掩码与GHASH结果进行异或运算,以生成MAC标签。这里, ·表示在 AES‐GCM中使用的第一个计数器块。

在计算 number of operations时,GCM和GCM‐SIV的性能大致相同。实际上,由于GCM‐SIV的计数器递增更为简单,因此其开销略低。然而,在加密方面,GCM与GCM‐SIV的主要区别在于操作顺序的可能性。根据定义,GCM‐SIV必须在认证标签计算完成后才能开始AES‐CTR加密。相比之下,GCM可以交错执行AES和GHASH计算(针对消息部分,而非附加认证数据)。这使得GCM加密比GCM‐SIV更快。

但是,对于解密,GCM‐SIV 也可以交错执行 AES 和 GHASH 计算,因此其性能与 GCM 相当。

5.4 实验结果

在本研究中,我们准备了一个优化的 GCM‐SIV 软件实现,并在 Haswell 和 Broadwell (HSW/BDW) 架构上对其进行测量。结果汇总于表2。该表提供了 GCM‐SIV 在不同消息长度下的周期计数,以说明其性能特征。我们将结果与 OpenSSL (1.0.2) 的优化 AES‐GCM 实现进行了比较。我们注意到,OpenSSL 中“Init”步骤的成本约为 1,100 周期。这包括其他操作,如查找表的准备、密钥设置等。因此,为了便于进行更详细的比较,表1 还展示了不包含 Init 步骤的 AES‐GCM 性能,以及不包含初始化的 GCM‐SIV 性能(这消除了 OpenSSL 在其 Init 步骤中执行的操作比我们在实现中更多的影响)。不用说,如表中所示,双密钥和单密钥变体在初始化之后是完全相同的。

表格的最后一行显示了长消息的每字节周期数(C/B)性能。请注意,测量得到的性能与注释5.1中的预测相符。

用于进行这些测量的方法论如下(GCM‐SIV 和 AES‐GCM 相同)。以下过程重复 30 次:先执行操作 500 次进行预热(例如,将代码/数据放入缓存中)。然后,计算并计时操作 500 次,取平均结果。表中出现的值是30次运行中的最小值。我们取最小值的原因是为了消除由操作系统中断引起的噪声。

所有运行均在启用了英特尔 ©R睿频加速技术、英特尔© R超 线程技术和增强型英特尔SpeedStep© R技术的系统上进行, 这些技术均为 disabled。

结果表明,对于最多32字节(包含)的数据,使用两个密钥的GCM‐SIV甚至比不带初始化的GCM更快。因此,对于密钥封装,GCM‐SIV是一个极佳的选择。在使用同一密钥加密大量短消息的场景中,它也非常高效(因为此处密钥派生仅执行一次,因此成本类似于不带初始化的情况)。

对于长消息,在“完整”实现中,如预期一样,我们看到 GCM‐SIV的双密钥版本与单密钥版本之间仅有非常小的差异。这使得从网络流量的角度来看,可以选择成本效益更高的变体(即单密钥)。 We observe that on the latest Broadwell architecture the cost of GCM-SIV encryption falls below 1 cycle per byte.

对于加密,表2显示GCM‐SIV在Haswell平台上的速度比 AES‐GCM慢14%,在Broadwell平台上比AES‐GCM慢19%。造成这一差异的原因是,经过优化的AES‐GCM软件能够交错执行 AES和 GHASH计算,而GCM‐SIV无法实现。需要指出的是,抗随机数重用攻击从理论上要求两次处理过程,因此必然带来一定的性能开销。然而,我们指出,在解密时,优化后的 AES‐GCM与GCM‐SIV将具有相同的性能,因为AES和 GHASH 操作可以交错执行。

我们对GCM‐SIV without initialization 64 128 在64字节和128字节消息下的性能进行说明。我们优化的GHASH代码在约简步骤之前准备了一个查找表,用于聚合8次分组乘法。当然,这只在消息长度至少为128字节时才变得有意义。如果设置成本未计入(包括查找表的准备),则会导致表2中出现看似异常的情况,即 128字节的GCM‐SIV耗时少于64字节的GCM‐SIV。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值