基于格的多重签名方案

一种高效的基于格的多重签名方案及其在比特币中的应用

摘要

多重签名方案是在存在多个签名者时节省存储和带宽成本的重要原语。此类构造被广泛应用于金融领域,例如比特币,其中需要多把密钥才能授权比特币交易。然而,当前许多最先进的多重签名方案都基于RSA或离散对数假设,而这些假设在未来可能变得不安全,例如由于量子攻击的可能性。本文提出了一种新的多重签名方案,该方案基于格问题的难解性构建,即使在强大的量子计算机存在的情况下,这些问题仍然难以解决。多重签名的大小接近最优,并且我们的方案还可以轻松转换为更通用的聚合签名方案。最后,我们给出了该方案的高效实现,证明了其实用性和竞争力。

关键词 :多重签名方案 · Lattice-based crypto · Post-quantum

1 引言

大多数密码学应用的安全概念在量子计算机出现的情况下发生了变化。在1994年的突破性工作[22]中,肖尔指出,基于数论假设困难性的安全方案可以通过量子计算机被高效地攻击。自那时以来,人们已投入大量努力寻找替代方案以应对这一挑战。基于格的密码学是一个有前途的候选者,具有满足未来商业和私人应用安全需求的潜力。与离散对数问题和因数分解不同,格问题被认为能够抵御量子攻击。此外,其独特的安全属性——为平均情况实例提供最坏情况下的困难性——代表了密码学中的一个基石,因为目前不存在其他具有同等安全保证的困难性假设。在过去的几年中,涌现出许多高效的密码系统,它们将安全性建立在已被深入研究的格问题的困难性之上。与RSA等经典构造不同,截至目前,尚不存在针对格问题的亚指数时间攻击,这些问题是实践中相关的。所有已知的攻击都需要指数时间运行,因此为向基于格的密码系统过渡提供了有力的论据。

在多重签名(MS)方案中 $n$ 拥有公钥的参与方 $pk_1,…,pk_n$ 共同协商为选定的消息 $m$ 生成一个多重签名,该多重签名的大小明显小于简单捆绑的签名,同时能够证明 $m$ 确实已在公钥 $pk_1,…,pk_n$ 下被同时签名。这类构造具有广泛的应用,在需要最小化存储和带宽成本的场景中尤为常用。例如,无线传感器网络本质上资源受限,迫切需要优化通信量和内存消耗的机制。近年来已提出许多不同的多重签名方案,它们主要基于RSA或离散对数问题等经典假设。在[7]中提出了一种基于格的顺序聚合签名方案,可直接转化为顺序多重签名方案,其中多个签名者依次对同一消息进行签名。然而,据我们所知,目前尚不存在基于可抵抗量子攻击的困难性假设的多重签名方案。为了能够在大规模量子计算机普及的时代实现平稳过渡,鉴于其在比特币等金融应用中的重要性,迫切需要实现此类密码原语。

相关工作

多重签名方案的概念最早在[11]中被提出。自那以后,许多相关研究相继出现,但这些研究未能提供安全证明或适当的对抗模型。因此,在 [13,16]中提出的构造被完全攻破。事实上,只有Okamoto等人[20]和 Micali等人[18]的工作首次满足了这些要求,并提出了不同的安全模型。然而,[18]的安全概念被认为更强,因为[20]未考虑密钥生成阶段的攻击(例如恶意密钥攻击)。另一方面,[18]中的方案在应用时需要预先知道签名者集合。在此之后,Bolydreva等人[6]基于Gap-Diffie-Hellman问题这一困难性假设,提出了一个新的多重签名方案构造。在[15],中,Lu等人消除了对随机预言机的需求,并提出了一种基于双线性对的多重签名方案。2006年,贝尔尔和内文在普通公钥模型下提出了一种新的多重签名方案[5]。该方案避免了其他方案中存在的缺陷,例如[18]中所需的关于私钥的知识证明。其唯一要求是每个签名者拥有一个经认证的公钥,该公钥由每个用户单独生成。然而,它是一种交互式协议,用户必须在输出多重签名之前进行协作。但也存在一些更复杂的概念,如基于身份的多重签名方案,它们使得最终的方案在内存消耗方面更加紧凑 [2,4],因为公钥是从公开且简短的身份导出的。

贡献

在本文中,我们提出了首个在随机预言模型下可证明安全的基于格的多重签名方案。我们还表明,该方案可以轻松地转换为一个基于格的聚合签名方案。我们的构造建立在G¨uneysu等人提出的签名方案基础之上[8,9],该方案是其中的关键组成部分。实际上,我们将其修改为一种交互式的多重签名方案,在操作上十分简洁。由此,我们获得了一个高度高效的方案,在性能和多重签名大小方面均得到了优化。特别是,多重签名的大小几乎与单个签名相当(见 图5),同时提供了安全性保证,即每个用户确实对消息进行了签名,其安全性基于求解特定格问题的困难性。我们进一步讨论了如何将我们的方案应用于比特币/区块链交易场景中。最后,我们给出了详尽的实现以及多项优化,从而推动该方案走向实用性。

组织结构

本文结构如下:在第2节中,我们首先介绍工作的背景符号。在第3节中,我们提出基于格的多重签名方案及其安全性的证明。第4节包含我们实现和优化的详细描述。在第5节中,我们展示实验结果并进行分析。

2 预备知识

2.1 符号说明

我们将使用多项式环 $ R= \mathbb{Z}[x]/\langle f(x)\rangle $ 和 $R_q= \mathbb{Z}_q[x]/\langle f(x)\rangle$,其中多项式 $ f(x)$ 在 $ \mathbb{Z} $ 上是首一且不可约的。对于任意正整数 $k$,我们用 $ R_q^k $ 表示 $ R_q $ 中系数在范围 $[-k, k]$ 内的多项式集合。对于环LWE问题,我们考虑分圆多项式,例如当 $ n$ 为 $2$ 的幂时, $f(x) = x^n+1$。具有整数系数的第 $ m$ 个分圆多项式是次数为 $ n= \phi(m)$ 的多项式,其根为本原的 $ m$ 次单位根。我们用粗体小写字母表示环中的元素,例如 $\mathbf{p}$。 $D_n^{32}$ 表示次数不超过 $ n -1$、具有 $32$ 个系数 $ \pm1 $ 而其余系数为零的多项式集合。其他所需成分将在相应章节中介绍。

定义 1(DCKq,n问题,[9]) 。我们将DCKq,n问题(判定性紧致背包问题)定义为区分 $R_q \times R_q$上的均匀分布与分布$(a,as_1+ s_2)$的问题,其中$a$在 $R_q$中均匀随机选取,$s_i$在 $R_q^1$中均匀随机选取。

3 多重签名方案

在下一节中,我们将介绍首个在随机预言模型下可证明安全的基于格的多重签名方案。我们的安全性核心在于

示意图0

证明中我们使用分叉引理[5],,它使我们能够推导出环上SIS实例的一个解。作为一个关键组成部分,我们采用了G¨uneysu等人提出的高效签名方案来实例化该方案。但我们还指出,其他变体(例如[17])也是可行的,只需对安全证明进行轻微修改即可。人们也可以选择将该方案基于标准格问题或高秩模表示[12],以防范当前所用表示形式未来可能出现的弱点。

我们首先描述多重签名方案的形式化模型及其相关算法。一个多重签名方案由3个算法$M=(MKeyGen, MSign, MVerify)$组成。设 $S={S_1,…, S_N}$ 为同意共同对消息 $M$ 进行签名的 $N$ 个用户的集合。

  • 密钥生成 (1^n):在输入包含安全参数 n的 1^n时,该概率算法为每个签名者输出一个私钥和验证公钥$(sk_i,pk_i)$。
  • 多重签名生成 (L, M):输入一条消息 $ M$ 以及具有索引 $ I={i_1,…, i_k}$ 的任意签名者子组 $ L={S_{i_1},…, S_{i_k}}$,该算法输出一个多重签名 $ \sigma_L$、参与构造$\sigma_L$的签名者集合 $ L$ 以及消息$M$。
  • 多重签名验证 (σ_L, M,T):输入一个多重签名或聚合签名 $ \sigma_L$,一组签名者 $ L$, 一条消息 $ M$,以及与 $ L$ 中的签名者相关联的验证公钥集合 $ T$,该确定性算法在多重签名有效且所有签名者确实签署了该消息时输出1,否则输出0。

我们注意到,我们的交互式MS方案可以转化为一种普通的聚合签名方案。当将消息$M$替换为不同签名者对应的消息元组 $ M_1||id_1,…, M_N||id_N$时,即可实现这一点。在定义2中,我们定义了多重签名方案中的最优性概念,而现有方案通常无法达到这一特性。

定义2(最优MS方案,[10] ) 。在最优多重签名方案中,多重签名的大小与单个签名相同,且验证时间与单个签名的验证时间(几乎)相同。

3.1 我们的构造

在接下来的部分中,我们将详细描述我们的构造,并随后在适当的安全模型中给出安全证明。

密钥生成 。在算法开始时,所有签名者就一个均匀的随机多项式$a \in R_q$达成一致,该多项式可通过交互获得,或由可信源生成,或从种子派生。每个签名者 $S_i$的私钥$sk_i$是随机多项式$(s^{(1)}_i,s^{(2)}_i) \leftarrow R_q^d\times R_q^d$,其中 $d$是一个非常小的参数(例如 $d \in{2,…, 6}$对应 $n= 512$, $d= 1$对应 $n= 1024$),公钥$T_i= a \cdot s^{(1)}_i +s^{(2)}_i$ 通过私钥和$a$计算得出。较大的$d$值可提高对密钥恢复攻击的安全性,但会降低签名引擎的速度。例如,当 $d= 1$且 $q= 8383489$时,我们仅从[8]获得标准签名方案的参数集。

多重签名生成 。为了安全证明,我们需要两个作为随机预言机(RO)建模的密码学哈希函数$H_0 : R_q \to R_q$和 $H_1 :{0, 1}^* \to D_{3n}^2$。每个签名者按以下步骤操作以获得对消息 $M$的多重签名:类似于基本签名方案[8], ,每个签名者 $i$从 $R_q^k$中采样$y^{(1)} i$和$y^{(2)}_i$。参数 $k$控制我们方案的安全性与运行时间之间的权衡。随后,每个签名者计算$r_i= ay^{(1)}_i+y^{(2)}_i$,并在输入$r_i$上查询 $H_0$,输出$t_i= H_0(r_i)$。此步骤对于在安全证明中编程随机预言机至关重要。各方随后将 $t_i$广播给其他联合签名者,后者则等待接收所有 $1 \le j \le N$的$t_j$,然后广播相应的输入值$r_j$。结果,每个签名者能够使用$t_j$验证$r_j$的有效性,并计算$r = \sum {j=1}^N r_j,\mod q$作为多重签名的一部分。随后,查询$H_1(T_i, r, T M)$,其中$T={T_1,…,T_N}$,以获得签名者$i$的$c_i$。接下来的协议步骤9和10基本上对应于[8]的签名步骤3和4,唯一的微小修改是:如果某个签名未能通过有效性检查,则整个协议将重新启动。协议不重启的概率由
$$
Prob[success]=(1 - d\cdot 64 / 2^{k+1})^{2Nn} \Leftrightarrow k(E, N, n)= \left\lfloor 21 \cdot\left( \frac{d\cdot 64}{1 - 2N\sqrt{n}/\sqrt{1/E}} - 1\right)\right\rfloor
$$
得到 $ E= 1/Prob[success]$期望尝试次数。如果所有限制条件均满足,则签名部分$z_i$将在联合签名者之间共享,且输出多重签名 $(z,r)$,其中 $z= \sum_{i=1}^N z_i$。

我们在此还强调,当$r$的位大小大于${c_i} {i=1}^N$的大小时,可通过输出 $(z,{c_i} {i=1}^N)$ 来减小多重签名的大小。这种情况就会发生,因为由至多$32$个非零系数组成的$c_i$可从$160$位中恢复([8])。从验证者的角度来看,我们可以选择这两种表示方式,因为$r$可以从${c_i}_{i=1}^N$中恢复,反之亦然。

多重签名验证 。验证引擎计算所有$c_i \leftarrow H_1(T_i, r, T M)$并检查条件$z^{(1)}, z^{(2)} \in R_q^{N\cdot(k-d\cdot32)}$和$Na \cdot z^{(1)}+ z^{(2)}= r+ \sum_{i=1}^N T_ic_i$是否满足。如果这些有效性检查成功,算法输出1,否则输出0。

该方案也可以构建在[17]中提出的方案之上。然而,必须注意如何编程随机预言机。

3.2 安全

我们的安全模型受到[5]的启发。具体而言,我们证明了在假设该组中至少存在一个诚实签名者的前提下,伪造多重签名的难度等同于解决一个困难的格问题。因此,我们允许伪造者控制除一个诚实签名者外所有参与者的私钥(图1)。

密钥生成 多重签名生成
签名密钥 $sk_i= S_i$与 $S_i=(s^{(1)}_i, s^{(2)}_i) \leftarrow R_q^d \times R_q^d$
验证公钥 $vk_i=(a,T_i)$ $a \leftarrow R_q$, $T_i \leftarrow a \cdot s^{(1)}_i+ s^{(2)}$
输出密钥对 $(sk_i,vk_i)$
签名者 $i$ 联合签名者
1: $Y_i=(y^{(1)} i,y^{(2)}_i)\leftarrow R_q^k \times R_q^k$ $1 \le j \le N, j \ne i$
2: $r_i \leftarrow ay^{(1)}_i+y^{(2)}_i$
3: $t_i \leftarrow H_0(r_i)$
4: $t_i \longrightarrow$
广播 $t_j \longleftarrow$
广播
5: $r_i \longrightarrow$
广播 $r_j \longleftarrow$
广播
6: 检查 $t_j ? = H_0(r_j)$ 对所有 $i \ne j$
7: $r \leftarrow \sum
{j=1}^N r_j \mod q$
8: $c_i \leftarrow H_1(T_i, r, T M)$
9: $z_i=(z^{(1)} i,z^{(2)}_i) \leftarrow S_ic_i+ Y_i$
10:如果$z_i\notin R_q^{k-d\cdot32} \times R_q^{k-d\cdot32}$重新启动协议
11: $z_i \longrightarrow$
广播 $z_j \longleftarrow$
广播
12: $z \leftarrow \sum
{j=1}^N z_j$
13:输出(z,r)
多重签名验证
$c_i \leftarrow H_1(T_i, r, T m)$
当且仅当接受 $z\in R_q^{N\cdot(k-d\cdot32)} \times R_q^{N\cdot(k-d\cdot32)}$和
$a \cdot z^{(1)}+ z^{(2)}= r+ \sum_{i=1}^N T_ic_i$

我们考虑自适应选择消息攻击的概念,其中 A可以向诚实签名者针对其选择的任意多条消息进行任意次数的多重签名查询。 A的优势$AdvMSignA^*$是在以下实验中的成功概率。

实验 。$Exp_{MS−SU−CMA}^{A,SAS}$,$(n)$ $(S,T) \leftarrow KeyGen(1^n)$,其中$T={T_1, . . . , T_N}$且$S={S_1, . . . , S_N}$ $(z^ , r^ ) \leftarrow A^{OMSign(S^ , , )}(T, S\backslash S^ , M)$ 设 $T^ $ 为$T$中的挑战公钥,M为消息。设 $\Sigma=((T M_l),(z_l, r_l)) {l=1}^{Q {MS}}$ 为与$OMSign(S^ , , )$交互生成的查询‐响应元组 若$MVerify(z^ , r^ , T M) =有效$且$((T M),(z^ , r^ ))\notin \Sigma$

在此实验之后,允许对手查询其选择消息的签名预言机$OMSign$,并且还给予其随机预言机访问权限。他将收到除某一参与方之外所有其他参与方的公钥和私钥作为输入。诚实用户和一个由所有参与方签名的指定消息 M。最终,他针对消息 M在包含挑战公钥$T^ $的公钥集$T$下输出一个伪造的多重签名$(z^ ,r^*)$。如果该对手能够以显著优势高效地提供一个有效的多重签名,则称该对手在此实验中成功。

定义3 (MS-SU-CMA) 。设$T^*$为诚实签名者的挑战公钥,$T={T_1,…,T_N}$为多重签名方案(MS)中的一组公钥。如果对于所有PPT算法 A,存在一个可忽略函数 ε(n),使得
$$
AdvMSignSU−CMA_A (n)= Prob[(z, r, M) \leftarrow A | MVerify(z, r, T, M)= valid] \le \varepsilon(n).
$$

定理 1 包含本节的主要安全声明。

定理1 . 假设存在一个多项式时间的伪造者 F,其最多向 H发出 h次查询,最多与诚实签名者发起 s次涉及最多$N_{max}$个公钥的签名协议,并以概率 δ成功生成伪造。则存在一个与 F具有相同时间复杂度的算法 A,对于给定的$A= (a,\mathbf{1}) \leftarrow R_q^n \times{1}$(实际上,对于任意满足可逆$ $的$A=(a,v)$)能够以至少
$$
(2^{-1} -2^{-100})\cdot(\delta - 2(h+ s+ 1)^2 /g)\cdot(\delta -2(h+ s+ 1)^2/g t - 1 /|DH_1|) \approx \delta^2 / 2(h+ s)
$$
对于 $g=\min{|DH_0|, |DH_1|}$,使得 $|u_i| \infty \le 2N {max}(k−d·32)$且$au_1+u_2= 0$。

证明 。设$DH_0= \mathbb{Z}_q^n$和 $DH_1={c:c \in{-1, 0, 1}^\kappa,|c| \le \kappa}$表示随机预言机 $H_0$和 $H_1$的取值范围。安全模型的核心思想是让伪造者 F控制除至少一个诚实签名者之外的所有签名者的私钥。因此,允许伪造者通过选择私钥$S_i$来确定虚假签名者的验证密钥$T_i=AS_i$。给定伪造者 F,考虑算法A,其行为如下: 输入参数 φ、 ψ ,分别对应于伪造者 F和诚实签名者的随机硬币,以及随机预言机响应$h_1, …, h_t$、目标验证公钥$A =(a, 1) \in R_q^n \times{1}$和$T^ =AS^ $,其中$S^*=(s^{(1)}, s^{(2)})$且$s^{(1)}, s^{(2)} \in{-d,…, 0,…, d}^n$表示诚实签名者的私钥。

算法 A运行伪造者 F,其在攻击过程中最多对随机预言机 H进行$t= h+ s$次查询。随机预言机的编程通过直接调用或请求查看签名时完成。在算法开始时, A初始化两个计数器 $ctr_1$和 $ctr_2$,以及三个关联列表 $B_0[·]$、 $B_1[·]$和 $B_2[·]$,其中 $B_2[·]$用于通过唯一索引 $1 \le i \le h+ N_{max}· s$标识不同的公钥。列表 $B_2$初始填充为$B_2[T^ ] \leftarrow 0$,意味着诚实签名者的公钥始终以索引0标识。对于随机预言机查询 $H_0(r_j)$,若尚未定义,则算法选择一个随机值$b_i\leftarrow \mathbb{Z} p^n$,并设置 $B_0[r_j]= b_i$,然后输出 $B_0[r_j]$。如果在输入值$T_i$、$Q$上调用 $H_1(·)$,则A检查$B_2[T_i]$的内容。如果 $B_2[T_i]$未定义,则增加 $ctr_1$并集合 $B_2[T_i]= ctr_1$。如果 $Q$被解析为$r, T M$,则进一步确保对于所有$T_j \in T$和 $1 \le j \le N$, $B_2[T_j]$是有定义的。令 $j= B_2[T_i]$ 为$T_i$的唯一索引。若$B_1[i,Q]$ 尚未被设置,则该算法为所有$B_1[l, Q],$(其中 $1 \le l \le h+ N {max}· s$)选择随机值,并最终设置 $B_0[0, Q]=h_{ctr_1}$。每当$F$ 请求诚实签名者对消息$M$和验证密钥$T$进行签名时,该算法执行如下操作:若$T^ \notin T$,则输出$\bot$;否则将$T$解析为${T_1= T^*, T_2, …, T_N}$。然后确保所有条目 $B_2[T_j]$对于 $2 \le j \le N$ 是有定义的,并递增计数器$ctr_1$。接着设置$c_1 \leftarrow h_{ctr_1}$,随机选取$z_1 \in R_q^{k-d·32}\times R_q^{k-d·32}$,计算$r_1= Az_1−T_1c_1$,并将$t_0= H_0(r_1)$发送给由$F$模拟的其他联合签名者。同时, A 在列表$B_0$中查找满足$t_i= B_0[r_i]$的输入向量$r_i$,其中$t_i$ 来自联合签名者 $2 \le i \le N$的接收值。若无法找到对应于$t_i$ 的向量$r_i$,则$A$ 设置标志$alert \leftarrow true$ 并将$r_1$ 发送给所有联合签名者。如果$B_0$ 对任意$t_i$包含多个值,则事件$bad_1$ 发生,且$A$ 停止协议并返回$\bot$。

在其他情况下, A 计算$r = \sum r_i$,随后检查当$Q$被解析为$r, T M$时,$B_1[0, Q]$是否已定义。如果$B_1[0, Q]$已经设置,则$bad_2$ 发生, A 中止并输出$\bot$。否则,它对 $1 \le l \le h+N·s$采样 $B_1[0,Q] \leftarrow c_1$和 $B_1[l,Q]\leftarrow DH_0$。最后广播$r_1,$,同时从其他参与者处接收$r_i$。如果存在向量$r_i$ 使得$H_0(r_i)= t_i$,或对于所有 $1 \le i \le N$ 和$alert= true$都有$H_0(r_i)= t_i$,则$A$ 停止协议并返回 $\bot$。后一种情况表示事件$bad_3$ 发生。否则,向参与者广播$z_1$,同时从联合签名者处接收$z_i$。最后, A 计算$Nz = \sum z_i \mod p$,并输出$(r,z)$作为多重签名。一旦伪造者$F_{i=1}$完成执行,最终以概率$\delta′= \delta −\sum P[bad_i]$输出一个有效伪造$(r, z)$,以及一组公钥$T$和一条消息$M$。因此,我们有 $|z| \infty \le N·(k−d·32)$且$Az−\sum {i=1}^N T_ic_i= r$成立的概率为$\delta$,其中$c_i= H(T_i, r, T M)$。

如果随机预言机 $H_1$之前未被查询过,则正确选择所有向量$c_i$使得$c_i= H_1(T_i, r, T M)$为 $1/|DH_1 |l$的概率是 $1/|DH_1 |l$。一旦在签名步骤中调用 $H_1$,就会导致对所有 $B_1[i, r, T M]$的赋值发生在 $1 \le i \le h+ N_{max}s$。因此, F成功提供一个有效签名,其中包含$c^ = h_j$以及$c_i= H_1(T_i, r, T M)$,对应于 $1 \le i \le N$和 $1 \le j \le t$的概率至少为 $\delta − N/|DH_1 |$。假设如此,令 $1 \le J \le t$为满足$B_1[0, r, T M]=h_J$的索引。我们首先记录元组$(r, z, h_J)$,然后根据分叉引理,以至少该概率获得另一个元组$(r′, z′, h′ J)$
$$
(\delta′ − N/|DH_1|)\cdot(\delta′ − N/|DH_1| t − 1 /|DH_1|)
$$
在两次运行中,使用了相同的消息$M$ 和密钥集合$T$。这是由于$A$ 提供的$F$ 环境在第一次调用$H_1( T_i , r,T M)$或$H_1( T_i , r′,T′, M′)$之前是相同的,从而导致了赋值$B_1[0,r, T M]=h_J$和 $B_1[0,r′, T′, M′]=h′_J$。因此,到目前为止,由于使用了相同的随机带、值$h_1, …, h
{J−1}$以及随机预言机响应,我们必须有$M′= M, r′= r$且$T′= T$。于是,令 $N^
$为$T^ $在$T$中出现的次数。此外,在赋值 $B_1[0,r, T M] \leftarrow h_J$之前,所有条目 $B_2[T_i]$和$c_i= B_1[B_2[T_i], r, T M]$均已被初始化。因此,对于$T_i=T′_i$,两次执行中的随机向量$c_i= c^ $也是相同的。对于$T^ $,第一次运行中有$c^ = h_J$,第二次运行中有$c′^ =h′_J$,其中$h_J= h′_J$。令指标集 $I^ $ 包含所有满足$T_l = T^ $的指标$l$。由$Az−\sum_{i=1}^l T_ic_i= r′= r = Az′ −\sum_{i=1}^l T_ic′_i$可得
$$
A(z − z′+ |I^
| · S^ (c^ − c′^ ))= 0
$$
由于 $|z| \infty, |z′| \infty \le N(k − d · 32)$和$|S^
c^ |_\infty,|S^ c′^ |_\infty \le d · 32$,我们有$|z −z′+ |N^ | · S^ (c^ −c′^ )|_\infty \le 2N(k−d·32)+2|N^ |· d·32$。利用$A =(a, 1)$(或一般地$A = v^{-1}A′$表示$A′=(a, v)$且$v$为可逆$v$)以及$S^ =(s^{(1)}, s^{(2)})$,我们得到上述等式的如下等价表达式
$$
a(z^{(1)} − z^{(1)’}+ |N^
| · s^{(1)}(c^ − c′))+ (z^{(2)} − z^{(2)’}+ |N^ | · s^{(2)}(c^ − c′))= 0.
$$
快速查看该方程可知,我们找到了符合[8,17]两个具有小系数的多项式$b_1$和$b_2$,使得$a·b_1+b_2=0$。这解决了环上SIS$_{n,2,\beta}$对于$\beta \le 2N(k − d· 32)+ 2|N^
| · d· 32$的问题,而该问题被认为是困难的。我们注意到联合签名者数量$N \le N_{max}$不应过大。

以下引理给出了多重签名大小的界。在实践中,该界远小于假设的界$N · k$。

引理1(霍夫丁引理) 。设 X为任意实值随机变量,其均值为 $E[X]= 0$,且满足 $a \le X \le b$几乎必然成立。则对于所有 $\lambda \in \mathbb{R}$,有 $E[e^{\lambda X}] \le e^{\lambda^2 (b−a)^2 /8}$。

引理2 (签名大小) 。令$X_i \leftarrow R[-k,…, 0,…, k]$为 $1 \le i \le N$上的均匀随机变量,其中$E[X_i]= 0$。定义 $X= \sum X_i$。则有$P[|X| \ge \sqrt{2cNk}] \le e^{-c}$。对于一个具有$z= \sum z_i \in \mathbb{Z}^n$个 $n$分量的向量,其概率由下式给出: $P[|z|_\infty <\sqrt{2cNk}] \le(1 − e^{-c})^n$。

引理2通过直接计算可由引理1得出。

3.3 应用场景:已签名的比特币交易

多重签名方案适用于一组签名者希望对相同数据进行签名,并生成具有减小大小的聚合签名的情况。相关的金融应用场景是比特币1交易,其中使用了多重签名。

示意图1

应用于验证加密货币交易,然后将其写入公共区块链,在此之后便无法再更改。区块链技术本身由于其去中心化的特性,被认为是金融领域最具前景的颠覆性技术之一,因为它能够避免在处理交易过程中对银行或其他中介机构等可信方的需求。在现实世界中应用该技术,经济体系可能会因省去中介机构而节省大量时间与巨额资金。通过已签名的交易,比特币用户可以匿名地通过网络发送虚拟货币。此外,比特币还支持多重签名交易,即需要多个私钥的签名才能完成交易。通常我们有一个$m-of-n$ 地址,对应$n$ 个私钥用于$m \le n$。

更具体地说,将比特币从一个地址转移到另一个地址需要至少$m$个密钥的签名(见图2)。这具有多个优点:一方面,攻击者很难攻破比特币,因为他需要攻破 $m$台机器才能发动攻击。例如,在$2-of-2$地址中,两个密钥可以分别存储在两台不同的机器上,而攻击者必须同时攻破两者。另一方面,多重签名交易可用于冗余以防止丢失。例如,在$2-of-3$地址中,即使任意一个密钥丢失,交易仍然可以执行。它还可用于钱包共享,即一个地址由组织中的多个成员共享,并且使用资金需要多数投票。

我们在第3.1节提出的方案可最优地用于此类目的,特别是当用户需要$m$个私钥来成功处理金融交易时。在这种情况下,由于以下两个原因,我们协议的交互特性不会带来负面的性能影响。首先,在此类协议中,签署交易所需的私钥数量$m$相当少,即$m \le 5$。其次,大部分通信开销仅限于用户自身,无需涉及P2P网络中的其他方,因此开销极小。一旦用户创建了多重签名,就会将其传输到比特币/区块链网络中的各个P2P参与者。此时,除了传输一个存储大小减小的多重签名外,不再产生额外的通信成本。事实上,我们在图4中表明,该多重签名的大小基本相当于单个签名,因此在涉及$m= 5$个私钥的情况下,节省了约4个签名的开销。显然,签名大小不可能小于单个签名。因此,我们得出结论:在生成多重签名的性能不构成瓶颈的场景中,我们提出的多重签名方案确实是实用的。这种情况在公司、机构或个人中经常出现。

4 快速多项式算术

4.1 多项式乘法

如果我们忽略广播数据所消耗的时间,那么向随机预言机 $H_1$进行查询以及多项式乘法是该方案中最耗时的操作。在此我们重点关注快速多项式乘法。为了使该操作达到准线性运行时间 $O(n\log n)$,我们采用了高度优化的快速傅里叶变换(FFT)和数论变换(NTT)。这两种变换的区别在于,数论变换(NTT)是通过有限域 $\mathbb{Z}/q\mathbb{Z}$中的本原 $n$次单位根 $\omega_n \in \mathbb{Z}/q\mathbb{Z}$定义的,而FFT则使用 $\omega_n \in \mathbb{C}$的复数表示。

定义 4.(单位根,[3]) 。 $\omega_n$是模 $n$的一个本原$n_q$次单位根,如果$\omega_n^n= 1(\mod q)$且$\omega_n^d= 1(\mod q)$对$n$的每一个因子$d$成立。

FFT和NTT变换 。我们假设$n$是$2$的幂。一个系数向量$a=(a_0,…, a_{n-1})$的$n-$点快速傅里叶变换$\omega(a)$变换到$y=(y_0, y_1,…, y_{n-1})$,其中$A(x)= \sum_{j=0}^{n-1} a_jx^j$定义为$y_i= A(\omega_n^i)= \sum_{j=0}^{n-1} a_j\omega_n^{ij}$,其中$i=$取值为$0,1,…, n-1$。我们基本上是在$n$次单位根$\omega_n^i$的各次幂处求一个次数为$n-1$的多项式的值。由于$n$次单位根之间的正交关系,我们只需用$\omega_n^{-1}$替代$\omega_n$并将每个结果元素除以$n$,即可计算逆快速傅里叶变换$\omega^{-1}(y)$。

在 $n$点数论变换$\omega(a)$的分量属于 $\mathbb{Z}_q$的情况下,其定义类似于附加了模约简 $q$的操作,并且要求$q \equiv 1\mod 2n$。该限制确保了存在一个本原$2n$次单位根 $\psi$,因为$\psi$的阶必须整除群阶。这两种变换都利用了单位根的特殊性质,使得分治法将计算时间从$O(n^2)$提高到$O(n\log n)$[21]。

对于基于格的密码学而言,许多方案由于环 $\mathbb{Z}_q[x]/\langle x^n+ 1\rangle$的良好性质而倾向于在其中进行运算,这非常方便。例如,这使得我们可以应用卷积定理,从而免费实现模约简 $x^n+ 1$。事实上,该定理既可用于快速傅里叶变换,也可用于数论变换。

在[9]中,作者提出了一种高度优化的迭代NTT算法。尽管NTT被限制于满足 $q \equiv 1\mod 2n$的固定素数 $q$和 $n$,但仍需将该实现扩展到其他表示形式,以提供多种效率与安全性的权衡。接下来,我们将简要回顾其中一些优化方法,并介绍如何将其适配到更通用且高度优化的FFT算法中。

4.2 优化

AVX 。第一个优化是使用高级矢量扩展(Advanced Vector Extensions,AVX),以并行执行某些基本计算。AVX是现代Intel和AMD CPU的x86指令集的扩展,例如Intel Sandy Bridge,Intel Ivy Bridge或AMD Bulldozer,用于执行单指令多数据(SIMD)操作。

SIMD指令允许我们在一个CPU周期内对多个数据执行相似的指令。在AVX的情况下,我们拥有16个256位宽的寄存器ymm,它们可以存储总长度为128或256位的任意32位或64位浮点类型的倍数,以及不超过128位的整数值的倍数[14]。我们可以用一个包含$n−1$个双精度浮点值的数组来表示一个次数为$n$的多项式。通过使用AVX,我们可以同时对其中四个64位系数进行操作。这意味着理论上可以获得4倍的加速。然而,由于加载和存储指令的存在,无法完全利用全部带宽。此外,实际加速效果还取决于在这些加载和存储指令之间需要执行多少操作。如果我们考虑一个简单的函数,用于加法或减法两个多项式,则使用AVX仅能得到1.7倍的加速,因为在加载和存储过程之间只有一个vaddpd/vsubpd指令。还有一些其他操作可以并行执行,例如模约简、NTT变换和多项式乘法,这些操作能够实现更高的加速比。我们可以构造另外两个函数poly_equal和poly_elementof,用于检查两个多项式是否相等以及多项式的系数。为此,我们需要使用指令vcmppd和vmovmskpd。

示意图2

根据图3所示,vcmppd指令在条件为真时,将相应寄存器的值全部填入1,条件为假时则全部填入0。该条件可通过特定的十六进制代码指定(NEQ对应0x1c,GT对应0xe,LT对应0x1)。随后,vmovmskpd指令提取四个值的最高有效位,并返回这些最高有效位组成的整数位掩码。若该位掩码在某一点非零(且我们假设系数位于预定义范围$[-(q - 1)/2,(q - 1)/2]$)时,相应的检查将失败。通过这两个函数,与串行版本相比,我们可以实现约3倍的加速。如[9,第3节2]中详细所示,数论变换(NTT)尤其是蝶形操作,也能利用AVX并行运行。为了最小化内存访问,它们决定拆分迭代NTT算法的外层循环,并将多个所谓的层级合并在一起。其思想是通过将部分值保留在AVX寄存器中,以便直接用于后续计算,从而节省存储和加载指令。

关于NTT/FFT中的卷积,几乎每一步多项式乘法都可以使用AVX进行并行化:我们首先通过一些vmulpd指令将$\psi$的幂乘以系数向量。随后,我们将这些向量转换到上述并行NTT电路中,以便同时对四个系数执行逐点乘法。最后,我们应用逆变换,并将得到的向量与$\psi^{-in−1}$并行相乘。实现具有不同 $q$值的方案需要针对特定表示形式采用FFT而非NTT。为此,我们必须处理复数(复$n$次单位根)$\omega_n= e^{2\pi i/n}$。具体来说,我们使用两个双精度浮点值数组来表示一个多项式,一个用于实部,另一个用于虚部。本质上,现在我们必须将上述NTT中解释的所有操作在FFT中执行两次,因为实部和虚部分别处理。只有在逆快速傅里叶变换步骤中,我们可以避免对虚部进行计算,因为最终结果是实数。与NTT算法的另一个区别是,由于我们在复平面上,因此不再需要在每一次蝶形运算中都进行模约简。仅在多项式乘法结束时,在将所有结果系数舍入到最近整数后,才需要执行一次模约简步骤。这一舍入步骤是必要的,因为我们由于浮点运算的不精确性而损失了一些精度。此外,逐点乘法必须调整为并行的复数版本。

设 $v= a+ ib$和 $w= c+ id$为两个复数,其乘积为 $v \cdot w=(ac− bd)+ i(ad+ bc)$。因此,我们需要四次vmulpd、一次vaddpd和一次vsubpd操作来计算两个复数的逐点乘法。与来自[9],的优化NTT算法不同,我们放弃了将多个层级合并的做法,因为我们仅有16个可用的ymm寄存器用于缓存数据。然而,由于实部和虚部的存在,我们需要接近两倍数量的寄存器。这种方法在实践中扩展性不佳,导致内存分配效率降低。

5 性能分析和基准测试

在本节中,我们分析了软件的性能,并报告了签名(多签sign)和验证(多签验证)算法的基准测试结果。实验所用设备为一台超极本,搭载2300 MHz的 Intel Core i5‐6200U(Skylake)处理器,8GB内存,运行Linux 64位系统。

所有软件均使用gcc‐5.4.0编译,并采用编译器标志-Ofast-msse2avx-march=core-avx2。

5.1 我们的多重签名方案的实验结果

在图4中,我们报告了针对100字节消息大小进行500–1000次签名生成的平均结果。我们还报告了忽略广播数据所消耗时间的情况下,单个签名者执行 MSign的时间。这反映了在实际中所有签名者并行运行该协议的事实。为了实现 $n= 1024$的100位安全,我们从集合${-1, 0, 1}$中采样秘密多项式的系数,即对于 $d= 1$。我们应用了来自[1]的一系列安全分析工具来估计该方案的安全级别。我们注意到,由于在较大$q$值的情况下,浮点模运算对 $q −1$的表示不精确,数论变换(NTT)只能用于模数最多为$\log(q)= 23$比特的情况。在下表中,我们提供了不同参数集的时间(ms)和大小(kB),其中 $n= 1024$被固定。特别地,我们给出了在固定协议重复次数$E$的情况下,不同签名者数量 $N$和不同模数 $q$的性能结果。

,对应的多重签名的大小以及压缩因子ϑ。)

该术语根据公式1表示为了获得有效的多重签名,协议需要重启的频率。签名大小的压缩因子定义为 $\vartheta= 1−|\Sigma| / (N·|\sigma|)$,其中 $|\Sigma|$ 表示多重签名的大小,$|\sigma|$表示单个签名的大小。

我们的实验表明,签名过程的时间随着签名者的数量线性增加 $N$以及期望值$E$。然而,它仅与多项式次数呈准线性关系 $n$。相应的快速傅里叶变换的时间略慢一些。我们观察到多重签名大小($|\Sigma| = 2n· \log(N·2(k−32)+1) + 160N$比特)几乎与单个签名一样大,因此根据定义2,在最优的多重签名方案中其大小几乎保持不变。压缩因子$\vartheta$随着参与签名者的增多而增大。然而,验证时间并非恒定,而是与签名者数量呈线性关系 $N$。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值