在Schnorr签名中重用临时随机数
摘要
可证明安全的Schnorr签名方案因其流行且高效而备受青睐。然而,每次签名都需要进行一次新的模幂运算,这通常是一项代价较高的操作。随着联网设备的普及重新激发了人们对资源受限签名算法的兴趣,我们提出了一种Schnorr签名的变体,该方案通过共享模幂运算来降低计算开销。
结合预计算技术(这些技术在原始的施诺尔算法中不会产生同样有趣的结果),我们可以将模幂运算的成本分摊到多个签名上:这些签名共享同一个临时随机数。共享临时随机数会对Schnorr签名造成致命打击,但对我们的方案而言并非安全问题。
我们的方案具有可证明的安全性,当结合高效的预计算技术时,其渐近速度优于Schnorr,并且在使用1兆字节静态存储的情况下,实验结果显示其速度比Schnorr快2到6倍。
1 引言
轻量级实现的日益普及激发了人们对资源保护协议的兴趣。有趣的是,这一研究方向在20世纪80年代末曾十分流行,当时智能卡开始执行公钥密码操作(例如 [11])。那时,密码处理器昂贵且笨重,研究界开始寻求巧妙的方法,在资源稀缺的情况下进行身份识别和签名。
在这项工作中,我们重新审视了施诺尔在 1989[23]年发布的一种流行签名算法,并假设签名者被允许维护一些只读存储器,以期降低其计算需求。该存储使得时间‐内存权衡成为可能,但在典型的施诺尔参数下,这种权衡通常并不十分有利。
本文档由 funstory.ai 的开源 PDF 翻译库 BabelDOC v0.5.10 (http://yadt.io) 翻译,本仓库正在积极的建设当中,欢迎 star 和关注。
1.1 直觉与想法的广义概述
施诺尔签名算法使用一个大的素数模 p和一个较小的素数模 q,该小素数整除 p − 1。该签名方案的安全性依赖于有限域 Zp的乘法群中阶为 q的子群上的离散对数问题(其中 q | p −1)。通常选择素数 p足够大,以抵抗求解离散对数问题的指数演算方法(例如,对于128位安全级别选择3072位),而 q需足够大以抵抗平方根算法[25](例如,对于128位安全性选择256位)。
我们构造的直观思路是考虑一个素数 p,使得 p−1 具有多个足够大以抵御生日攻击的不同因子 qi,即
$$
p = 1 + 2 \prod_{i=1}^{\ell} q_i
$$
那么多个“正交”的施诺尔签名可以共享相同的承诺分量 r = g^k mod p。而标准的Schnorr签名则不同,如果重用 k,秘密签名密钥将被泄露。
接下来需要找出如何快速计算 r。在原始Schnorr协议中,k是在 Z_q 中均匀随机选取的。然而,为了保证安全性,我们的构造要求 k在更大的集合 Z_{p−1} 中选取。这意味着计算 r需要更高的开销。在此,我们通过使用预计算技术生成 r来减少开销,这些技术使得模幂运算具有亚线性复杂度。关键在于,一旦模幂运算达到亚线性,我们在当前设定下的效率将高于原始Schnorr设定中的效率。
我们首先回顾原始施诺尔签名方案的工作原理,并解释在假设 k从 Z_{p−1} 中随机选取的情况下如何对其进行扩展。随后,通过比较几种预处理方案,展示我们构造方法的应用。
2 预备知识
我们用 κ ∈ N表示安全参数,该参数以一元形式 1^κ 提供给所有算法。除非另有说明,算法均为随机化算法,PPT 表示“概率多项式时间”,其针对的是安全参数。
我们用 x ← X表示根据均匀分布从有限集合 X中随机采样。我们还使用符号 ←表示来自随机化算法的赋值,而用符号 ←表示来自确定性算法和计算的赋值。如果 n是一个整数,我们用 Z_n 表示环 Z/nZ。我们令 Z*_n 表示 Z_n 中的可逆元。按照惯例,f ∈ negl(κ) 表示一个比任何关于 κ的多项式的倒数衰减都快的函数;这类函数称为可忽略函数。数字集合1,2,…,k记为[k]。我们的大多数安全定义和证明都采用基于代码的游戏。一个游戏 G包含一个初始化过程 Init、一个或多个响应预言机查询的过程,以及一个最终化过程Fin。
2.1 施诺尔签名方案
Schnorr签名[23]是ElGamal签名的衍生方案,该方案在随机预言模型下基于求解通用离散对数问题(DLP)的困难性假设是可证明安全的[10][21]。
Schnorr签名方案是由如下算法组成的元组:
– 初始化(1^κ):选择大素数 p 和 q,使得 q ≥ 2^κ 且 p−1= 0 mod q。选择一个阶为 q 的素数阶循环群 G ⊂ Z_p,假设在该群中离散对数问题(DLP)是困难的,并选择一个生成元 g ∈ G。选择一个哈希函数 H:{0, 1}* → G。公共参数为 pp = (p, q, g, G, H)。
– 密钥生成(公共参数):从 [2, q − 1] 中均匀随机选取一个整数 x 作为签名密钥 sk,并发布 y ← g^x 作为公钥 pk。
– 签名(pp, 签名密钥 sk, m):在 Z*_q 中均匀随机选取 k,计算 r ← g^k mod q,e ← H(m, r),以及 s ← k − ex mod q。输出 σ ← {r, s} 作为签名。
– 验证(pp, 公钥 pk, m, σ):令 (r, s) ← σ,计算 e ← H(m, r),若 g^s y^e = r 成立则返回 True,否则返回 False。
2.2 安全模型
我们回顾强1 EUF‐CMA安全性概念:
定义 1(强 EUF-CMA 安全性) 。如果任意 PPT 对手 A 在图1 中定义的 EUF-CMA 游戏中的优势为可忽略函数,则称签名方案 Σ 是在选择消息攻击下对存在性伪造安全的(强 EUF-CMA-安全):Adv EUF
与 weak版本不同,允许对手为其曾查询过的消息伪造签名,前提是其伪造的签名不是预言机响应。
3 我们的方案:使用多个 q
我们的构造依赖于使用引言中提到形式的素数 p。这一改动并非微不足道,需要谨慎处理,我们将在下文讨论这一点。
从技术上讲,我们的构造是一种有状态的签名方案(参见例如[15,第 12]章),其中我们同时仅对一条消息进行签名,并维护一个与值 k、g^k 以及当前素数的索引 i相对 应的状态。然而,将其描述为对多条同时消息的签名更为简洁和方便。
3.1 我们的签名方案
类似于施诺尔签名方案,我们的方案是由一组算法(初始化、密钥生成、签名和验证)构成的元组,我们将其定义如下:
– 初始化(1^κ):生成 ℓ 个大小为 ≥ 2^κ 的素数 q_1,…, q_ℓ,以及相应阶数为 q_1, … q_ℓ 的 ℓ 个群 G_1,…, G_ℓ,使得离散对数问题(DLP)在相应的 G_i 中是困难的,并且使得 p = 1 + 2∏ q_i 是素数。这可以通过选择 (ℓ − 1) 个安全素数 q_i 并调整最后一个素数直到 p 为素数来轻松实现。选择一个密码学哈希函数 H:{0, 1} → {0, 1}^{q_1}。该哈希函数将用于生成 Z_{q_i} 的元素。为此,我们用 H_i 表示 H 与从 {0, 1}^{q_1} 到 Z_{q_i} 的转换函数的复合函数。最后,选择 g 作为阶为 p −1 的群 Z p 的一个生成元。因此,公共参数为 pp = (p, {q_i} {i=1}^ℓ, H, g, {G_i}_{i=1}^ℓ).
– 密钥生成(公共参数):签名者选择 x ← Z*_p−1 并计算 y ← g^x mod p。密钥 sk = x由签名者私密保存,而验证密钥 pk = y则公开。
– 签名(pp, sk, m_1,…, m_ℓ):签名者选择 k ← Z_p,,使得对所有 i满足 k ≠ 0 mod q_i,并计算 r ← g^k mod p。
签名者现在可以对 ℓ 消息 m_i 进行签名:
ρ_i ← {0, 1}^κ, e_i ← H_i(m_i, r, ρ_i), and s_i ← k − e_i x mod q_i
输出 ℓ 签名 σ_i = {r, s_i, ρ_i}——或者以更紧凑的形式,
σ = {r, s_1,…, s_ℓ, ρ_1,…, ρ_ℓ}.
– 验证(pp, pk, m_i, (r, s_i, ρ_i), i):签名的验证通过略微修改原始的施诺尔方案实现:首先检查 s_i ∈ {0,… q_i − 1} 并计算 e_i ← H_i(m_i, r, ρ_i),然后观察到对于一个正确的签名:
$$
(g^{s_i} y^{e_i})^{\frac{p−1}{q_i}} = r^{\frac{p−1}{q_i}} \mod p.
$$
当且仅当该等式成立时,签名有效,否则签名无效(参见引理 1)。
备注 1 . 注意,与施诺尔不同,在签名算法中我们为签名添加一个随机的 ρ_i,以使哈希函数的输入不可预测。这将在随机预言模型中对定理1的证明有用。
备注 2 。还需注意,几乎可以还原原始的施诺尔构造 ℓ = 1——唯一的区别在于验证公式中,我们版本的两边都被平方,以及在哈希中添加了一个新鲜随机数。
引理 1(正确性) 。我们的签名方案是正确的。
证明 。设 g、y、r、s_i 和 ρ_i 是针对给定消息 m_i 由密钥生成和签名算法生成的。我们验证如下,
$$
(g^{s_i} y^{e_i} r)^{\frac{p −1}{q_i}} = 1 \mod p.
$$
根据 s_i 的定义,存在 λ ∈ Z 使得 g^{s_i} = g^{k−e_i x+λq_i},因此
$$
g^{s_i} y^{e_i} g^{-k} = g^{λq_i} \mod p.
$$
将其取 $\frac{p−1}{q_i}$ 次幂,我们得到 $g^{λ(p−1)} = 1$,因为乘法群的阶是 Z*_p 为 p −1。
3.2 安全性
为了辅助安全性的证明,我们引入以下问题,称之为部分离散对数问题 (PDLP)。直观上,它对应于在我们选择的子群中求解离散对数问题。
定义 2 (PDLP) 。设 ℓ ≥ 2为一个整数,q_1,…,q_ℓ 为互不相同的素数,且 q = q_1… q_ℓ。令 G为一个阶为 q的群,g是 G的一个生成元。给定 g,q,q_1,…,q_l 以及 y = g^x,部分离散对数问题(PDLP)的目标是找到 i ∈ [ℓ] 和 x_i ∈ Z_{q_i},使得 x_i = x mod q_i 成立。
在我们的研究背景下,我们主要关注有限域 Z _p 的乘法群中一个阶为 q的子群,其中 q整除 p −1——理想情况下,q = (p −1)/2。目前已知求解PDLP的最佳算法是在 Z _p 中的基于指数演算的方法,以及在某些 i ∈ [ℓ] 的素数阶子群中的平方根算法。当 p为3072比特长度时,q = (p −1)/2,ℓ = 12 且 q_1,…, q_ℓ 为256比特长度,我们推测求解PDLP大约需要 2^128 次基本运算操作。在本文的完整版本中,我们基于通用群模型对足够大的素数 q_1,…, q_ℓ 的 PDLP 不可行性提供了安全性论证。
定理 1 (存在性不可伪造性) 。我们的方案在随机预言模型中基于PDLP的困难性假设,可证明是EUF-CMA-安全的。
为了证明这一结果,我们将展示一个从高效的EUF‐CMA伪造者到高效的PDLP求解器的归约。为此,我们首先展示一系列关于输出分布之间不可区分性结果的序列。
– 我们的签名算法 Sign = Sign0 对用户输入进行签名。
– 一种修改后的算法 Sign1 (见图2),其中用户输入的哈希被替换为一个随机值。在随机预言模型下,这种情况在计算上与之前的情况不可区分。
– 另一种修改后的算法 Sign2 (见图2),该算法无法访问签名密钥 x。该算法的输出分布与 Sign1 的输出分布相同(定理2)。
然后我们使用分叉引理 [3,22] 来证明,可以利用一个针对 Sign2 的高效 EUF‐CMA‐ 对手来构造一个高效的 PDLP 求解器。最后,我们借助上述一系列不可区分的结果来利用针对 Sign0 的对手。令 CRT(即中国剩余定理)为将 Z_{q_1} × ··· × Z_{q_ℓ} × Z_2 映射到 Z_{p−1} 的同构映射。
定理 2 . Sign1 和 Sign2 的输出分布是相同的。
证明 。该定理基于引理中描述的若干中间结果2至6。我们用 δ 表示签名1的输出分布,用 δ′ 表示签名2的输出分布。证明的结构如下:
– 在引理 2 中,我们证明了签名2的输出是签名1输出的一个子集。
– 引理 3 表明在签名1中,每个输出对应唯一的随机带。
– 引理 4 表明在签名2中,每个输出恰好对应两条随机带。
– 引理 6 表明对于签名2而言,可能的随机带数量是对于签名1的两倍。
这表明,通过均匀选择随机带,签名1和签名2的最终分布是相同的,即在有效签名集合上的均匀分布。
引理 2 . 每组 δ′ 都是有效的签名元组。因此 δ′ ⊆ δ。
证明(引理 2) 。设 $(r,e_1,…, e_\ell, s_1,…, s_\ell, ρ_1,…, ρ_\ell) ∈ δ′$。令 i ∈ [ℓ]。由中国剩余定理可得:
S = s_i mod q_i and E = e_i mod q_i.
因此存在 λ, μ ∈ Z,使得
S = s_i + λq_i and E = e_i + μq_i.
因此:
$$
r^{\frac{p − 1}{q_i}} = (g^S y^E)^{\frac{p − 1}{q_i}} = (g^{s_i +λq_i} y^{e_i +μq_i})^{\frac{p − 1}{q_i}} = (g^{s_i} y^{e_i})^{\frac{p − 1}{q_i}} g^{λ(p −1)} y^{μ(p −1)} = (g^{s_i} y^{e_i})^{\frac{p − 1}{q_i}}
$$
最后一个等式成立,是因为乘法群 Z*_p 的阶为 p − 1,结合 r ≠ 1 mod q_i 这一事实,证明到此完成。
引理 3 。恰好存在一条随机带,使得 Sign1 可以在此上运行以生成每个特定的 δ 元组。
引理 3 的证明 。设 k, e_1, …, e_ℓ, ρ_1,…, ρ_ℓ 和 k′, e′ 1, …, e′_ℓ, ρ′_1,…, ρ′_ℓ 是 δ 的两组随机选择,均产生 $(r, e_1,…, e \ell, s_1,…, s_\ell, ρ_1,…, ρ_\ell)$。显然,对于所有 i ∈ [ℓ],e_i = e′_i 和 ρ_i = ρ′_i 成立。此外,由于 g^k = g^{k′}, g的阶为 p −1,且 k和 k′属于[p],因此 k = k′。
引理 4 。恰好存在两条随机带,其在 k, ρ_1,…, ρ_ℓ, e_1,…, e_ℓ 上输出每个 δ′ 元组。
引理 4 的证明 。设 e_1, …, e_ℓ, s_1,…, s_ℓ, a, b, ρ_1,…, ρ_ℓ 和 e′ 1, …, e′_1, …, s′_ℓ, a′, b′, ρ′_1,…, ρ′_ℓ 为两组随机选择,它们均给出 $(r, e_1,…, e \ell,s_1, …, s_\ell, ρ_1,…, ρ_\ell)$。显然,对于所有 i ∈ [ℓ],e_i = e′_i, s_i = s′_i 和 ρ_i = ρ′_i 成立。令 S, S′, E 和 E′ 为相应的中国剩余定理图像。我们有 g^S y^E = g^{S′} y^{E′},,其为 g^{S+xE} = g^{S′+xE′}, 且 S + xE = S′ + xE′ 模(p −1)。由于 x是奇数(它在模 p−1下可逆),因此 S + E 和 S′ + E′ 具有相同的奇偶性。故 a + b = a′ + b′ 模2,且我们有两种选择:a = b 或 a = 1 − b,两者均正确。
引理 5 。#(Z_p \ (∪ {i=1}^ℓ {q_i, 2q_i, …, p −1})) = 2∏ {i=1}^ℓ (q_i −1).
证明(引理 5) 。模 p 的可逆元个数为 ∏ {i=1}^ℓ (q_i−1) × (2 −1),因此对所有 q_i 模 i 的可逆元个数(不一定包含2)为 2∏ {i=1}^ℓ (q_i −1)。这恰好是集合的基数
$$
(Z_p \ (\bigcup_{i=1}^\ell {q_i, 2q_i, …, p −1})).
$$
引理 6 。在 δ′ 中的可能随机选择数量是在 δ 中的两倍。
证明(引理 6) 。对于 δ 中的随机选择数量,我们使用引理 5 来计算 k的数量,然后计算 e_i的数量,得到 2∏ {i=1}^ℓ (q_i−1) × ∏ {i=1}^ℓ q_i。对于 δ′,满足 r ≠ 1 mod q_i 等价于满足 s_i ≠ −e_i x。因此,其随机选择的数量与从 Z_{q_i} \ {e_i x} 中选取 s_i 的分布相同,即为 ∏ {i=1}^ℓ q_i × ∏ {i=1}^ℓ (q_i −1) × 2 × 2。
由上述结果可知,这两个分布是相同的,即在有效签名集合上的均匀分布。这完成了定理2的证明。
定理 3(选择消息攻击下的安全性) 。在随机预言模型中,对签名2的高效攻击者可以转化为一个高效的PDLP求解器。
证明 。设 A为一个在图EUF-CMA游戏中赢得我们方案的攻击者,如图3所示。我们在图4和 5 中构造一个算法 R,该算法利用 A 来求解PDLP。 A′等价于 A(具有相同的随机带,我们在记号中省略),不同之处在于它与不同的预言机交互。滥用记号,我们用 R.H_i 表示哈希函数与转换函数的组合。如果 L是一个成对列表,我们用 L⁻¹[e] 表示元素 e在列表中的索引,用 L[i] 表示列表的第 i个元素。如果无法执行(即,若 e不在列表中,或列表没有第 i个元素),则终止。
该算法 R在模拟过程中可能以四种方式中止(分别记为()、(†)、(‡)和(§)),如图4和 5 所示。我们对这些事件发生的概率在以下列表中进行上界估计:
– () 由于 ρ是对手无法预测的新鲜随机数,该情况发生的概率为可忽略概率。
– (†) 由于对手是高效的,该情况以非压倒性概率发生。
– (‡) 该元素以非可忽略概率存在于列表中,因为在随机预言模型中,若对手对未查询的哈希值进行伪造,则其成功概率可忽略。
– (§) 根据分叉引理[22],该情况以非压倒性概率发生。
如果 R不中止,则 (g^{s } y^{e })^{\frac{p−1}{q_i }} = (r )^{\frac{p −1}{q_i }} 模 p。那么 s + e x = s˜ + e˜ 模 q_i 。由此可得,由 R 返回的值等于 x 模 q_i*。R 以非可忽略概率成功,如前所述。分叉的概率在对随机预言机的查询次数、对签名预言机的查询次数以及 ℓ 上是多项式级别的。注意,该归约比 ℓ 松散了[22]倍。至此,定理3的证明完成。
证明(定理 1) 。使用定理 2,我们可以用 Sign0 代替 Sign2 作为定理3中攻击者的目标。
4 可证明安全的预计算
通常,实现中的瓶颈集中在模幂运算上。在本节中,我们简要概述了几种已提出的预计算技术,并更详细地介绍了两种用于我们实现中的预计算方案,以比较经典施诺尔签名与我们的方案之间的时间性能。
4.1 加速技术简要概述
对于基于DLP和基于RSA的密码系统的设计者来说,计算模幂运算是一个众所周知的问题。在需要计算 g^x mod p 的特定情况下,已经提出了以下策略,但它们的安全性通常是启发式的:
– 使用带符号展开(仅适用于逆运算高效的群);
– 使用弗罗贝尼乌斯展开或 GLV/GLS 方法(仅适用于某些椭圆曲线);
– 批处理指数运算,如 M’Ra¨ıhi 和 Naccache [18] 所建议的。
上述方法适用于任意取值的 x。或者,可以选择具有某些特性的 x 特定值以加快计算速度;然而,这样做可能会削弱离散对数问题(DLP)的安全性:
– 选择由 Agnew 等人提出的具有低汉明重量的 x [1];
– 选择 Galbraith 在第 11.3] 节中讨论的具有低汉明重量的随机 Frobenius 展开作为 x [12,;
– 选择 Schroeppel 等人提出的随机加法链来确定 x [24];
– 选择 Hoffstein 和 Silverman 建议的低汉明重量整数的乘积作为 x ——该方法被 Cheon 和 Kim [6] 攻破;
– 选择 GLV 表示中的小随机元素作为 x ——该方法被 Aranha 等人 [2] 攻破;
最后,第三类研究方向利用大量预计算来生成随机对(x, g^x mod p)。这一方向的首次尝试是施诺尔的[23],,很快被德鲁伊[9]攻破。其他构造方法来自布里克尔等人[5],、Lim和Lee[17],以及德鲁伊[8]。首个可证明安全的方案由博伊科等人[4],提出,此后称为BPV,该方案随后由[7,19,20]进行了扩展并加以精确化。这种改进后的算法称为E‐BPV(扩展BPV)。
4.2 E‐BPV预计算方案
E‐BPV 依赖于预先计算并存储一组 n 对 (k_i, g^{k_i} mod p);然后通过选择一个大小为 k 的子集 S 来自 k_i,并对每个 i 选择一个介于1和 h之间的随机指数 x_i,从而生成一个“随机”对 (r, g^r mod p)。接着计算一对 (r, R),其值为 r ← Σ_{i∈S} x_i d_i mod φ(p),R ← g^r mod p,这得益于布里克尔等人 5 实现的显著加速。为了保证可接受的安全性水平并抵御格归约攻击,预计算对的数量 n 必须足够大;并且在生成新的数对时,必须使用足够多且指数足够大的对(图6)。
阮等人[19]表明,使用E‐BPV代替标准指数运算会使对手获得的优势被限制在
$$
\frac{m\sqrt{K}}{(n \choose k)(h−1)^k}
$$
其中 m 为对手的签名查询次数,(k, n, h) 为 E‐BPV 参数,K 为指数的大小。我们保守地固定 m = 2^128。对于我们的方案,在128位安全下,我们有 K = P = 3072。如[19]中所建议的,我们设置 n = k,并限制我们的内存:
$$
h^k ≥ 2^{3400}
$$
在优化 2k + h 时,我们得到 (h, k) = (176,455)。这对应于1087 模乘法,即每次签名的摊销成本为90 次乘法运算,存储开销约为170kB。
或者,我们可以通过设置 n = 2048、h = 100、k = 320 来满足安全性约束,这对应约770KB存储空间,使得每签名的摊销成本为62次模乘法。
在实现(第5节)中,我们求解约束优化问题,以在给定内存容量下找到最优系数(即最少的乘法运算次数)。
备注3 (减半存储成本) 。以下思路可将所需存储的(x, g^x)数对数量减半:无需随机生成值 x,而是仅一次性生成主密钥 s,并计算 x_{i+1} ← g^{x_i} ⊕ s(或更广义/更安全地,使用复杂度较低的伪随机函数 x_{i+1}=PRF_s(g^{x_i}))。只需存储 s、x_0 以及值 g^{x_i},而无需存储所有 (x_i, g^{x_i}) 数对。此备注适用于BPV和E‐BPV两种方案。
4.3 Lim和Lee预计算方案
我们还考虑了Lim和Lee快速幂算法的一种变体[17]。该方案最初用于在 r 已知的情况下计算 g^r,但可轻松适配到 r 动态生成的场景中。然而,其加速效果仅为线性,最终意味着我们无法期望其相比施诺尔签名有显著优势。尽管如此,Lim和Lee的算法资源消耗更低,可用于无法找到安全E‐BPV参数的场合(例如超低内存环境)中。
Lim‐Lee方案(LL)有两个参数,h和v。在原始的LL算法中,指数是预先已知的,但可以很容易地修改为即时生成指数。直观上,它将指数分成大小为 a “块”的 h,再将每个块进一步划分为大小为 b 的 v 个子块。模乘法运算的次数(最坏情况下)为 a + b − 2,并且需要存储 (2h − 1)v 对。相关算法见图7。
对于给定的内存数量 M,很容易解决该约束优化问题,我们发现
$$
h_{opt} = \frac{1}{\ln(2)}(1 + W(1 + \frac{M}{e}))
$$
其中 W 是 Lambert 函数。对于 750 千字节 的内存 M,得到 h ≈ 8.6。整数的最优参数为 h = 9 和 v = 4。
备注4 。对于LL,关于减半存储需求的3不适用,因为 x无需存储。
E‐PBV和LL预计算技术特性的总结见表1。
| 算法 | 存储 | 乘法运算 | 乘法运算 | 安全性 |
|---|---|---|---|---|
| 平方‐乘算法 0 | 1.5 log P | 1.5 log P | 始终 m√ P n k) < 2 −κ | |
| BPV [4] | nP | k − 1 | k − 1 | ( m√ P n < 2 − κ |
| E‐BPV [19] | nP | 2k + h − 3 v) − 3 | 2k + h − 3 v) − 3 | k ( )( h − 1 ) k 始终 |
| Lim和Lee [17] | 2h × v × P | P h(1+ 1 | P h(1+ 1 | |
| Lim和Lee [17] | 2h × v × P | log | ||
| ## 5 实现结果 |
我们的方案,使用第3和 4节中描述的算法,已使用GMP库用C语言实现。为了进行时间对比,我们还实现了经典的Schnorr方案。在多个场景下的结果如 表2(128位安全)和表3(192 位安全)所示。完整的源代码和计时框架可向 作者索取。
| 方案 | 存储 | 预计算 | 每次签名耗时 | 验证 |
|---|---|---|---|---|
| 施诺尔 | – | – | 6.14 毫秒 | 73.9 毫秒 |
| 施诺尔+[19]+[5] | 170 千字节 | 33 s | 2.80 毫秒 | 73.9 毫秒 |
| 施诺尔+[19]+[5] | 750 千字节 | 33 s | 2.03 毫秒 | 73.9 毫秒 |
| 施诺尔+[19]+[5] | 1 MB | 34 s | 2.00 毫秒 | 73.9 毫秒 |
| 施诺尔+[19]+[5] | 2 MB | 37 s | 2.85 毫秒 | 73.9 毫秒 |
| 施诺尔+[17] | 165 千字节 | 3 s | 949 μs | 73.9 毫秒 |
| 施诺尔+[17] | 750 千字节 | 3 s | 644 μs | 73.9 毫秒 |
| 施诺尔+[17] | 958 千字节 | 3 s | 630 μs | 73.9 毫秒 |
| 施诺尔+[17] | 1.91 MB 3秒 | 472ns | 73.9 毫秒 | |
| 我们的方案 | – | – | 5.94 毫秒 | 2.4 秒 |
| 我们的方案 +[19]+[5] | 170kB | 33 s | 1.23 毫秒 | 2.4 秒 |
| 我们的方案 +[19]+[5] | 750kB | 33 s | 426 μs | 2.4 秒 |
| 我们的方案 +[19]+[5] | 1MB | 34 s | 371 μs | 2.4 秒 |
| 我们的方案 +[19]+[5] | 2MB | 37 s | 327 μs | 2.4 秒 |
| 我们的方案 +[17] | 165 千字节 | 3 s | 918 μs | 2.4 秒 |
| 我们的方案 +[17] | 750 千字节 | 3 s | 709 μs | 2.4 秒 |
| 我们的方案 +[17] | 958 千字节 | 3 s | 650 μs | 2.4 秒 |
| 我们的方案 +[17] | 1.91 MB 3秒 | 757 μ秒 | 2.4 秒 |
表2. Schnorr签名和我们的方案在128位安全(P= 3072, Q= 256 32 )下的时间结果。计算在配备128 MB内存的ArchLinux单核‐位虚拟机上进行,结果基于256次运行的平均值。
| 方案 | 存储 | 时间(/签名) |
|---|---|---|
| 施诺尔 | – | 35.2 毫秒 |
| 施诺尔+[17] | 715 千字节 | 508 μ秒 |
| 施诺尔+[19]+[5] | 750 千字节 1.87兆字节 | 2.08 毫秒 1.62毫秒 |
| 施诺尔+[17] | 1.87 兆字节 | 476 μ秒 |
| 我们的方案 | – | 33.0毫秒 |
| 我们的方案 +[17] | 715 千字节 | 486 μ秒 |
| 我们的方案 +[17] | 1.87 兆字节 | 467 μ秒 |
| 我们的方案 +[19]+[5] 1.87 兆字节 | 263 μ秒 |
表3。 Schnorr签名和我们的方案在192位安全(P= 7680, Q= 384 32 )下的时间结果。计算在配备128 MB内存的ArchLinux单核‐位虚拟机上进行,结果基于256次运行的平均值。
这些实验表明,当预计算的对数至少为250对(即在128位安全下为 750kB)时,我们的方案比施诺尔更快。在更高安全级别下,这一效果更加明显:与施诺尔相比,我们的方案从E‐BPV +BGMW优化中获益更多且更有效。
结合E‐BPV和BGMW的重要性也显而易见:若E‐BPV使用朴素的模幂运算,则不会带来任何速度提升。
施诺尔和我们的方案在使用Lim和Lee的优化时性能相同,验证了理论分析。当分配的内存少于1MB内存时,这是更好的选择。
6 启发式安全
多篇论文描述了服务器辅助预计算技术(例如,[16]),这些技术借助一个 (可能不可信的)服务器执行模幂运算,即此类技术允许将 g^x mod n的计算外包给服务器,其中g和 n是公开的,且不会向服务器泄露 x。
有趣的是,在该场景下最高效的算法(当然我们可以加以利用)使用了 Hohenberger和Lysyanskaya[14]为E‐BPV提供的参数。一系列论文都默认采用了这些参数(包括[16]),但我们必须指出,这些并未被[19]中的安全证明所涵盖。
尽管有此说明,但似乎目前尚未有已知的实际攻击;因此,如果我们愿意在一定程度上放宽安全性要求,则可以更快地计算模幂运算。具体而言,一个 Q位的指数可以通过 O(log Q²)次模乘法完成计算。
我们的方案 使用的指数比 施诺尔 大 ℓ 倍,并分摊到 ℓ 个签名上。将我们的方案与 施诺尔 进行比较,其比率为
$$
\frac{\ell \log(Q)^2}{(\log(\ell Q))^2}
$$
当 Q = 256 时,我们得到的比率约为 5.7。请注意,随着 Q的增加,ℓ 也会增加,因此在该情况下,我们的方案相对于施诺尔的优势也随之增加。
7 结论
我们提出了一种新的Schnorr签名的数字签名方案变体,该方案对多个签名重复使用随机数组件。这样做不会危及方案的安全性;而如果在经典Schnorr签名中进行相同操作,则会立即泄露签名密钥。然而,我们方法的主要优势在于,预计算技术——其优势仅在足够大的问题中才能体现——变得可用且具有吸引力。
因此,在不损失安全性的前提下,可以使用更少的模乘法来签署消息。我们的技术是通用的,可应用于多种签名方案和多种加速技术。
27

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



