基于CRT的模幂运算外包

基于中国剩余定理的模幂运算外包算法

摘要

在TCC 2005中,Hohenberger和利西扬斯卡娅首次正式提出了将密码学计算安全外包给不可信服务器的问题。他们提出了一种算法,可将模幂运算的安全外包给两个不互相通信的第三方服务器,但第三方计算的可验证性概率为 1/2。Chen et al.通过将可验证性概率提升至2/3,改进了该算法以适用于两个非共谋服务器。对于实际密码学应用而言,期望的可验证性概率应为 1 −ε,,其中 ε在适当参数选择下可忽略不计。为了更贴近实际应用,我们提出了一种用于安全外包(同时)模幂运算的算法 (s),该算法可视为中国剩余定理(CRT)的又一应用。有趣的是,在存在两个非共谋服务器的情况下,我们的算法的可验证性概率为1。与之前已知的同类外包方案相比,我们的算法在效率和可验证性方面均更为优越。最后,我们讨论了所提出的外包方案的潜在实际应用,例如配对中的最终指数运算。

1 引言

安全传输敏感信息不仅对政府和商业领域至关重要,对个人也同样重要。在这个信息时代,我们进行许多操作,例如银行交易,需要通过互联网发送一些敏感数据。同时,使用智能手机、平板电脑和PDA等移动设备执行关键交易和通信,也带来了与安全性和性能相关的新挑战。尽管现代计算已变得无处不在,但对认证和保密性等传统安全服务的需求仍然不变。结合使用公钥和私钥密码算法可使智能设备在多种应用中发挥作用。然而,公钥密码系统中必不可少的基本操作,如配对和模幂运算,可能会阻碍这些智能设备的性能,因为它们通常由电池供电,且一般设计空间较小和/或计算能力较低,或两者兼有。请注意,它们的电池寿命与其承担的计算工作量成反比。

将(密码学)计算从资源受限设备委托给功能强大的服务器的需求以前所未有的速度增长。这主要归因于多种推动趋势,包括移动设备使用的激增以及云计算的兴起。将昂贵的计算任务委托给(云)服务器可以从两方面使智能设备受益:首先,它帮助这些计算能力有限的设备实现所有公钥密码学功能;其次,有助于延长其电池寿命。在委托计算场景中,一个主要要求是客户端用于委托和验证工作者输出所需的工作量1必须显著低于客户端自行计算该函数或值的成本。

1.1 相关工作

昂贵计算的安全外包一直是密码学研究的活跃领域[1–6]。Gentry关于全同态加密(FHE)的发现[7]表明,通过保持数据的保密性,可以将任何计算外包给云服务器。然而,FHE并未提供直接的机制来验证(云)服务器输出的正确性。FHE虽具备可行性,但缺乏效率,因此在现实世界的密码学应用中, FHE机制难以立即投入使用。近年来,针对公钥密码学中普遍存在的模幂运算的可验证委托受到了广泛关注[8–12]。Matsumoto et al.[13]提出的用于在不可信服务器上外包RSA计算的方法被阮和什帕尔林斯基[14]证明是不安全的。受此启发,霍恩伯格和利西扬斯卡娅[8]提出了一种形式化的外包安全性定义,旨在捕捉两个重要的安全属性,即保密性和可验证性。通常,外包给第三方服务器的计算任务包含秘密输入和/或输出,因此保密性是首要应对的重大挑战。

此外,我们称之为云服务器的第三方服务器可能具有恶意行为。因此,外包方案的首要要求是:对于云服务器而言,除了执行被指派的计算任务外,获取任何有关秘密信息在计算上必须是不可行的。另一个要求是可验证性,因为不可信服务器可能会通过返回无效结果来制造错误。因此,外包设备必须能够验证服务器返回输出的有效性。需要注意的是,这种验证对设备而言必须比自行执行计算任务更加高效。例如,如果模幂运算被外包,则外包设备应仅通过执行模乘、加法和减法即可验证服务器的输出。

双服务器算法

霍恩伯格和利西扬斯卡娅还提出了首个使用两个不可信服务器进行模幂运算的安全外包算法,这两个服务器在确定初始策略后不会共谋。该算法的运行时间为 O(log 2n),相较于以往方法具有渐近意义上的改进。1.5n使用平方‐乘算法计算一次幂运算(不进行外包)所需的乘法运算次数。检测预言机输出错误的概率为 1/2.在ESORICS 2012中,Chen等[10]从效率(减少预言机查询次数)和可验证性(即错误检测概率为 2/3)两方面改进了 Hohenberger‐Lysyanskaya算法。Chen等还提出了针对双服务器模型下同时模幂运算的安全外包算法。

单服务器算法

Wang 等[11]首次提出了针对单一不可信程序模型的通用外包算法,其错误检测概率仅为 1/2。Chevalier 等[15]发现了Wang等方案中的一种攻击,并声称修复该攻击将导致算法效率低下。此外,Chevalier 等指出,最优的基于单服务器的外包算法需要非常数数量的群操作。在[15]中提出的算法仅在面对诚实但好奇的敌手时被证明是无条件安全的,且在不可信服务器环境中未考虑可验证性属性的安全性分析。

基拉兹和乌尊科尔 [16]提出了一种算法,可将单个模幂运算外包给单个不可信服务器,并通过预设参数选择实现可调节的可验证性概率(接近1)。然而,该算法在通信开销方面显著,体现在资源受限设备向服务器传输群元素的开销较大。

1.2 我们的动机与贡献

一方面,我们有两种基于双服务器的算法[8,10],用于外包模幂运算,其错误检测概率分别为1/2和2/3。另一方面,Chevalieret al.[15]指出Wanget al.[11]提出的单服务器算法违反了保密性。在[15]中提出的新单服务器算法未提供错误可验证性,且其安全性仅在诚实但好奇的对手存在下进行了分析。尽管 Kiraz和Uzonkol的算法[16]使外包者能够验证服务器返回结果的正确性,但与现有方案相比,其通信开销显著增加。

如果可验证性概率小于1,则意味着客户端无法验证其对服务器查询所对应的某些输出,因此客户端设备可能最终无法完成预期的任务。因此,需要解决的问题是设计一种算法,以实现利用不可信服务器对模幂运算进行安全外包,同时满足隐私性、高可检查性和资源受限设备与服务器之间的最小通信量。需要注意的是,Dijk et al. 的方案 [9] 在单一不可信服务器模型中具有可检查性为1,但它未能保持查询中输入的隐私性。这促使我们研究如何在确保隐私性和高可检查性的前提下安全地外包模幂运算。本文的贡献如下。

– 首先,我们提出一种算法,用于在双非可信服务器模型中安全地外包变底数变指数的模幂运算。通过使用两个非共谋不可信服务器,我们的算法实现了可检验概率1,从而确保无错误。接着,我们将该方案扩展到同时模幂运算的情形,同时保留了单次幂运算情况下的所有优势。我们在霍恩伯格和利西扬斯卡娅的单恶意安全模型下分析了所提出的算法,并证明我们的算法是安全且可验证的。
– 最后,我们展示了如何在各种应用中使用我们的单模幂运算的安全外包算法(同时模幂运算)。特别是,我们考虑了最终指数运算的委托,这可以说是配对计算中最昂贵的操作。

2 安全定义

霍恩伯格和利西扬斯卡娅 [8]首次提出了将计算任务从计算资源受限设备安全外包给不可信服务器问题的正式安全定义。他们给出了一个框架,用以量化外包任务的效率和可验证性。陈等[10]以及王等[11]遵循这些安全定义来证明其算法的安全属性。本节简要描述霍恩伯格‐利西扬斯卡娅模型,并引导读者参考 [8]以获得完整描述。

Adversarial Behaviour

设 Alg 为由两个组件执行的密码算法:(i)一个计算能力较弱且受信任的组件 C(即客户端);以及(ii)一个计算能力强但不受信任的组件 U,该组件通过 C 的预言机查询被调用。我们称 (C,U) 构成了算法 Alg 的可外包安全实现,其中 C 通过调用 U. 来执行任务。

对手 A=(E,U′ )被建模为分为两部分:(i) 对抗环境 E,向Alg提交对抗性选择的输入;(ii) 恶意预言机 U′,代替 U.运行。注意, U和 U′以相同的方式被调用,以镜像 U在执行期间的视图。假设 E和 U在初始阶段商定联合策略后,在开始与 C.交互时不再具有直接通信通道。它们只能通过 C.传递消息来相互通信。

Input/Output Specifications

该算法的输入/输出可能包含以下信息:
- 秘密信息 仅对 C可用;
- 受保护信息 可供 C和 E使用,但应对 U.保密。请注意,受保护信息可根据输入是诚实执行生成还是对抗性生成进一步分类;
- 非保护信息 available to C, E and U.

外包算法 Alg定义为接受三个输入(秘密、受保护、非保护)并产生三个输出(秘密、受保护、非保护)。根据上述输入/输出规范,附录1中重新给出了[8]提出的正式定义(定义A)。

2.1 外包安全定义

非正式地,外包安全性定义必须满足以下安全性要求:
– 保密性。即使恶意环境 E与预言机 U′事先约定了一种联合策略,也不应获得关于算法Alg的私有输入和输出的任何知识。为实现这一性质,模型假设存在一个模拟器 S1,其能够在不访问私有输入的情况下模拟 E的视图。
– 可验证性。任何恶意预言机 U′通过作为 C的预言机而非 U,所能获取的关于Alg输入的信息,也都能在没有该行为的情况下获取。为实现这一性质,模型假设存在一个模拟器S2,其能够在不访问私有或受保护输入的情况下模拟 U′的视图。

为了形式化地描述上述要求,霍恩贝格尔‐利萨扬斯卡娅引入了外包安全定义 [8]并将其重述于附录A中的定义 2、3、4和 5。

3 模幂运算安全外包至两个非共谋的不可信服务器

陈等人对霍恩伯格‐利萨扬斯卡娅算法的改进是目前相关文献中在两个互不勾结的不可信服务器模型下安全外包变底数、变指数模幂运算的最佳已知算法。他们方案的问题在于,由于其设计原因,外包方无法验证服务器的所有输出,这使得该算法不太适合实际应用。在本节中,我们提出了一种能够保护输入隐私并实现可验证性概率为1的算法。我们将用于单次幂运算的双服务器外包算法记为2EXP。

3.1 2EXP:单模幂运算的安全外包算法

设 p和 q为两个素数,使得 q|(p−1)。则在 Z∗ p中存在一个阶为 q.的乘法子群。客户端 C的任务是计算 ua mod p,其中u ∈ Z∗ p为变量底数, a ∈ Zq为变量指数。预言机{U1,U2}的任务是在输入(i, j, k).时返回输出 ij mod k。

在我们的算法中,为了保持 u和 a值的保密性,它们在作为输入提供给 {U1,U2}之前会被计算上掩盖。与之前已知的方案不同,我们使用中国剩余定理(CRT)来掩盖 u 。具体细节如下:

预计算 。客户端 C为固定底数 g1 ∈ Z∗ p生成一个表(T1),其中包含形式为(ti, g 1ti)的对。每当需要一个新的形如(t, gt 1)的对时,客户端从表中选择少量随机选择的对,并通过将所有第一项相加得到 t,并通过将所有第二项相乘得到 gt 1。类似地,客户端 C为素数模 r2 = p和固定底数 g2 ∈ Z∗ r2生成另一个表(T2),其中包含形式为(αi, g αi 2)的对。通过适当设置参数,这两个表使得客户端能够以少量乘法运算生成新的对(α, giα)用于 i= 1,2,而无需执行模幂运算的实际开销。先前已知的相关方案广泛使用这种预处理方法,尽管它们被称为不同的名称;例如[8],中的RAND算法、[10], BPV+中的EBPV算法或[11]中的SMBL。该技术由Boyko等人发明,阮等人证明了使用此方法生成的对在统计上与使用随机选择的指数[18]计算出的对是不可区分的。如同[11]中所述,我们使用BPV+技术来避免在线乘法以生成新对。有关BPV+的更多细节,请参见[11,第3节1]。

我们的算法2EXP步骤如下。

掩码 u .设 n= pr1r2对于素数 r1和 r2。(注意,对于足够大的三素数模 n ,即使已知其中一个素数(例如 p),目前也不存在将其分解为素数的多项式时间算法[19]。)则φ(n) =(p − 1)(r1 − 1)(r2 − 1)。选择 h ∈ Z ∗ r1 。使用BPV+技术计算(θ, g θ 1)。根据中国剩余定理(CRT),我们知道以下三重同余方程组
x ≡ ug θ 1 mod p and x ≡ h mod r1 and x ≡ g2 mod r2
有唯一解 x mod n,客户端C按如下方式计算该解。
x= u · g θ 1 · r1 · r2 ·(r −1 1 r −1 2 mod p)+ h· r2 · p ·(r −1
2 p −1 mod r1) + g2 · p · r1 ·(p −1r −1 1 mod r2).
(1)

掩码 a .为了掩码 a, C调用BPV+算法以获取对(α, g2α)和(β, g2β)。现在 C计算: 1. a1= a− α; 2. a2= a− β;

查询 U1 .现在 C调用BPV+算法以获取数对 (t, gt 1) 并向 U1发送以下查询,顺序随机:
1. (x,a1, n) → X1; 2. (x, β, n) → X2; 3. (gt 1,−aθ/t,p) → X4;

查询 U2 .现在 C向 U2发送以下查询,顺序随机:
1. (x,a2, n) → X3;2. (gt 1,−aθ/t,p) → X5;

验证 {U1,U2} 输出的正确性
1. C检查是否
g2β mod r2 =? X2 mod r2. (2)
2. C检查是否
[X1 mod r2 · g2α] mod r2 =? X2 · X3 mod r2. (3)
3. C检查是否
X4 =? X5 mod p. (4)

恢复 ua .如果公式2、3和4成立,则 C认为所有值X1、 X2、 X3、 X4和 X5均已正确计算。这意味着X2 · X3 · X4 ≡ ua mod p,由同余方程组得出。如果验证失败,则 C输出错误信息。

备注 1 . (可验证性)注意,客户端会检查所有输出的查询,然后仅计算输出ua。因此,客户端现在认为 ua已被正确计算。在上述算法中, p和 n均被发送到服务器 U1和 U2,从而泄露了 r1r2,但服务器在得知 r1r2.后并不会获得任何优势。注意,输出X1 X2和 X3的正确性是通过客户端存储的值 g α 2和 g β 2进行验证的,因此试图发送虚假结果的服务器可以被检测到。

3.2 安全性和效率分析

在本节中,我们使用霍恩伯格和利西扬斯卡娅的单一恶意模型 [8] 来分析所提出算法的安全性属性。

引理1 (正确性) 。在单一恶意模型中,算法(C,U1,U2)是 2EXP的正确实现,其中输入(a, u,p)可以是诚实,秘密;或诚实,受保护;或对抗性保护。

证明 。我们知道,对于任意整数 m ≥ 0,
xm={u · g1θ · r1 · r2 ·(r−1 1 r−1 2 mod p)+ h· r2 · p ·(r−1 2 p−1 mod r1) + g2 · p · r1 ·(p−1r−1 1 mod r2)}m
= ∑
k1+k2+k3=m m!
k1!+k2!+k3! A k1 Bk2 Ck3
(5)
其中 A= u · g1θ · r1 · r2 ·(r−1 1 r−1 2 mod p),B= h · r2 · p ·(r−1 2 p−1 mod r1),C
= g2 · p · r1 ·(p−1r−1 1 mod r2),且 ki, 1 ≤ i ≤ 3为非负整数。对等式 r2两边同时取模5, 可得:
xm mod r2= gm 2 mod r2, (6)
因为上述求和中除了 k3= m的情况外,所有项都消失。类似地,对公式5两边同时模 p约简,我们得到
xm mod p= um · gmθ 1 mod p; (7)
如果 Ui, i= 1,2 中有一个是诚实执行的,则很容易检查是否
X4 =? X5 mod p. (8)
同样使用公式6和7我们得到
X1= xa1 mod n={ua1g a1θ 1 mod p
a1 2 mod r2
(9)
and
X2= xβ mod n={uβg βθ 1 mod p
2 mod r2
(10) and
X3= xa2 mod n={ua2g a2θ 1 mod p
a2 2 mod r2
(11)
利用存储的 g β 2值,从公式10可知 X2 mod r2= g β 2.一旦 X2的正确性得到验证,则容易检查X1 mod r2 · g α 2 mod r2?= X2 · X3 mod r2是否成立,使用公式 9和 11。如果所有等式均成立,则通过模约简得到期望结果 p.

在以下定理中,我们给出一个证明概要,以证明(C,U1,U2) 是 2EXP, 的外包安全实现,符合霍恩伯格‐利西扬斯卡娅安全模型。

定理1 (隐私) 。在单恶意程序模型中,算法对(C,U)是2EXP的外包安全实现,其中输入(a, u,p)可以是诚实,秘密;或诚实,受保护;或对抗性保护。

证明 。假设 A=(E,U′ 1,U′ 2)是一个概率多项式时间(PPT)对手,其在单个恶意程序模型中与PPT算法 C进行交互。

配对一: (E learns nothing) EVIEWreal ∼EVIEWideal
如果输入 (a, u,p) 不是诚实, 秘密的,则模拟器 S1 的行为与实际实验中的行为相同。如果输入是诚实, 秘密的,则 S1按如下方式行为: S1忽略在第 i轮接收到的输入,并选择三个素数 p∗、 r1∗ 和 r2∗,其大小分别与 p、 r1 和 r2 相同,并设置 n∗= p∗r1∗r ∗ 算计算,其中 u∗ 和 a∗ 由 S1 从用于选择 u 和 a. S1 的相同分布中选取, 使用适当选择的 α∗ 以与我们的算法相同的方式对 u∗ 和 a∗ 进行掩码处理,并计算 x∗、 a1∗ 和 a2∗.。现在, s1 使用输入 (x∗, a1∗, n ∗)、(x∗, β∗, n∗) 和 (g ∗t1∗ 1, −a∗θ∗ t1∗ ,p∗) 查询 U′ 1。然后 s1 使用输入 (x∗, a2∗, n ∗) 和 (g ∗t1∗ 1, −a∗θ∗ t1∗ ,p∗) 查询 U′ 2。. S1 根据算法描述检查所有输出。如果未检测到错误,则 S1 输出 Y i p= ∅、 Y i u= ∅、replacei= 0.;即,理想过程的输出被设为 (estatei, yi p, y i u);否则, S1 选择一个随机元素 r 并输出 Y i p= r、 Y i u= ∅、 replacei=1.;即,理想过程的 输出被设为 (estatei, r, ∅)。在这两种情况下,S1 都保存适当的状态。

在实际过程中, C所发出的查询中的所有组件(x, g t1 1, a1, β, a2, −aθ t1)均被独立地重新随机化,以实现计算不可区分性。在理想过程中,值(x∗, g ∗t ∗ 1 1 , a1∗, β ∗, a2∗, −a ∗θ∗ t1∗)从相同的分布中均匀随机选取。因此,在实际过程和理想过程中,输入到 U′ 1和 U′ 2的输入分布在计算上是不可区分的。现在,考虑以下场景:
– 如果 U′ i 在第 i 轮中有一方诚实执行,则该过程将完美执行算法2EXP,使得理想实验中 U′ i 的输出相匹配。因此,模拟器 S1 不会在实际实验中替换 2EXP 的输出(即 replacei= 0)。故 EVIEWi real ∼EVIEWi ideal. – 如果其中一方 U′ i 不诚实并在第 i 轮输出错误值,则双方 C 和 S1 以概率 1 检测到该行为,因为所有输出均可被验证。在实际实验中,来自 U′ i 的输出会进一步按照公式 9、10进行处理。类似地,在理想实验中, S1 使用随机值 r. 进行模拟。因此,即使 U′ i 在第 ith 轮不诚实,EVIEWi real ∼EVIEWi ideal
通过混合论证,可以证明EVIEWreal ∼EVIEWideal.

第二对: ( U′ i learns nothing): UVIEWreal ∼UVIEWideal
设 S2为一个PPT模拟器,其行为方式不依赖于输入(a, u, p)是诚实, 秘密、 诚实, 受保护还是对抗性保护。也就是说, S2在第 i轮忽略输入,并相应地进行形式为(x ∗ , a ∗ 1 , n ∗ ),(x ∗ , β ∗ , n ∗ ),(x ∗ , a ∗ 2 , n ∗ ),(g ∗t ∗ 1 1 , −a ∗ θ ∗ t∗ 1 ,p ∗ ),的查询
U′ i.然后 S2保存其自身状态以及 U′的状态。注意 E可以轻易区分这两个实验,因为实验的输入可能是诚实, 受保护的或对抗性保护的。但它无法将此信息传递给 U′ i.这是因为,在理想实验中,输入在提供给 C之前已被U′ i.在理想实验中,模拟器 S2始终查询组件(x∗、 g∗t1∗ 1 、 a1∗、 β∗、 a2∗、 −a∗θ∗ t1∗ ),这些组件是从相同分布中均匀随机选择的。因此,每一轮的UVIEWi real ∼UVIEWi ideal为 i.通过混合论证可知,UVIEWreal ∼UVIEWideal.

定理2 (可验证性) 。在单恶意程序模型中,上述算法(C,U1,U2)是 2EXP的一个 (3,1)-外包安全实现。

证明 。对于一个 k−位指数 a,计算 ua mod p大约需要1.5k次模乘(MM), 使用平方乘方法。注意,等式12和 t−1的计算可以离线完成。在线计算可如公式2、3所示,以及用于计算 aθt−1.因此我们的算法2EXP需要 3 次模乘。因此,我们的算法(C,U)是3−对2EXP的高效实现。

由于第三个查询(X4和 X5)在两个服务器 Ui上是相同的,因此很容易检测出其中一个服务器是否表现出恶意行为。客户端通过将其他输出X1、 X2、 X3约简到模 r2.来进行验证。如果验证通过,则客户端通过联立线性同余方程组,将值约简到模 p.来计算所需结果。然而,一个恶意服务器Ui可以在不被 C检测到的情况下输出错误的值,前提是它能够找到模数 r2.。也就是说,如果 恶意的 Ui知道 r2,并将x约简到模 r2以获得 g2,那么它可以提交 X1、 X2、 X3的结果用于底数 g2,而不是 xi.。由于客户端通过将它们约简到 r2来验证 Ui的输出,因此验证会通过。但值 X1、 X2、 X3将无法帮助客户端找到 ua, 因为将 Xi约简到模 p不会得到以 u.为底的值。由于服务器通过查询输入知道了 p和 r1 ∗ r2,它必须对 r1 ∗r2.求解因式分解问题。也就是说,从[19]可以明显看出,对于足够大的三素数模数 n= p ∗r1 ∗r2,即使已知其中一个素数 (例如 p),目前也不存在已知的多项式时间算法能将其分解为素数。因此,我们的算法是2EXP的一种可验证实现。结合上述论证,我们证明了该定理。

3.3 比较

表1列出了先前在实现隐私和效率的基于两个不可信服务器的外包方案中, C执行的操作数。从表中可以看出,我们的算法在效率和可验证性参数方面均具有优势。我们用MM表示模乘。

Exp 算法 MMs 服务器 查询U1+U2 可验证性
ua 霍恩伯格‐利西扬斯卡娅 [8] 6 O(RAND)+9 2 8
ua Chen et al.[10] 5 O(RAND)+7 2 6
ua Ours 3 2 5
## 4 2GEXP:用于外包同时模幂运算的算法
考虑两个素数 p 和 q,使得 q|(p−1),以及 Z∗ p 中阶为 q. 的乘法子群 s。 C 的任务是计算 ∏ uai i mod p,其中 ui ∈ Z∗ p 是 i=1 变量底数,ai ∈ Zq 是变量指数。{U1,U2} 的任务是在输入 (i, j, k) 时返回输出 ij mod k。由于 C 旨在保护 1 ≤ i ≤ s 的值 ui 和 ai 不被 {U1,U2} 获取,这些值在作为输入 提供给 {U1,U2} 之前会进行计算上加盲化处理。如第3.1节所示,变底数 ui 使用中国剩余定理(CRT)进行掩码。我们的算法描述如下:

预计算 。 我们使用相同的预处理技术,即BPV+算法和素数 r1以及 r2如第3.1节所述。唯一的区别是 C需要对每一对(ai, ui)调用它。选择一个基 h ∈ Z ∗ r1。

掩码ui .使用BPV+技术计算(θi, g θi 1) i={1,…, s}。对每个 i={1,…, s}使用中国剩余定理(CRT)可得到以下三个同余方程组的同步解
xi ≡ uig θi 1 mod p and xi ≡ h mod r1 and xi ≡ g2 mod r2
及其唯一解 xi mod n 可计算为
xi= ui · g θ i 1 · r1 · r2 ·(r −1 2 mod p)+ h· r2 · p ·(r −1
2 p −1 mod r1) + g2 · p · r1 ·(p −1r−1 1 mod r2).
(12)

掩码 ai .为了盲化 ai(1 ≤ i ≤ s), C运行BPV+ 2s次以获得对{(αi, g α i
(βi, g β i .然后 C计算:
ai1= ai − αi 和 ai2= ai − βi.

查询 U1 .现在 C调用 BPV+算法以获取一对 (t, g t 1),并按随机顺序向 U1发送以下 查询:
1. (xi, ai1, n) → Xi1; 2. (xi,
βi, n) → Xi2; s3. (g t 1 ,∑(−aiθi)/t,p) → X4; i=1

查询 U2 .现在 C向 U2以随机顺序进行以下查询 :
1. (xi, ai2, n) → Xi3;s2. (g1t,
∑(−aiθi)/t,p) → X5;i=1

验证 {U1,U2} output 的正确性
1. C首先检查是否
s

i=1
gβi 2 mod r2 =?
s

i=1
Xi2 mod r2. (13)
2. C然后检查是否
[ s ∏
i=1
Xi1 mod r2 ·
s

i=1
gαi 2] mod r2 =?
s

i=1
(Xi2 · Xi3) mod r2. (14)
3.和
X4 =? X5 mod p. (15)
s恢复 ∏ uai i。 如果式13、14和 15成立,则 C认为对于 1 ≤ i ≤ si=1所有值 Xi1, Xi2, Xi3, Xi4和 Xi5均已正确计算。这s s意味着
∏ Xi2 · Xi3 · Xi4 ≡ ∏ uai i mod p由于同余方程组的联立性。
i=1 i=1如果检查失败,则 C输出错误消息。

4.1 安全性和效率分析

第3节和 4节中提出的算法依赖于相同的输入掩码技术(a, u)。因此,由于篇 幅限制,我们不再重复引理 1中的正确性引理,也不再给出后续定理在同时进 行幂运算情况下的证明。

定理3 。 在单恶意程序模型中,算法对(C,U)是2GEXP的外包安全实现,其中 输入(ai, ui,p)可以是诚实,秘密;或诚实,受保护;或对抗性保护。

定理4 。 在单恶意程序模型中,上述算法(C,U1,U2)是(3s,1)-外包安全实现的 2GEXP。

4.2 比较

表2列出了在先前实现隐私和效率的、基于两个不可信服务器的外包方案中, C执行的操作数量。从表中可以看出,我们的算法在效率和可验证性参数方面均 具有优势。我们以略高的通信开销为代价,实现了 1−可验证性,相较于现有方 案略有增加。然而,我们可以通过降低可验证性概率来减少通信开销。我们用 MM表示模乘。

Exp 算法 MMs 服务器 查询U1+U2 可验证性
s ∏
i=1
uai i
Chen et al.[10] 5O(RAND)+3s+4 2 2s+4
s ∏
i=1
uai i
Ours 3s 2 3s+2

5 我们的算法的潜在应用

在本节中,我们识别并讨论了我们的安全外包算法在单个和同时模幂运算中的有用 性。

5.1 安全外包配对中的最终指数运算

配对已在密码学中得到广泛应用,并已成为一个重要且具有吸引力的研究领域。鉴于基于配对的方案的优势,最近的研究集中在将它们部署到各种场景 [20–22]中。随着手持资源受限设备的使用呈指数级增长,为其配备配对功能可能有助于这些设备提供多种安全服务。典型的配对计算包括两个步骤,即 Miller算法 [23] 和最终指数运算。研究工作主要集中在加快配对计算的速度,主要是改进 Miller算法的复杂性,而关于加速最终指数运算步骤的研究较少[24,25]。现在我们将展示我们的安全外包算法如何使最终指数运算步骤受益。

让我们考虑Tate配对,这是最广泛使用的配对类型。考虑一条定义在有限域 E上的椭圆曲线 Fq,其中 k为嵌入度。对于 P和 Q上任意两点 E(F q k), Tate配对值在(P, Q)处定义为 e(P, Q)= fr,P(Q) q k −1 r ,其中 fr, P ∈ F q k[x, y]被称为Miller函数。因此,Tate配对中的最终指数运算是将 F q k中的一个元素提升至指数 (q k − 1)/r 次幂。我们注意到,我们的单次幂运算外包算法可以适应此场景,以完全安全地外包最终指数运算。

另一种常见的方法是相应地拆分指数 (q k −1)/r,使得最终指数运算的计算表示为如下形式的有限乘积 h∏ s i=1 gi r i,其中 h 是相对容易计算的简单部分, 而乘积的其余部分被视为困难部分。由于每个 gi 都依赖于 P 且 Q 不是固定 元素,因此最终指数运算的困难部分可视为一种同时幂运算,从而我们可以使用针对同时情况设计的外包算法来安全地外包最终指数运算的困难部分。

5.2 可外包安全的密码方案与原语

在本节中,我们回顾了相关文献中指出的模幂运算外包算法的应用。霍恩伯格 和利西扬斯卡娅[8]展示了如何使用他们的单次幂运算外包算法来实现可外包安全的克雷默‐肖普加密[26]以及可外包安全的施诺尔签名[27,28]方案。Chen等[10]证明了他们用于同时模幂运算的外包算法在变色龙哈希[29]和陷门承诺[30]等密码原语中的应用。最近,Wang等[11]表明,在云存储的可证 明数据持有(PDP)[31]方案中,使用针对同时情况的外包算法具有优势。由于我们的算法是通用且更优的,因此在上述任何提到的密码协议中使用时,可能带来更多的好处。

6 结论

我们提出了针对单次和同时模幂运算的安全外包算法。与现有的双服务器方案 相比,我们的算法更具优势。接着,我们证明了所提出的算法满足霍恩伯格‐利 西扬斯卡娅安全模型的安全性概念。最后,我们讨论了一些有趣的应用,例如 对配对中的最终指数运算进行外包。我们遗留的问题是:如何利用单个不可信服务器实现可验证概率为1的模幂运算安全外包。

【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)内容概要:本文研究了一种基于机器学习(ML)和离散小波变换(DWT)的电能质量扰动分类方法,并提供了Matlab实现方案。首先利用DWT对电能质量信号进行多尺度分解,提取信号的时频域特征,有效捕捉电压暂降、暂升、中断、谐波、闪变等常见扰动的关键信息;随后结合机器学习分类器(如SVM、BP神经网络等)对提取的特征进行训练与分类,实现对不同类型扰动的自动识别与准确区分。该方法充分发挥DWT在信号去噪与特征提取方面的优势,结合ML强大的式识别能力,提升了分类精度与鲁棒性,具有较强的实用价值。; 适合人群:电气工程、自动化、电力系统及其自动化等相关专业的研究生、科研人员及从事电能质量监测与分析的工程技术人员;具备一定的信号处理基础和Matlab编程能力者更佳。; 使用场景及目标:①应用于智能电网中的电能质量在线监测系统,实现扰动类型的自动识别;②作为高校或科研机构在信号处理、式识别、电力系统分析等课程的教学案例或科研实验平台;③目标是提高电能质量扰动分类的准确性与效率,为后续的电能治理与设备保护提供决策依据。; 阅读建议:建议读者结合Matlab代码深入理解DWT的实现过程与特征提取步骤,重点关注小波基选择、分解层数设定及特征向量构造对分类性能的影响,并尝试对比不同机器学习型的分类效果,以全面掌握该方法的核心技术要点。
<think>我们正在讨论幂运算(Modular Exponentiation),这是一种在密码学(尤其是RSA算法)中至关重要的运算幂运算指的是计算形如 \( a^b \mod m \) 的表达式,其中 \( a \) 是底数,\( b \) 是指数, \( m \) 是数。其核心挑战在于当 \( a, b, m \) 非常大时(例如在RSA中,\( b \) 可能是一个2048位的整数),直接计算 \( a^b \) 再取是不可行的,因为 \( a^b \) 会超出计算机的整数表示范围。因此,我们需要高效的算法。 ### 一、幂运算的数学原理 幂运算基于以下运算的性质: 1. **乘法性质**: \( (a \times b) \mod m = [(a \mod m) \times (b \mod m)] \mod m \) 2. **幂运算性质**: \( a^b \mod m \) 可以通过将指数 \( b \) 分解为二进制形式,然后利用平方和乘法逐步计算。 ### 二、快速幂算法(平方乘算法) 快速幂算法(也称为平方乘算法)将指数 \( b \) 表示为二进制形式,例如 \( b = (b_k b_{k-1} \dots b_1 b_0)_2 \),其中 \( b_i \) 是二进制位(0或1)。那么: \[ a^b = a^{\sum_{i=0}^{k} b_i \cdot 2^i} = \prod_{i=0}^{k} \left( a^{2^i} \right)^{b_i} \] 因此,我们可以通过迭代的方式计算: - 从结果 \( res = 1 \) 开始。 - 遍历指数 \( b \) 的每一个二进制位(从最低位到最高位): - 如果当前位为1,则将结果乘以当前的底数 \( a \) 并取 \( m \)。 - 然后将底数平方并取 \( m \)(因为 \( a^{2^{i+1}} = (a^{2^i})^2 \))。 - 指数右移一位(相当于除以2)。 **算法步骤**: 1. 初始化结果 \( res = 1 \)。 2. 将底数 \( a \) 对 \( m \) 取(减少计算量)。 3. 当指数 \( b > 0 \) 时循环: - 如果 \( b \) 是奇数(即最低位为1),则 \( res = (res \times a) \mod m \)。 - 将 \( a \) 平方: \( a = (a \times a) \mod m \)。 - 将 \( b \) 右移一位(即 \( b = b // 2 \))。 4. 返回 \( res \)。 **时间复杂度**:由于指数 \( b \) 的二进制位数是 \( \log_2 b \),所以循环执行 \( O(\log b) \) 次,每次执行常数次乘法和取运算。因此,总时间复杂度为 \( O(\log b) \),这对于大指数非常高效。 ### 三、幂运算在密码学中的应用 在RSA加密和解密过程中,核心操作就是幂运算: - **加密**: \( c = m^e \mod n \) - **解密**: \( m = c^d \mod n \) 其中 \( e \) 和 \( d \) 都是非常大的数(通常1024位以上),因此必须使用快速幂算法。 此外,幂运算的逆问题(即已知 \( a, m \) 和 \( a^b \mod m \),求 \( b \))称为**离散对数问题**,目前没有已知的多项式时间算法求解(在经典计算机上),这构成了公钥密码学(如Diffie-Hellman密钥交换、ElGamal加密)的安全基础[^1]。 ### 四、实现示例 以下是用C语言实现的快速幂算法(幂运算): ```c #include <stdio.h> // 函数:计算 a^b mod m long long mod_exp(long long a, long long b, long long m) { long long res = 1; a = a % m; // 先取,确保a<m while (b > 0) { // 如果b是奇数,则乘上当前的a if (b % 2 == 1) { res = (res * a) % m; } // 将指数右移一位(相当于除以2) b = b >> 1; // 将底数平方 a = (a * a) % m; } return res; } int main() { long long a = 2, b = 10, m = 1000; printf("%lld^%lld mod %lld = %lld\n", a, b, m, mod_exp(a, b, m)); // 输出 2^10 mod 1000 = 24 return 0; } ``` ### 五、注意事项 1. **大整数处理**:在实际密码学应用中,\( a, b, m \) 可能非常大(例如2048位),因此需要使用大整数库(如GMP)来避免溢出。 2. **常数时间实现**:在安全敏感的场景中,算法执行时间不应泄露指数 \( b \) 的信息(例如,避免通过时间侧信道攻击推断私钥)。因此,需要实现常数时间的快速幂算法(通常通过固定循环次数和避免条件分支来实现)。 3. **算法优化**:进一步优化包括使用蒙哥马利约简(Montgomery Reduction)来加速运算。 ### 总结 幂运算是密码学中的基础运算,其高效实现依赖于快速幂算法。该算法通过指数的二进制分解,将乘法和取操作控制在 \( O(\log b) \) 次,从而能够处理极大的指数。在RSA、Diffie-Hellman等公钥密码系统中,幂运算直接关系到系统的安全性和效率。 §§相关问题§§ 1. 如何用快速幂算法计算矩阵的幂? 2. 离散对数问题在密码学中还有哪些应用? 3. 如何优化幂运算以抵抗侧信道攻击? 4. 在RSA算法中,为什么选择65537作为公钥指数? 5. 除了快速幂算法,还有哪些方法可以计算大数的幂?</think>### 幂运算的数学原理与实现详解 幂运算(Modular Exponentiation)是密码学中的核心运算,指计算形如 \( a^b \mod m \) 的表达式。其核心在于**高效计算大指数幂的运算结果**,同时避免中间值溢出。下面从数学原理和实现方法两方面详细说明: --- #### 一、数学原理 1. **运算性质** 幂运算基于以下关键性质: \[ (a \times b) \mod m = [(a \mod m) \times (b \mod m)] \mod m \] 这一性质允许我们将大数运算分解为多个小数运算的组合[^1]。 2. **指数分解原理** 任意指数 \( b \) 可表示为二进制形式: \[ b = \sum_{i=0}^{k} b_i \cdot 2^i \quad (b_i \in \{0,1\}) \] 因此: \[ a^b = a^{\sum b_i \cdot 2^i} = \prod_{i=0}^{k} \left( a^{2^i} \right)^{b_i} \] 例如: \[ a^{11} = a^{8+2+1} = a^8 \times a^2 \times a^1 \] 3. **离散对数难题** 已知 \( a^b \mod m \) 求 \( b \) 是**离散对数问题**,在经典计算机上无多项式时间解法,这是公钥密码学的安全基础[^1]。 --- #### 二、快速幂算法实现 快速幂算法通过**二进制分解指数+迭代平方**实现 \( O(\log n) \) 时间复杂度: ##### 算法步骤(迭代法): 1. 初始化结果 \( res = 1 \) 2. 将底数 \( a \) 对 \( m \) 取: \( a \leftarrow a \mod m \) 3. 当指数 \( b > 0 \) 时循环: - 若 \( b \) 为奇数: \( res \leftarrow (res \times a) \mod m \) - 将 \( a \) 平方: \( a \leftarrow (a \times a) \mod m \) - 将 \( b \) 右移一位: \( b \leftarrow b // 2 \) 4. 返回 \( res \) ##### 代码实现(C语言): ```c #include <stdio.h> int mod_exp(int base, int exp, int mod) { int res = 1; base %= mod; // 初始取 while (exp > 0) { if (exp & 1) // 指数为奇数 res = (res * base) % mod; base = (base * base) % mod; // 底数平方 exp >>= 1; // 指数右移 } return res; } int main() { printf("2^10 mod 1000 = %d\n", mod_exp(2, 10, 1000)); // 输出 24 return 0; } ``` ##### 示例计算 \( 3^{13} \mod 7 \): | 步骤 | 指数 \( b \) (二进制) | \( a \) | \( res \) | |------|------------------------|---------|--------------------| | 初始 | 1101 (13) | 3 | 1 | | 1 | 1101 (奇) | 3 | \( 1×3 \mod 7=3 \) | | | 右移→110 | \( 3^2 \mod 7=2 \) | | | 2 | 110 (偶) | 2 | 3 | | | 右移→11 | \( 2^2 \mod 7=4 \) | | | 3 | 11 (奇) | 4 | \( 3×4 \mod 7=5 \) | | | 右移→1 | \( 4^2 \mod 7=2 \) | | | 4 | 1 (奇) | 2 | \( 5×2 \mod 7=3 \) | | 结果 | | | **3** | --- #### 三、密码学中的应用 1. **RSA加密/解密** - 加密: \( c = m^e \mod n \) - 解密: \( m = c^d \mod n \) 依赖快速幂处理大指数(如2048位)[^1][^3]。 2. **Diffie-Hellman密钥交换** 计算 \( g^{ab} \mod p \) 建立共享密钥,其中 \( a,b \) 为私钥。 3. **数字签名** DSA和ECDSA签名验证涉及幂运算。 --- #### 四、关键优化技术 1. **蒙哥马利约简** 通过预计算加速运算,适用于硬件实现。 2. **滑动窗口法** 将指数分组处理,减少乘法次数(如处理连续0比特)。 3. **中国剩余定理(CRT)** 在RSA解密中,将运算分解为: \[ m = [ (c^{d_p} \mod p) \cdot q \cdot q^{-1} + (c^{d_q} \mod q) \cdot p \cdot p^{-1} ] \mod n \] 速度提升4倍[^3]。 --- #### 五、安全性注意事项 1. **侧信道攻击防御** - 常数时间实现:避免条件分支泄露指数信息 - 盲化技术:添加随机数掩码 2. **大数选择原则** - 数 \( m \) 至少2048位 - 指数 \( b \) 需足够大(如RSA中 \( e>2^{16} \)) > 快速幂算法将指数运算从 \( O(n) \) 优化到 \( O(\log n) \),使1024位RSA解密在普通CPU上仅需毫秒级[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值