基于可穿刺加密的前向安全消息

可穿刺加密前向安全通信
部署运行你感兴趣的模型镜像

基于可穿刺加密的前向安全异步消息

摘要

在本文中,我们研究了在电子邮件和短信等存储转发消息系统中实现前向安全加密的新机制。在前向安全加密方案中,用户会定期更新其私钥,以确保即使其密钥发生泄露,过去的消息仍能保持机密。我们工作的主要贡献是提出一种新型的加密形式,我们称之为可穿刺加密。通过使用可穿孔加密方案,接收者可以反复更新其解密密钥,从而撤销对特定消息、接收者或时间段的解密能力。最重要的是,此更新过程不需要接收者与发送者通信或向发送者分发新的密钥材料。我们展示了如何将可穿刺加密与Canetti等人提出的前向安全公钥加密提案相结合,以实现具有低开销的实用型前向安全通信。我们实现了所提出的构造方法,并通过实验验证了这些新构造方法的实用性。

一、引言

诸如电子邮件和短信之类的异步消息服务已成为个人和商业通信中不可或缺的一部分。近年来,一些消息服务开始支持端到端加密,以保护通过不安全通信信道传输的内容。本文讨论了许多此类加密方案的一个特定缺陷:当用户的密钥发生泄露时,它们通常无法保证过去消息的保密性。这一必要属性被称为前向保密,对于保护用户机密性至关重要。这对于使用去中心化或基于云的交付系统、且可能将旧消息无限期保存的消息系统尤为重要。

虽然为TLS [23]或OTR [15],等交互式协议添加前向保密相对简单,但在异步的“存储‐转发”消息系统中实现前向保密则要困难得多,例如加密电子邮件、短信,或为离线用户提供消息传递功能的消息系统(e.g.,苹果iMessage和谷歌环聊)。事实上,目前三种最流行的异步消息加密协议——苹果iMessage[21],、OpenPGP[17]和安全/多用途互联网邮件扩展[36],——均未提供前向保密机制。

解决这个问题并非易事。异步消息系统不要求发送者和接收者同时在线,也不强制双方进行双向交互。由于投递失败和连接问题,消息可能会被显著延迟。一些扩展功能,例如用于电子邮件 [28] 垃圾邮件防护的“灰色列表”以及匿名转发器/混洗网络 [22],,会故意在传递过程中引入较长的延迟。

现有的为加密电子邮件添加前向保密的方案 [39],[8],[40]增加了复杂性并引入了新的故障点。它们通常需要高度可用的网络基础设施,以将新鲜的密钥材料分发给发送者[39],,或强制更改客户端交互方式,例如要求在安全通信之前进行初始消息交换[33]。除了增加成本外,此类机制在扩展上成本高昂,并且可能无法抵御主动攻击者。作为这些挑战的具体示例,WhatsApp使用的TextSecure协议1[4]实现了一种极其细粒度的前向安全性机制,其中客户端将数百个临时密钥上传到在线服务器,再由该服务器将其分发给发送者[32]。这不仅带来了巨大的存储成本,而且攻击者可以轻易耗尽特定接收者的预密钥供应,从而导致机制出现开放式失败。

在欧洲密码学会议2003上,卡内蒂、哈列维和卡茨 [18]提出了一种无需更改密钥分发模型的替代方法。他们的方案定义了一种前向安全公钥加密(FS‐PKE),用户可通过现有的密钥分发基础设施发布一个短小且不变的公钥。FS‐PKE 的创新之处在于一种高效的更新机制,该机制允许用户在时间周期 T 更改其私钥,从而撤销对在时间周期 T′< T 内加密的任何密文CT的解密能力。原则上,在各方共享(大致)同步时钟这一相对宽松的要求下,该方法可用于在现有消息系统中实现前向安全性。

遗憾的是,前向安全公钥加密(FS‐PKE)尚未得到广泛采用。部分原因是目前几乎没有研究工作致力于建立此类系统的具体性能特征。更成问题的是,卡内蒂等人提出的密钥更新程序是一种相对粗略的工具:在移除某个时间周期的解密能力时,用户必然会失去对之前所有时间段内发送的消息的访问权限。因此,该方案无法提供消息的细粒度删除,例如删除对单个消息或来自某一特定时间段的消息的访问权限。

1TextSecure是WhatsApp通信网络所使用的加密协议,该网络在全球拥有超过6亿用户。

本文档由 funstory.ai 的开源 PDF 翻译库 BabelDOC v0.5.10 (http://yadt.io) 翻译,本仓库正在积极的建设当中,欢迎 star 和关注。

发送者。实际后果是,旨在保护用户体验的实现要么可能在所有消息到达之前就更新密钥,要么必须使某些消息保持暴露状态,直到接收者能够确定安全地推进密钥为止。当考虑时钟漂移和传输延迟时,结果可能导致数据在数小时到数周的时间内仍然处于脆弱状态。

我们的贡献

在这项工作中,我们系统地探讨了在异步消息系统中实现前向保密的问题。我们的总体目标是开发一种公钥加密方案,能够对特定消息的解密能力进行细粒度撤销,同时最小化成本和存储需求。与Canetti等人的方法一样,我们的目标是使用短且不变的公钥。与以往的解决方案不同的是,我们要求密钥更新程序能够在单个密文或消息发送者的级别上移除访问权限,同时保留解密所有其他消息的能力。

为了实现这一目标,我们采用了两种新成分。首先,我们引入了一种支持对单个消息进行撤销的新形式公钥加密。我们将这种新的加密方案称为可穿刺加密。该原语可以被视为一种基于标签的加密[31],其增加了一个高效的穿刺算法,该算法以当前私钥SK和一个标签 t ∈{0, 1}∗作为输入,输出一个新的私钥SK′,该私钥将能够解密所有未使用标签 t加密的密文CT。在此方案中,私钥可以依次在多个不同位置反复穿刺,从而模拟正常的消息删除体验。

其次,我们展示了如何将可穿刺加密融入Canetti et al.的FS‐PKE的一种变体中,该变体经过修改,允许细粒度地撤销特定时间间隔而不撤销所有先前的时间间隔。通过将这些方法整合到一个统一方案中,我们展示了如何在合理的工作负载下实现实用的前向安全公钥加密。更具体地说,我们的贡献如下:

1) 我们定义了可穿刺加密,提出了该原语的安全性定义,并在双线性群中基于经过充分研究的假设提供了一种高效的构造方案。我们的构造基于Ostrovsky、Sahai和 Waters提出的非单调属性基加密(ABE)方案[35],,并进行了修改以实现新的密钥更新功能。经过 n次穿刺操作后,我们的构造具有 O(1)公钥、密文大小和加密开销,以及 O(n)私钥存储和解密开销。

2) 为了提高效率,我们展示了如何将可穿刺加密与 Boneh et al.[12]提出的优化的FS‐PKE构造相结合,该构造支持对单个时间段的撤销。这种结合实现了“两全其美”,既允许用户精确地立即删除选定的消息,又显著降低了相比可穿刺加密的解密开销。这种方法的优势在于,总的解密和密钥存储成本现在仅与在给定时间周期内接收的最大消息数量呈线性增长,且与时间段的数量呈对数级增长。

有趣的是,我们的结果表明,组合这些方案并不仅仅是并行运行两者,而是需要仔细地将它们结合,以确保生成的密钥能够提供抗共谋性,以抵御试图从不同时间段重新组合密钥的攻击者。

3) 最后,我们提供了组合方案的软件实现,既作为独立库libforwardsec,也描述了如何将其与Gnu Privacy Guard [5]等工具集成。然后,我们使用新工具进行实验,评估在各种模拟使用场景下部署可穿刺加密和前向安全性加密的开销。

Outline of this paper.本文其余部分的结构如下。在本节剩余部分,我们将讨论这些构造方法背后的直观思路。在 §II和 §III节中,我们提供可穿刺加密原语的背景知识和形式化定义,并在 §IV节中介绍我们的主要构造方法。在 §V节中,我们展示如何将可穿刺加密与前向安全公钥加密高效结合。在 §VI、 §VII、 §VIII和 §IX节中,我们描述这些方案的实现和评估。在 §X节中,我们讨论这些方案的其他应用。最后,在 §XI节中,我们讨论相关工作。

A.加密模型

我们现在简要说明用于描述异步消息系统中加密的框架。一个异步消息网络由一组发送者和一组接收者组成,所有参与者通过不安全信道进行交互。在本工作范围内,我们假设发送者有某种方式可以获得他们希望与之通信的每个接收者的单个真实公钥。该模型的实例包括现有的OpenPGP基础设施,以及像苹果iMessage [17],[21]这样的系统。

对话可以分为两种类型的消息:发送者与接收者之间的初始消息,以及可选的交互式消息。在异步系统中,每次对话至少包含一条初始消息,之后可选择性地进行通信双方之间的交互交换。在本研究中,我们主要关注初始消息的前向保密,因为后续交互的前向保密可以通过使用交互式的“棘轮”协议(如OTR [15]或 TextSecure/Axolotl [32])来实现。

本文提出的方法是为每条初始消息附加一个由加密方生成的唯一标识符或“标签”。接收方在收到此消息后,可自行决定通过私钥更新来撤销对该消息的解密能力。由于我们的

可穿刺加密构造方法支持标签空间{0, 1}∗,发送者可以使用任意唯一字符串作为消息标识符。示例标签可能包括全局唯一标识符(我们在实验中使用的)或发送者ID与单调递增的消息计数器的拼接。接收者在收到消息后,可通过在该标签上进行“穿刺”操作,安全地撤销对该消息的解密能力。我们的可穿刺构造方法还支持每条消息使用多个标签。在这种情况下,唯一的消息ID可以补充额外的元数据,例如发送者ID。这种方法允许接收者撤销整类消息(例如来自特定发送者的全部消息)。

我们的方法有两个局限性:(1)使用特定密钥解密消息的成本随着该密钥中穿孔数量的增加而线性增长;(2)主动攻击者可能阻止消息到达接收者,从而防止接收者撤销对这些消息的访问权限。为了解决这些问题,在第五节中,我们提出将可穿刺加密与前向安全加密相结合。

在这种方法中,发送者同时使用时间周期和唯一的消息标识符对每条消息进行加密。接收者不仅可以立即对其接收到的消息执行细粒度撤销,还拥有粗粒度更新机制,以撤销过去某个时间周期之前的所有消息。我们将接收者可以解密的时间周期称为“解密窗口”。这种双重方法大致类似于TextSecure [32],中使用的细粒度和粗粒度撤销方法,但不需要向发送者分发预密钥。对于效率而言至关重要的是,对于在间隔T内到达的消息,其解密时间仅与在间隔 T内所做的穿孔数成线性关系,而不是与穿孔总数成线性关系。

在第九节中,我们讨论了诸如消息ID格式、时间周期间隔长度以及解密窗口大小等参数的选择。

B.直观理解:可穿刺加密

为了阐明我们构造方法背后的直觉,让我们首先讨论一些平凡的解决方案。我们考虑这样一类方案:加密者在发送给特定接收者的每条消息上附加一个“标签”,例如消息标识符(或时间周期标识符)。该系统的目标是允许接收者选择性地撤销解密特定标签的能力。在仅有多项式数量时间段(或“标签”) T的系统中,可以通过为发送者可能用于加密的每个“标签”生成唯一的公钥加密密钥对,来简单地实现(低效的)可穿刺加密。穿刺密钥只需删除对应的机密即可。可以利用基于身份的加密来改进该构造方法的 O(|T |)公钥大小,从而生成用作公钥的 O(1)规模的公共参数,为所有标签 t ∈ T派生IBE解密密钥,并销毁主密钥。

遗憾的是,这些简单方法的私钥存储量与允许的标签总数成线性关系,而不是当前穿刺标签的数量。这不仅效率低下,而且将可能的标签(或时间段)的最大数量限制为最多在安全参数中呈多项式增长。这显然排除了指数级大小的标签空间,例如发件人地址或唯一消息标识符等字符串。较小的标签空间增加了标签冲突的可能性,即来自不同发送者的多条消息被赋予相同的标签,从而导致第二条消息无法解密。

为了解决这些问题,我们采用了一种不同的方法。与其从现有的解密密钥中删除元素,不如设计一种结构,允许我们添加新的限制条件,以控制该密钥可以解密的内容。我们构造方案的逻辑基础是一种支持非单调性访问公式的基于属性的加密方案。在这种方案中,解密密钥可能包含由正向属性和否定属性组成的布尔公式,例如“NOT t”。

非单调属性基加密(ABE)本身不足以构造可穿刺加密,因为我们还必须支持在现有解密密钥中添加否定操作的能力。这里的一个关键观察是,通过构造一个仅包含否定操作的密钥,某些构造方法可以被修改以支持在现有密钥内创建新的否定操作。

我们的具体方案始于奥斯卓夫斯基、萨海和沃特斯提出的NM‐ABE构造[35], ,我们将该构造配置为一种基于标签的加密形式,支持每个密文固定数量 d的标签。为了生成密钥对,用户首先为ABE方案的一个实例生成参数,将公共参数作为其公钥PK发布,从主私钥MSK派生出解密密钥,并销毁主密钥MSK。

在初始密钥生成之后的所有时间,接收者的私钥都是一个属性基加密解密密钥,其中嵌入的策略仅包含否定属性。为了在额外的点 t上打孔密钥,接收者会更新她现有的私钥,以派生出一个新的密钥,该密钥还嵌入了 t的否定。由于这些否定密钥组件的结构,在Ostrovsky et al.方案中这是可能的。具体而言,在每个否定密钥组件内,Ostrovsky et al.嵌入主密钥 α的一个机密份额 λ 。由于该方案的特性,可以通过生成λ′并篡改原始密钥组件来重新分配任何给定密钥组件中的值 λ,使其嵌入份额 λ − λ′。同时,可以创建一个新的否定密钥组件,嵌入份额λ′,并绑定到新穿刺的标签 t。这提供了我们的打孔算法,该算法可以任意多次运行。

将可穿刺加密与FS-PKE结合。如上所述,为了在主动攻击下确保前向保密性并实现更高效的解密,我们需要将可穿刺加密与FS‐PKE相结合。

将这两种方案结合的朴素方法是简单地并行运行前向安全公钥加密(FS‐PKE)和可穿刺加密,

在两个系统中对每个明文进行加密。2然而,这种方法存在问题。在将FS‐PKE密钥向前推进后,无法明显地降低穿刺私钥的复杂度——即无法移除非门。为了解决这个问题,在时间周期 T期间,我们或许可以保留一份初始未穿刺私钥的副本,用于时间周期 T+ 1。不幸的是,这带来了新的挑战:如果攻击者泄露了接收者的计算机,她就能够将此未穿刺私钥与时间周期 T的FS‐PKE私钥结合使用,从而访问本应无法获取的消息。

我们解决此问题的方法是将前向安全公钥加密方案 (FS‐PKE)的私钥与穿刺加密方案的私钥在密码学上进行绑定。因此,即使攻击者获得了时间段 T 和 T+ 1 的机密信息,也无法重组密钥的任何部分以访问在较早时间段内已删除的消息。在 §V节中,我们展示了如何通过一种高效的FS‐PKE实现这种组合,该FS‐PKE源自博恩、博因和高提出的分层基于身份的加密方案[12]。给定最多穿刺标签数量 n以及最长时间周期数 L ,该组合方案可实现 O(1)大小的密文和公钥,以及 O(log(L) + n)的私钥存储和解密开销。更重要的是,我们实现了该方案,并证明其实际开销非常实用。

二、背景

符号说明。本文将使用以下符号表示。令 negl(·) 表示一个可忽略函数。令 M 表示一个方案的有效明文集合,令 T 表示有效标签的集合。

A.双线性映射

设 G和 GT为两个阶为 p的乘法循环群。令 g是 G的一个生成元,且 e: G × G → GT是一个具有以下性质的双线性映射:

1) 双线性:对于所有 u, v ∈ G 和 a, b ∈ Z p,我们有 e(ua, vb) = e(u, v)ab。

2) 非退化性: e(g, g) = 1。

我们说 G是一个双线性群,如果G中的群运算和双线性映射 e: G× G → GT都是高效可计算的。在实践中,我们也可以在非对称设置中定义双线性群,其中双线性映射定义为e: G1 × G 2 → G T,其中 G 1 = G 2,且不存在有效的同构 γ: G1 → G 2。我们将在对称设置中描述我们的方案,并在 §VI中讨论转换到非对称设置的过程。

本文提出的方案在双线性群中的判定双线性 Diffie‐Hellman逆(DBDHI)(参见例如,[12])和判定双线性Diffie‐Hellman假设(DBDH)[11]下是可证明安全的。由于篇幅限制,此处省略对这些假设的定义,建议读者参考所引用的文献。

这种加密方式将被结合使用:例如,用户可以使用2‐of‐2秘密共享来分割消息M,并分别使用两种方案对每个份额进行加密。

III. 定义

在本节中,我们提供可穿刺加密的语法和安全定义。

A.可穿刺加密

一种穿刺加密方案是由概率算法组成的元组( PPKE.Keygen,PPKE.Encrypt,PPKE.Decrypt, PPKE.Puncture),其语法如下:

PPKE.密钥生成(1k, d) →(公钥PK,私钥SK0)。输入安全参数 k和每个密文的最大标签数量 d,输出公钥 PK和初始私钥SK0。

PPKE.Encrypt(公钥PK M, t1,…, td) →密文CT。输入公钥PK、明文 M和标签列表 t1,…, td,输出密文CT。

PPKE.穿刺(PK,SKi−1, t) → SKi。输入私钥SKi−1和标签 t,输出一个新的私钥SKi,该私钥能够解密原私钥 SK′能解密的所有密文,但无法解密使用 t加密的密文。

PPKE.Decrypt(PK, SKi, CT t1,…, td) →{M}∪{⊥}。输入私钥SKi和密文CT,输出明文 M,若解密失败则输出 ⊥。

我们现在定义可截断加密的正确性与安全性。

B.正确性

正确性由以下实验定义。输入为(k, M, n, d, t1,…, tn, t1∗,…, td∗):

1) 计算 (PK,SK0) ← PPKE.Keygen(1k, d)

2) 如果 n> 0 成立,则对于 i= 1,…, n,计算 SKi=PPKE.Puncture(SKi−1 , ti)。

3) 设置 密文CT = PPKE.Encrypt(PK M, t∗ 1 ,…, t∗ d)

如果对于所有足够大的 k; d> 0, n ≥0(均为 k; t1,…, tn ∈ T, t ∗ 1 ,…, t ∗ d ∈ T{t1,…, tn}, M ∈M 的多项式),都有以下成立:

PPKE.Decrypt(SKn, CT, t ∗ 1 ,…, t ∗ d) = M

以概率 1 − negl(k),该概率取自实验的随机硬币。

备注。 我们允许存在可忽略的正确性误差,因为在我们的构造方法中,希望私钥的大小与标签字符串的长度无关。在实践中,这意味着两个不同标签发生碰撞的概率可以忽略不计。

C.安全性

可穿刺加密的安全性由IND‐PUN‐ATK游戏定义,我们在图1中给出。该游戏包含CPA和CCA两种变体。直观上,这类似于公钥加密的不可区分性定义,但增加了以下新的预言机。

在输入任意标签 t ∈ T时,穿刺预言机会更新私钥以撤销标签 t。攻击者可能查询此

设置。在输入安全参数 k和最大标签数量 d后,挑战者初始化两个空集合 P, C以及一个计数器n= 0。它运行(公钥,私钥0) ← PPKE.密钥生成(1k, d),并将公钥提供给攻击者。

阶段1。攻击者可以自适应地重复发出以下任意查询:

•穿刺(t):挑战者递增 n,计算SKn← PPKE.Puncture(SKn−1, t),并将 t添加到集合 P中 .

• Corrupt(): 攻击者首次发出此查询时,挑战者将最新的私钥SKn返回给攻击者,并设置 C← P。所有后续查询均返回 ⊥。•

Decrypt(CT t1,…, td): 若ATK = CPA,挑战者返回 ⊥。若ATK = CCA,挑战者计算 M ← PPKE.Decrypt(SKn,密文CT t1,…, td),并将 M返回给攻击者。

挑战 .攻击者提交两条消息m0, m1 ∈ M以及标签 t1∗,…, td∗ ∈ T .

如果攻击者之前已发出过Corrupt查询且{t1∗,…, td∗}∩ C= ∅,则挑战者拒绝该挑战。否则,挑战者采样一个随机比特 b,并返回密文CT∗←PPKE.Encrypt(PK Mb, t1∗,…, td∗)给攻击者。

阶段2.此阶段与阶段1相同,但需满足以下限制条件:

• Corrupt() 在 {t1∗,…, td∗}∩ P= ∅ 时返回 ⊥.

•解密(密文CT t1,…, td) 在 (CT t1,…, td)=(CT∗, t1∗,…, td∗) 时返回 。

猜测.攻击者输出一个猜测 b′ .如果 b= b′,则攻击者获胜.

图1. 可穿刺加密的 IND‐PUN‐ATK 安全游戏,其中 ATK ∈{CPA,CCA}。

预言机在整个游戏中可被反复调用,每次生成一个新的私钥。Corrupt预言机向攻击者提供挑战者所持有的私钥的最新状态。攻击者可以针对一对消息和选定的标签 t1∗,…, td∗ 发起挑战,但需满足以下限制:除非攻击者之前已对至少一个标签 t1∗,…, td∗ 进行穿刺,否则她不能腐化该私钥。此限制可防止攻击者轻易解密挑战密文的攻击。

该安全游戏的 CCA 变体还增加了一个解密预言机。攻击者可以在任意时刻以输入 (CT t1,…, td) 调用此预言机,唯一限制是 (CT t1,…, td) =(CT∗, t1∗,…, td∗),即她不能对挑战密文及其标签进行查询。更正式地:

定义3.1(可穿刺加密的安全性):对于ATK ∈{CPA,CCA},若对所有p.p.t.敌手 A以及足够大的 k,均有 A在IND‐PUN‐ATK游戏中取得的优势被 1/2+ negl(k)所限制,则称该可穿孔加密方案是IND‐PUN‐ATK安全的。

IV. 构造方法

我们现在提出在双线性群中基于合理假设分别实现 CPA安全和CCA安全的可穿刺加密构造方法。

A.一种CPA安全的构造

图2展示了一种基于奥斯卓夫斯基、萨海和沃特斯 (OSW)的[35]属性加密方案构造的CPA安全可穿刺加密方案。如前所述,该基本构造是对OSW方案的一种改进,增加了一个Puncture算法,该算法以私钥SK和标签 t作为输入,输出带有针对标签 t的否定操作额外分量的 SK′。我们的关键观察是,各个私钥分量可以仅使用公共参数进行“重新共享”。这一过程在Puncture算法中进行了描述。

由于篇幅限制,我们省略了正确性的证明,直接进入关于 CPA构造安全性的主要安全定理。

定理4.1:如果在 G, GT中判定双线性 Diffie‐Hellman(DBDH)假设成立,则图2中的可穿孔加密方案在随机预言模型下是IND‐PUN‐CPA安全的。

定理4.1的证明大量借鉴了[35],的证明,主要增加了模拟 Puncture算法的额外细节。我们在此论文完整版本中概述了该证明。

B. CCA安全

图2中提出的可穿刺加密方案仅提供CPA安全。我们现在描述如何修改该方案以实现CCA安全。我们的方法使用藤崎‐冈本变换[24],该变换通常用于高效地将CPA安全方案转换为CCA安全方案。

设 M′ ∈{0, 1} 为明文空间,并令H1: G T × M′ × T d → Z p 和 H 2: G T →{0, 1} 为两个独立的哈希函数。给定图2中的CPA安全可穿孔加密方案(PPKE.KeyGen,PPKE.Encrypt,PPKE.Decrypt,PPKE.Puncture),其中PPKE.Encrypt使用随机元素 s ∈ Z p ,我们定义一个修改后的方案(PPKE.KeyGen,PPKE.Encrypt′ ,PPKE.Decrypt′ ,PPKE.Puncture),其中PPKE.Encrypt′和 PPKE.Decrypt′定义如下:

PPKE.Encrypt′ (PK M, t 1 ,…, t d) 。首先选择一个随机元素 Σ ∈ G T ,计算 s ← H 1( Σ, M,(t1 ,…, t d)) ,并使用 s 作为加密随机性计算 CT′ ← PPKE.Encrypt(PK Σ, t 1 ,…, t d) 。现在输出密文CT =(CT ′, H 2( Σ) ⊕ M)。

PPKE.解密(SKi ,密文CT t 1 , . . . , t d) 。首先将密文CT 解析为(密文CT′ , S) ,并计算Σ ′ ←

PPKE.Decrypt(SKi,密文CT′, t1,…, td)。接着计算 M′ ← S ⊕ H2(Σ),并计算s′ ← H1(Σ, M′,(t1,…, td))。最后,使用s′作为随机数,计算 密文CT′′ ←PPKE.Encrypt(公钥PK Σ′, t 1 ,…, t d),如果 密文 CT′ =等于密文CT′′,则返回 ⊥;否则返回 M′。

定理4.2:可穿孔加密方案(PPKE.Keygen,PPKE.Encrypt′ , PPKE.Decrypt′ ,PPKE.穿刺) 在随机预言模型中是 IND‐PUN‐CCA 安全的,如果判定双线性Diffie‐Hellman(DBDH)假设在 G, GT 上成立。

定理4.2的证明遵循藤木‐冈本[24]所描述的清晰结构。由于篇幅原因,我们将其留待本工作的完整版本中给出。

示意图0

V. 可穿孔前向安全公钥加密

虽然可穿刺加密能够对接收者解密密文的能力进行细粒度控制,但私钥大小会随着被撤销的密文数量成比例增长标签。在大量穿孔之后,这可能会变得难以处理。

在本节中,我们将展示如何通过将可穿刺加密与基于高效分层身份基加密(HIBE)方案的前向安全公钥加密方案[18]相结合来缓解此问题。在修改后的构造中,发送者在时间周期 T和标签列表(t1,…, td)下进行加密。接收者可以在当前时间段(或最近的 n个时间段)内对其密钥进行穿孔,并最终利用前向安全方案通过推进密钥来提供粗粒度的安全性。关键的是,在推进密钥时,他们可以消除存储过去时间段被穿孔的密钥组件所带来的开销。在此方案中,密钥总大小和解密开销仅与当前时间段(s)内的穿孔数量呈线性关系,且与总的时间段数量呈对数级关系。

直观上,该混合方案的安全定义与可穿刺加密的安全定义类似,只是攻击者获得了额外的能力,可以推进到

PFSE.密钥生成(1k, d, )。输入安全参数 k、每条密文的标签数量 d和树深度 ,首先选择阶为p的 G, GT。采样随机的 α, β ∈ Zp以及 g3, h1,…, h ∈ G,并设置 g1= gα, g2= gβ。选择一个哈希函数 H:{0, 1}→ Zp,并令 t0为在正常操作期间未使用的特殊标签。我们将隐式地定义公钥PK =(PKPPKE,PKPFSE),其中:

PKPPKE=(g, g1, g2, gq(1),…, gq(d)), PKPFSE=(g, g1, g2, g3, h1,…, h)

现在采样 r1, r2, r3 ∈ Zp 并采样 α1, α2 ∈ Zp,且满足限制条件 α1+ α2= α。使用 α1 作为 HIBE 方案的主密钥,计算对应于身份“0”和 “1”的 HIBE 密钥(即树根左右两侧的身份)。

hskL= BBG.Keygen(PKPFSE, α1, 0), hskR= BBG.Keygen(PKPFSE, α1, 1)

接下来,使用主密钥α2和特殊标签 t0计算密钥的初始PPKE份额:

ppkesk∅=[(gα2+r3 , V(H(t0))r3, gr3, t0)]

设置 D0=(0,{hskL, hskR}, ppkesk∅)。该初始元组将用作“种子”,以获取第一个时间周期的私钥,具体如下:

(tsk1∅, D1)← PFSE.NextInterval(D0)

输出公钥PK和初始私钥SK =(tsk1∅,D1)。

PFSE.加密(PK M, Tcur, t1,…, td)。输入为公钥PK、消息 M、时间周期 Tcur、一组标签 t1,…, td ∈{0, 1}∗\ t0,采样s ∈ Zp并计算一个HIBE身份 T1,…, Tk= IndexToPath(Tcur, )。现在计算:

ct(1)= e(g1, g2)s · M, ct(2)= g s, ct(3,1)= V(H(t1))s,…, ct(3,d)= V(H(td)) s, ct(4)=(hT1 1 ··· hTk k · g3) s

输出 密文CT =(ct(1), ct(2), ct(3,1),…, ct(3,d), ct(4))以及 Tcur,(t1,…, td)。

PFSE.穿孔(PK, SK t)。输入当前私钥SK,解析SK =(tski T, Di),其中T表示当前时间段内的穿孔集合。进一步将tski T解析为(hski,ppkeskT),并计算: ppkeskT∪{t}← PPKE.Puncture(PKPPKE, ppkeskT, t)

输出 tski T∪{t} =(hski, ppkeskT∪{t})。

PFSE.下一个区间(Di). Pars e Di as (i,HSKs ppkesk∅) 并从 HSKs 中提取对应于时间周期 i 的 HIBE 密钥 hskP派生其左密钥和右密钥如下所示:

hskL= BBG.Keygen(hskP, 0), hskR= BBG.Keygen(hskP, 1)

计算一个新的HSKs′,其中包含两个新密钥但不包含父密钥(即HSKs′=(HSKs \ hskP) ∪{hskL, hskR}),并设置D′=(i+1,HSKs′,ppkesk∅)。

其次,通过将时间间隔 i 的 HIBE 密钥 hskP 与 P‐PKE 密钥 ppkesk∅ 的随机化版本绑定在一起,派生 tsk i ∅ =(hsk′i ,ppkesk′∅) 用于解密时间间隔 i 消息的密钥。将 hskP 解析为 (a0,…),将 ppkesk∅ 解析为 (sk(1) 0 , sk(2) 0 , sk(3) 0 , t0),随机采样 γ ∈ G 和 r ∈ Z p ,并计算

hsk′P =(a0 · g γ 2 ,…)

ppkesk′∅ =(sk (1)0 · g −γ+r 2 , sk(2) 0 · V(H(t0)) r , sk(3) 0 · g r , t0)

输出 (tsk i ∅ ,D ′)

PFSE.解密(tsk i T , ct t 1 ,…, t d)。将 tsk i T 解析为(hski , ppkeskT),将ct解析为(ct( 1 ), ct( 2 ), ct( 3,1 ), · · ·, ct( 3,d ), ct( 4 ))

A← PPKE.解密(ppkeskT ,(1, ct ( 2 ) , ct ( 3,1 ) ,…) t 1 ,…, t d) B←分层身份基解密(hski ,(1, ct ( 2 ) , ct ( 4 ) ))

输出 M= ct ( 1 )A·B 。

示意图1

FS-PKE和 HIBE。 Canetti 等人的 FS‐PKE 构造使用 HIBE 方案作为构建模块。首先选择最大时间段数 L,然后计算树深度 =log(L+2),并将每个时间周期 1,.., L通过中序遍历映射到身份的二叉树层次结构中的一个节点。3树的每个节点对应一个 HIBE 私钥。当一个时间间隔结束时,利用当前时期的密钥派生左子树和右子树的 HIBE 密钥,然后删除当前时期的密钥。

我们可以使用任何选择性‐ID安全的HIBE方案来实现该HIBE方案。原则上,我们甚至可以将Ostrovskyet al.从我们的可穿刺加密构造中得到的NM‐ABE方案用于构建 HIBE,采用Goyal et al.[26]提出的关键委托方法。然而,这种构造(以及实际上许多实用的HIBE方案)的密文大小和解密时间与身份长度成线性关系,因此与间隔数量成对数级关系。相比之下,Boneh, Boyen and Goh [12]提出了一种高效构造,具有固定大小的密文和解密时间,有趣的是,其密钥大小随着身份字符串的增长而线性减小。

结合 FS-PKE与可穿刺加密。直观上,我们将这两种方案结合的方法是为每个时间间隔 T关联一对私钥 (AT, BT),其中AT表示在时间 T的 FS‐PKE 密钥材料,而BT表示可穿刺加密的密钥材料。元素 BT最初开始时没有任何穿孔的标签,并且将在每次调用Puncture后进行更新。然而,在任何穿孔发生之前,我们还会派生并存储下个时间周期的第二对密钥 (AT+1, BT+1),其中 AT+1表示时间周期 T+1 的 FS‐PKE 密钥,而 BT+1 是空的可穿刺加密组件。关键的是,每一对 (Ai, Bi) 必须绑定在一起,使得 (1)解密密文时需要同时使用两者,(2)攻击者即使获得了 (AT, BT),(AT+1, BT+1),也无法将这些密钥重新组合成新的有效组合。

因此,将密钥从时间周期 T更新到时间周期 T+ 1的过程涉及丢弃绑定对(AT, BT),并使用绑定对(AT+1, BT+1)为时间周期 T+2派生另一个绑定对(AT+2 , B T+2)。用户随后对 B T+1执行穿刺操作。此过程可能重复进行,直到最后一个时间周期。

与许多IBE/ABE方案类似,[12]的HIBE方案使用一个主密钥 α和一个公开参数g1 = g α。 §IV中的可穿孔加密方案也采用了类似的构造。因此,我们的方法是最初共享一个单一的主私钥 α作为 α 1 , α 2,其中 α= α 1 +α 2。我们使用α 1 作为HIBE方案的主密钥, α 2 作为

可穿刺加密的机密。在每个后续的时间周期中,我们可以获取时间周期 T+1 的新鲜密钥,并通过动态更新机密 α 的共享,生成用于时间周期 T+ 2 的新密钥对。关键的是,对于 [12] 和我们的方案而言, α 以 gα 形式的乘法因子嵌入其中。因此,这种重新共享可以在任何一组派生密钥上进行计算,即使主密钥 α 已被销毁。

语法上,混合方案结合了现有 PPKE.KeyGen,PPKE.Encrypt,PPKE.Puncture,PPKE.Decrypt 算法与HIBE方案的层次化密钥派生机制。因此PFSE是一个包含6个算法的元组(PFSE.KeyGen,,PFSE.Encrypt,PFSE.Puncture,PFSE.Decrypt,PFSE.NextInterval),其中SKn+1 ← PFSE.NextInterval(SKn)通过调用HIBE方案的密钥派生函数返回下一个时间间隔的派生密钥。我们在图3中给出了我们的构造。

定理5.1:如果在 G, GT中判定双线性 Diffie‐Hellman逆(‐DBDHI)假设成立,则图3的方案在随机预言模型下满足图C.1中的定义意义上的安全性。

我们在本文的完整版本中概述了定理5.1的证明。

A. CCA安全性

与 §IV‐B中的构造类似,我们可以将 Fujisaki‐Okamoto变换[24]应用于图2的方案,以获得一个CCA安全的构造。该方法的细节几乎与 §IV‐B中给出的内容完全相同,仅需进行以下微小修改:首先,哈希函数 H1现在的轮廓为H1: GT × M ′ × Tcur × T d → Z p; 其次,修改后的加密和解密算法均将时间周期 Tcur以及一个标签列表作为输入,并将这些值输入到 H1中。其余所有细节均与 §IV‐B中相同。我们将在本文的完整版本中提供正式证明。

第六节. 实现

在本节中,我们介绍了可截断前向安全加密的实现,包含了实现所需的所有技术细节。

A.对称到非对称转换

尽管我们的方案是在“对称”配对设置中提出的,其中双线性映射 e定义为 e: G×G → G T,但在实际应用中,大多数实用的配对实现采用非对称双线性群 G 1 , G2 , G T ,其中 e由 e: G 1 × G 2 → G T 定义。在许多此类设置中,群G1 , G2 之间不存在高效可计算同构。

我们实现所采用的设置使用256位Barreto‐Naehrig曲线[9]。由于生成的双线性群是非对称的,因此我们必须转换我们提出的方案

密钥大小(=最大ID长度, l = ID长度) 示例 l= 30(无穿孔)

| |可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|可穿刺加密|+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||+HIBE 开销 |G1| |G2||‐ 重叠 |G1||‐ 重叠 |G1||‐ 重叠 |G1||‐ 重叠 |G1||‐ 重叠 |G1||‐ 重叠 |G1||‐ 重叠 |G1||正常|分割|CRS|
| —|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|
| PK|(2+ d) × |G2||(2+ d) × |G2||(2+ d) × |G2||(2+ d) × |G2||(2+ d) × |G2|||G1| |Z||G1| |Z|+(2+ d) × p|) × punctu|+(2+ d) × p|) × punctu|+(2+ d) × p|) × punctu|+(2+ d) × p|) × punctu||G2| res|+(3+ ) ×|+(3+ ) ×||G| |G| |G|+(3+ ) × 1| +( − k) ×|+(3+ ) × 1| +( − k) ×|+(3+ ) × 1| +( − k) ×|+(3+ ) × 1| +( − k) ×||G| |G|2||2||−2 ×|−2 ×|−2 ×|||||4.02 kB|1.66 kB|0.42 kB|
| PK|(2+ d) × |G2||(2+ d) × |G2||(2+ d) × |G2||(2+ d) × |G2||(2+ d) × |G2||||||||||+(3+ ) ×|+(3+ ) ×||||||||||||−2 ×|−2 ×|−2 ×|||||4.02 kB|1.66 kB|0.42 kB|
| SK|(3 ×|(3 ×|||+|+||||||||+(2+ − k) × +|Gt||+(2+ − k) × +|Gt||+(2+ − k) × +|Gt||+(2+ − k) × +|Gt|||||||||||N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|14.02 kB|16.24|14.02 kB|
| SK|(3 ×|(3 ×||||||||||+(2+ − k) × +|Gt||+(2+ − k) × +|Gt||+(2+ − k) × +|Gt||+(2+ − k) × +|Gt|||||||||||N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|N/A −(|GT| |G1|)|14.02 kB|16.24|14.02 kB|
| CT|||GT|||GT|||||||||||||||+2 ×|+2 ×|+2 ×|+2 ×||G1|||||||||+|+||||0.5 kB|0.5 kB|0.5 kB|

+(d+2) × |G1|)

表 I P‐PKE、HIBE [13],以及组合PFSE方案的密钥大小。由于两种方案中存在冗余(例如群生成元g),在组合方案中存在一些重叠,从而节省了存储空间。

方案转换到非对称设置。实现这种转换的方法有很多,在选择时必须考虑效率。这是因为在BN设置中, G1中的元素在我们的情况下约为256位,而 G2中的元素约为 1024位。因此,选择群组分配涉及权衡。实际上,我们可以优化三个不同的目标:

1) 密文大小。我们尝试优先将尽可能多的元素放入 G1中。

2) 公钥大小。我们尝试优先将公钥元素放入 G1中。

3) 私钥大小。我们尝试优先将私钥元素放入 G1中。

在我们的实现中,我们选择优化以实现最小的密文大小。这似乎是合适的,因为除资源高度受限的设备外,私钥存储似乎不是一个显著问题。我们使用Autogroup工具[6],进行群分配,该工具采用SMT求解器来优化合适的分配方案。

B.多项式、求值和恢复系数

我们在图2和图3中的描述省略了实现该方案所需的若干重要步骤。具体而言,我们的实现必须(1)选择随机多项式 q(x),使得 q(0) = β;(2)在不知道多项式系数的情况下计算 V(x);以及(3)计算用于解密的恢复系数 ω0 · · · ωd, ω ∗。尽管这些细节在技术上并非新颖,但为了完整性,我们在附录A中进行了阐述。

C.将时间间隔映射到HIBE方案

在[19], Canetti等人中详细描述了如何通过将时间间隔映射到二叉树并使用前序遍历以及维护一个密钥栈,从HIBE方案构建前向安全加密系统。尽管我们使用了相同的前序遍历映射,但我们采用了一种不同的算法,该算法仅需要一个字典以及将树中的索引转换为树中的位置,并能反向转换的能力。这导致私钥的结构简单而自然,即作为从时间间隔到该时间间隔密钥的映射,我们发现这种结构更易于处理。该算法定义于清单1中。

def IntervalKeys(pk,sk,i): path = indexToPath(i,L)#L= 最大树深度 if len(path) !=L:# 那么不是叶节点 lkey= hibe.keygen(pk,sk[i],path+[0]) rkey= hibe.keygen(pk,sk[i],path+[1]) return ((lkey,pathToIndex(path+[0),L), (rkey,pathToIndex(path+[1],L))

清单1. 更新的密钥派生

D.无菌密钥

博内等人提出的HIBE方案的一个优雅特性是,可以通过删除一些额外元素来对HIBE密钥进行sterilized。这些密钥仍然可用于解密与某个身份相关联的消息,但无法用于派生子间隔的新密钥。

密钥灭活的能力带来了一个重要的自由度:在PFSE 中,区间大小可以任意短。如果我们预期会有潜在消息到达,只需保留该区间的已灭活版本即可。这使得我们能够维持一个解密窗口,同时仍然保持前向保密性。如果没有这一机制,就无法保留区间,而区间的大小将决定方案可容忍的延迟程度。这是不可取的,因为较大的区间会导致更多的穿孔,从而增加解密时间。我们在实现中充分利用了这一点。

E.软件

我们的实现大约包含4,000行C++代码,其中包括一个围绕RELIC配对库[7],的C++封装器以及大量单元测试。序列化功能由C++Cereal[42]序列化库提供,该库封装了用于椭圆曲线点的RELIC序列化例程。为了提高性能,我们使用OpenMP [34]在可穿刺解密例程中并行化Z j 的计算。

VII. 扩展与优化

A.外包解密

我们方案的一个潜在问题是解密的成本,尤其是在嵌入式系统和移动电话等资源受限的设备上。如果存在可提供计算辅助的云服务提供商,则这些担忧可能得到缓解。例如,已有一些成熟的技术[27],[20],可安全且私密地将配对计算和属性基加密解密外包给第三方(例如基于云的服务器)。由于配对是解密过程中的主要成本,且解密过程可以并行化,因此这有望显著降低设备端解密成本。一种

此类方案的一个应用是在谷歌的端到端[2],项目中实现前向安全加密,利用谷歌的服务器执行配对运算。

B.外包密钥存储与更新

在可穿刺加密中,密钥大小可能变得相当大(例如,每秒1条消息、最多1000秒延迟时达到900kB)。然而,并非所有这些数据都需要保存在安全存储中。相反,密钥本身可以被加密后存储在不可信的存储中,只要解密方能够安全地存储一个较短的对称密钥,并且能够在更新期间将该密钥安全擦除并覆写为新密钥。这可以确保旧密钥无法被恢复。

C.公钥的大小

在使用对称配对实现可穿刺前向安全加密时, HIBE公钥包含个随机群元素。这些元素构成了可穿刺前向安全加密中公钥材料的主要部分。为了减小公钥的大小,这些元素可以通过适当的哈希函数生成,并作为全局常量(形式上称为公共参考串CRS)使用。或者,同一组 个元素可以在全局范围内生成,并在所有公钥之间共享。

尽管将该方案转换为非对称设置可使方案速度更快且密文更小,但也会从两方面使情况恶化。第一,必须在两个群中都存在一组对应的 元素,这使公钥的大小增加了一倍。第二,由于每个对应元素必须具有相同的离散对数(相对于各自群的生成元),因此无法使用哈希函数生成它们。要生成每一对元素,必须选择一个随机指数,并将每个群的生成元提升到该指数次幂,这需要可信设置。在非对称设置下,如表 I 所示,我们的公钥大小为 4.2kB。

减少这些密钥大小的方法有三种: 1) 将 G2 中的元素移入私钥。我们称此为分割方法。这会增加公钥大小。2) 假设存在可信设置,并将其作为公共参数生成。3) 让每个用户参与生成参数。

第三种选项具有一定潜力。一种简单的方法是让所有用户为每个组件生成 g r 1 , g r 2 ,并证明它们均基于相同的底数,然后直接取各组件的乘积。可以对此进行优化,使得公共参数随着用户的注册而逐步更新,从而无需在开始时要求所有用户参与同一个设置协议。

D.解密窗口

许多前向保密应用程序需要能够保持对过去某些时间段的解密能力。在我们的方案中,可以存储多个密钥。例如,接收者可以保留允许解密过去 n个时间段内收到的消息的密钥。此外,通过具备sterilize密钥的能力,这些密钥可以被修改为无法用于生成后续时间段密钥的形式。因此,接收者可以选择性地“清除”特定时间段的密钥,和/或穿刺这些时间段内的特定消息标识符,同时保留之前时间段的密钥。时间窗口的大小是一个应用程序的选择,需权衡以下三点:1)解密潜在消息的需求;2)增加密钥存储的成本;3)攻击者可能故意延迟目标消息,直到他们泄露系统并提取出解密所需密钥之后的风险。

第八节 推荐用法

鉴于所有这些要素,我们现在拥有一个可用于在异步消息网络中实现前向保密的系统。我们提出的整体方法如下:每个接收者为混合P‐PKE方案生成一个公钥,并通过密钥服务器分发这些密钥。每一方现在维护一个开放的解密窗口,允许该方接收带有时间戳>(p−n)的消息,其中 p是当前时间段, n是解密窗口中的时间间隔数量。

在实际应用中,接收者可通过保留最近 n 个时间段对应的密钥来实现此过程,并采用 §VII‐D 中描述的密钥保留优化方法。当收到标记为时间周期 T 的新消息时,接收者识别出对应于 T 的时间周期密钥。如果该密钥仍然可用,则使用该密钥解密消息。接着,接收者可能使用该消息的唯一标识符对该对应密钥进行穿刺。同时,接收者的软件根据情况派生并消毒密钥(这可以在每次接收时执行,按时间区间执行,或以某种批量聚合过程执行,具体取决于处理和功耗要求)。客户端会定期清除已不在解密窗口内的旧时间段密钥。

第九节 性能评估

我们提供了两种类型的实验:展示混合(PFSE)方案性能的微基准测试,以及说明方案在示例使用场景中成本的模拟结果。

A.微基准测试

我们在三种设备上进行了实验:

•一台搭载32GB内存、运行Ubuntu 14.04的桌面级Intel Core i7‐3770K CPU @ 3.5GHz

•一台配备 Intel Core i7‐4650U 处理器(1.7GHz)、8GB内存和运行 OSX 10.9.5 的 2013年MacBook Air

•一台搭载高通骁龙801系统芯片(Kriat 400 ARM处理器) @ 2.5GHz、3GB内存并运行CyanogenMod 11的安卓手机。

所有实验均通过对深度为 = 31的树进行50次计时样本采集而得出,且密文仅支持d= 1个标签。我们实现了 §V‐A中所述方案的CCA安全变体。这些实验使用的内存少于50kB,且所有密钥均存储在内存中。

尽管本节的目的是研究我们混合方案的性能,但我们的微基准测试展示了与两种底层密码学组件相关的操作性能——前向安全的公钥加密(PKE)和可穿刺加密。回顾一下,可穿刺加密的密钥生成、加密以及“穿刺”操作均独立于先前对私钥应用的穿孔数量。即使与HIBE方案结合形成PFSE方案,这些操作的成本仍然保持不变。然而,它们确实会依赖于允许的时间段总数。表II列出了这些操作的微基准测试结果。

虽然PFSE.NextInterval与穿孔数量 n无关,但它在线性程度上依赖于当前时间间隔密钥的长度。由于 HIBE方案中的密钥随着身份长度增加而变小(即第一个时间间隔的密钥最长),推导下一个密钥的过程会更快。PFSE.Decrypt的运行时间为 O(n),与ID长度、当前时间间隔甚至时间间隔总数无关。然而,它确实依赖于穿孔的数量。性能结果参见图4,展示了时间间隔更新和解密的性能。 5我们注意到,由于解密依赖于穿孔数量 ×标签数量,图4还展示了使用 d ≥ 1个标签进行解密的效果。

B.现实条件下PFSE的表现

我们关注两个性能指标:私钥的大小以及执行读取消息所需加密操作的时间。PFSE在现实条件下的性能由4个参数决定:

1) 消息到达的分布。在我们的模拟中,为简化起见,我们假设消息到达被建模为具有分布 λ的泊松过程。这假设显然无法准确建模像聊天/短信这类具有大量回复的突发性通信——然而,对于此类机制,可以使用对称密钥推进来实现前向安全性。随着消息速率的增加,我们预期性能会下降。

2) 每个时间间隔的持续时间。我们方案中的HIBE部分将消息映射到相应的时间间隔,每个间隔需要特定的密钥来解密该间隔内的所有消息M。这些时间间隔的长度会影响密钥的大小(因为对于更短的时间间隔,我们需要构建更深的树来覆盖相同的时间跨度)、预期穿刺次数(在固定的消息速率下,较长的间隔意味着每个间隔内有更多的消息M,因此需要更多的穿孔)以及派生密钥所需的工作量。

3) 间隔数量 HIBE方案的最大深度限制了PFSE支持的时间间隔总数。这也影响了HIBE密钥派生的性能。

4) 我们可以解密潜在消息的时间“窗口”(在此窗口之前的所有消息将永久不可访问)。窗口大小影响需要存储的密钥材料的数量。我们预计,在已部署的应用中,窗口大小将由消息传递延迟等因素决定。延迟本身,假设每条消息的延迟相互独立,则不会影响性能。

由于消息速率由流量类型(例如电子邮件、短信等)决定,且窗口大小仅影响密钥存储,因此应用程序调整其性能的唯一两种方式是通过选择区间大小和支持的区间数量。这两个参数共同决定了密钥在需要更换之前的有效持续时间。在实际应用中,我们预期密钥更换前的时间长度将由外部需求决定。在这种情况下,应用程序开发者面临权衡:使用包含许多短间隔的密钥,还是使用包含少数长间隔的密钥。

1)模拟真实世界使用情况:为了探究PFSE在各种条件下的性能,我们定义了一个由上述三个参数决定的仿真。我们的仿真使用图4中桌面性能数据作为原始输入,以估算使用该密码学技术所产生的计算成本。图5展示了区间大小的影响结果。我们将实验设置为固定运行时间( 100,000秒),并选择参数使得每个公钥覆盖1年时间范围内的间隔(即,间隔长度为1毫秒的密钥所包含的间隔数量是间隔长度为1秒的密钥的1000倍)。

我们将结果细分为:(1) 导出HIBE密钥所花费的时间, (2) 穿刺密钥所花费的时间,以及 (3) 解密密文所花费的时间。当间隔T d增大时,P‐PKE的效率下降是预料之中的(因为每个间隔内的穿孔数量更多,因此解密所需时间更长)。然而令人惊讶的是,我们注意到当间隔T d变小时,导出密钥所花费的时间显著增加。

这种额外计算的原因部分是由于树深度的增加,因为间隔变得越来越小。然而,主要因素还是间距问题:随着区间大小减小,消息之间的距离(即 间隔数量)增加。因此,我们需要派生的密钥数量呈对数级增长,并且由于每个密钥的密钥派生在树中的深度上呈线性依赖,当间隔变短时,所需的总工作量呈多对数级增长。

根据这些结果,我们预期需要多少存储空间?表III 显示了在不同消息速率下测得的最大私钥大小。这些数据是通过与上述模拟实验类似的设置获得的,但(1)针对实际软件进行,时间窗口为1,000秒,并在密钥超出窗口后立即主动删除;(2)每个间隔接收 E[x]条消息(即每个间隔的预期消息数量),而不是每个间隔随机接收 X条消息,其中 X服从泊松分布。为了确保准确性,实验模拟了相当于2000秒的流量。

2)推荐的参数选择和预期性能:图5中的实验表明,最优间隔发生在接收者每个间隔收到1条消息M时。权衡的具体点可能因处理器类型以及解密中使用的配对和密钥派生中主要使用的点乘的相对效率而异。对当前实现的细粒度测试

最优间隔长度 / 消息速率

大小(kB)
0.001 10.56
0.010 55.15
0.100 214.10
1.000 890.44

表III 最优区间大小(即每个区间预期1条消息)的预期最大密钥大小。时间窗口为 1,000秒。密钥大小设置为覆盖1年。

确认每秒1条消息在测试桌面系统上至少是一个局部最优。根据我们的测试,我们相信可以处理每秒1条消息的消息速率,并预期每条消息的解密时间为20毫秒,且有 99.99%的概率小于100毫秒。

每个间隔一条消息的情况下,在台式机上派生下一个密钥平均需要50毫秒。因此,假设我们天真地只在收到消息时才派生密钥6, ,则解密一条消息的总预期时间远低于 200毫秒。移动基准测试表明计算成本 4x增加,使解密时间增加到800毫秒以下。由于其主要成本是密钥派生,而我们预计密钥派生将批量处理并独立于消息解密操作,因此在ARM处理器上实际解密一条消息的预期时间为55 毫秒,并且以99.99%的概率低于500毫秒。

X. 应用

在本节中,我们讨论了穿刺加密在现有系统中的两个应用和扩展。

A.安全删除

尽管本文所考虑的应用程序均仅限于消息传递协议,但我们的技术也可能适用于其他类型的数据存储。在标准方法中,消除敏感信息只需删除本地副本,而在基于云的存储中对文件进行安全删除可能会更具挑战性。

对于由单个用户写入和读取的文件,可以通过为每个文件使用唯一密钥进行加密,并在需要时删除该密钥来轻松实现安全删除。然而,对于具有多个写入者和至少一个读取者的系统(例如文件共享、在线密码管理器中的共享密码7 ,和SecureDrop8 [41]),通常需要使用公钥。遗憾的是,在这种情况下,无法明确地删除特定文件,而不删除整个私钥并失去对所有数据的访问权限。

然而,借助可穿刺加密,我们可以简单地为数据打上适当的标签,并通过对标签进行穿刺来删除文件。作为标签,有几种有趣的选项可供使用:

一个用于与记者进行安全通信的系统。

主题标签。 消息可以附加一个主题标识符。一旦该主题结束(例如,“选择副总统候选人”),所有与此讨论相关的消息都可以被删除。

分类标签。消息可以标记其分类级别(例如,机密、绝密等)。否定操作可以全局执行

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值