活动介绍

支持快速转发的前向安全加密技术解析

立即解锁
发布时间: 2025-08-31 00:32:54 阅读量: 7 订阅数: 35 AIGC
### 支持快速转发的前向安全加密技术解析 #### 1. 支持无界轮次的方案 为了支持无界数量的轮次,并将初始化运行时间减少到 $O(1)$,可以应用一系列高度递增的 GGM 树的思想。这些树的根可以使用前向安全的伪随机数生成器(PRNG)推导得出,比如基于 PRG.Expand 的常见构造。 在树 $GGM_t$ 中,更新操作会在轮次到达子树 $T_{t - 1}$ 之前完成扩展。由于这个子树有 $2^{t - 1}$ 个更多的叶子节点,我们可以利用这段时间来初始化下一棵树 $GGM_{t + 1}$,推导其最左边的路径,并将其共路径的加密信息存储在公告板上。 #### 2. 可快速转发的可更新公钥加密(FF - UPKE) FF - UPKE 使用任何更新同态的可更新公钥加密(H - UPKE)方案,并围绕所谓的累积更新思想构建。累积更新是指聚合一系列单个更新的更新密文。我们使用更新图来决定生成哪些累积更新,以平衡发送者的开销和接收者的快速转发能力。 ##### 2.1 更新同态的可更新公钥加密(H - UPKE) H - UPKE 是可更新公钥加密的一种特殊情况,除了密钥生成算法 $(pk_1, sk_1, pp) \leftarrow KeyGen(1^{\kappa})$、消息加密算法 $c \leftarrow Encrypt(pk_i, m)$ 和消息解密算法 $m \leftarrow Decrypt(sk_i, c)$ 外,还提供以下结构: 1. **更新密文**:由加密的更新消息组成,即 $up_{i + 1} \leftarrow UpdEnc(pk_i, \delta_{i + 1})$,其中 $\delta_{i + 1} \leftarrow UpdGen(pp)$ 是基于公共参数 $pp$ 采样得到的。 2. **更新消息**:是秘密密钥空间中的元素,该空间在某个运算符 $\star$ 下构成一个群。 3. **秘密密钥更新**:根据 $sk_{i + 1} = sk_i \star \delta_{i + 1}$ 更新秘密密钥。 4. **更新加密的同态性**:存在一个算法 $Upd - Comb(up, up')$ 可以同态地组合在相同公钥 $pk_i$ 下加密的两个更新。 使用简写符号 $\Delta[j, \ell] := (\delta_{j + 1} \star \cdots \star \delta_{\ell})$,同态性确保我们可以从两个部分更新 $UpdEnc(pk_i, \Delta[j, k])$ 和 $UpdEnc(pk_i, \Delta[k, \ell])$ 计算出等同于 $UpdEnc(pk_i, \Delta[j, \ell])$ 的加密结果。 H - UPKE 方案由一组算法 $(KeyGen, Encrypt, Decrypt, UpdGen, UpdEnc, UpdDec, UpdatePK, Upd - Comb)$ 组成,其中秘密密钥空间 $SK$ 构成一个半群。这些算法的定义如下: - **密钥生成算法**:$(pk_1, sk_1, pp) \leftarrow KeyGen(1^{\kappa})$,输出初始密钥对 $sk_1$ 和 $pk_1$ 以及公共参数 $pp$。 - **加密算法**:$c \leftarrow Encrypt(pk_i, m)$。 - **解密算法**:$m \leftarrow Decrypt(sk_i, c)$。 - **更新采样算法**:$\delta_{i + 1} \leftarrow UpdGen(pp)$,生成 $\delta_{i + 1} \in SK$。 - **公钥更新算法**:$pk_{i + 1} \leftarrow UpdatePK(pk_i, \delta_{i + 1})$。 - **更新加密算法**:$up_{i}^j \leftarrow UpdEnc(pk_i, \delta_j)$,其中 $j > i$。 - **更新组合算法**:$Upd_{i}[j, \ell] \leftarrow Upd - Comb(Upd_{i}[j, k], Upd_{i}[k, \ell])$。 - **更新解密算法**:$\Delta_{i}[j, \ell] \leftarrow UpdDec(sk_i, Upd_{i}[j, \ell])$。 **正确性和安全性**: - **正确性**:通过两个独立的属性来形式化。第一个属性要求 $(Encrypt, Decrypt)$ 和 $(UpdEnc, UpdDec)$ 分别是其各自消息空间的正确加密和解密算法对。第二个属性是关于同态性,要求 $Upd - Comb$ 的输出必须正确解密为底层更新秘密的乘法结果,即 $\Delta[j, k] \star \Delta[k, \ell] = UpdDec(sk_i, Upd - Comb(UpdEnc(pk_i, \Delta[j, k]), UpdEnc(pk_i, \Delta[k, \ell])))$。 - **安全性**:要求 IND - CPA 安全,其 IND - CPA 游戏与常规 UPKE 类似,但考虑了更新机制的特殊结构。具体游戏如下: ```plaintext Game UPKE IND - CPA Initialization b ←$ {0, 1} safe ←true chall ←false n ←1 (pk, sk, pp) ←KeyGen(1κ) return pk Oracle Corrupt if chall ∧safe then return sk Oracle Update Input: r1, r2 ∈R ∪{⊥} if r1 = ⊥∨r2 = ⊥then r1 ←$ R r2 ←$ R safe ←true n ←n + 1 δ ←UpdGen(pp; r1) up ←UpdEnc(pk, δ; r2) pk ←UpdatePK(pk, δ) sk ←sk ⋆δ return (pk, up) Oracle Challenge Input: m0, m1 ∈M if ¬chall ∧|m0| = |m1| then c ←Encrypt(sk, mb) safe ←false chall ←true return c Finalization Input: b′ ∈{0, 1} return b = b′ ``` 一个 UPKE 方案被称为 IND - CPA 安全,如果任何多项式时间概率敌手 $A$ 赢得上述游戏的概率是可忽略的。 通过对标准模型的 UPKE 方案进行微小修改,可以得到基于 DDH 或 LWE 假设的 H - UPKE 方案实例。但这两种构造都有一些限制:基于 LWE 的方案支持有限数量的同态操作,最多支持聚合 $q$ 个原子更新;基于 DDH 的构造支持先验无界数量的聚合,但聚合更新的解密需要 $O(\sqrt{n})$ 的局部计算时间,其中 $n$ 是底层更新的数量。 ##### 2.2 更新图 决定生成哪些累积更新是 FF - UPKE 构造的关键部分。如果插入的累积更新太少,$LeapSK - Idx(i, j) \approx j - i$ 将失去快速转发属性;如果插入太多,$UpdatePK$ 需要从公告板读写线性数量的元素。 我们将累积更新的插入问题重新表述为一个图论问题,并将原子(非快速转发)更新纳入图中。 **定义**:设 $\alpha, \beta, \gamma : \mathbb{N} \to \mathbb{N}$。一个 $(\alpha, \beta, \gamma)$ - 更新图 $G = (N, E)$ 是一个有向无环图,具有以下属性: 1. $\forall i \in \mathbb{N} : (i, i + 1) \in E$。 2. $\forall (i, j) \in E : i < j$。 3. $\forall n \in \mathbb{N} : deg_{in}^G(n) \leq \alpha(n)$。 4. $\forall n \in \mathbb{N} : diam(G_n) \leq \beta(n)$。 5. $\forall n \in \mathbb{N} : |active_G(n)| \leq \gamma(n)$,其中 $active_G(n) := \{i \in [n - 1] | \exists j > n : (i, j) \in E\}$,$(G_n)_{n \in \mathbb{N}}$ 是前缀图序列,$G_n := ([n], E_n)$ 且 $E_n := E \cap [n]^2$。 不同参数对构造效率的影响如下: |参数|影响| |----|----| |$\beta(j)$|$LeapSK$ 所需的更新消息数量的上限| |$active_G(n) \leq \gamma(n)$|当发送者使用 $UpdatePK$ 启动第 $i$ 个轮次时,需要扩展的累积更新集合| |入度|对应轮次的“最终”更新数量| 为了使更新图对我们的构造有用,需要能够高效计算。具体来说,需要计算每个节点 $i$ 的 $E_{in}^G(i)$ 和 $active_G(i)$ 集合,以及任意节点 $i$ 和 $j$ 之间的短路径。 一个 $(\alpha, \beta, \gamma)$ - 更新图 $G = (N, E)$ 由一对确定性算法 $(G.Eval, G.Path)$ 实现,如果: - $G.Eval(n)$ 在 $O(poly(log n))$ 时间内输出 $E_{in}(n)$ 和 $active(n)$。 - $G.Path(i, j)$ 在 $O(poly(\beta(j) \cdot j))$ 时间内输出从节点 $i$ 到节点 $j$ 的路径 $e$,使得 $|e| \leq \beta(j)$。 下面是更新图相关操作的流程图: ```mermaid graph LR A[开始] --> B[计算E_in和active集合] B --> C{是否需要路径} C -- 是 --> D[计算短路径] C -- 否 --> E[结束] D --> E ``` #### 2.3 通用构造方案 基于更新同态的可更新公钥加密(H - UPKE)方案和更新图,我们可以构建一个可快速转发的可更新公钥加密(FF - UPKE)方案。 **发送方操作**: 当发送方 $j$ 选择相应的更新秘密 $\delta_{j + 1}$ 时,除了将 $pk_j$ 更新为 $pk_{j + 1}$,还会进行以下操作: 1. 生成一个新的密文 $Up[j, j + 1]$,该密文在公钥 $pk_j$ 下对 $\delta_{j + 1}$ 进行加密。 2. 对于 $active(j + 1) \cup E_{in}(j + 1)$ 中的每个 $i$,从公告板获取 $Up[i, j]$,并利用 H - UPKE 的更新同态属性计算密文 $Up[i, j + 1]$,然后将其发布到公告板上。 **接收方操作**: 如果接收方知道密钥 $sk_i$,并希望跳转到某个密钥 $sk_j$($j > i$),则会执行以下步骤: 1. 在更新图中计算一条从 $i = i_0$ 到 $i_d = j$ 的短“跳跃路径” $i = i_0 \to i_1 \to \cdots \to i_d = j$。 2. 从公告板检索 $d$ 个密文 $\{Up[i_k, i_{k + 1}]\}$。 3. 使用 $sk_i = sk_{i_0}$ 解密 $Up_{i_0, i_1}$,得到 $\Delta[i_0, i_1]$。 4. 计算 $sk_{i_1} := sk_{i_0} \star \Delta[i_0, i_1]$。 5. 重复步骤 3 - 4 $d$ 次,最终“追上” $sk_j = sk_{i_d}$。 以下是该方案的正式描述: ```plaintext Protocol Fast - Forwardable UPKE KeyGen(1κ) BBinit[·] ←⊥ (pkH - UPKE, skH - UPKE, ppH - UPKE) ←H - UPKE.KeyGen(1κ) pk ←(1, pkH - UPKE, ppH - UPKE) BB[·, ·] ←⊥ pk ←(1, pkH - UPKE, ppH - UPKE, BB) sk ←(1, skH - UPKE) return (pk, sk, BBinit) Encrypt(pk, m) parse (·, pkH - UPKE, ·) ←pk parse (·, pkH - UPKE, ·, ·) ←pk c ←H - UPKE.Encrypt(pkH - UPKE, m) return c Decrypt(sk, c) parse (·, skH - UPKE) ←sk m ←H - UPKE.Encrypt(skH - UPKE, c) return m UpdatePK(pk, BB) parse (n, pkH - UPKE, ppH - UPKE) ←pk parse (n, pkH - UPKE, ppH - UPKE, BB) ←pk n ←n + 1 BB′[·, ·] ←⊥ // Generate the regular update δ ←H - UPKE.UpdGen(pp) pk′H - UPKE ←H - UPKE.UpdatePK(pk, δ) up(n−1,n) ←H - UPKE.UpdEnc(pk, δ) // Update all active cumulative updates (In, A) ←G.Eval(n) for all i ∈A ∪In \ {n - 1} do up(i,n−1) ←BB[i, n - 1] up(i,n) ←H - UPKE.Upd - Comb(up(i,n−1), up(n−1,n)) BB′[i, n] ←up(i,n) BB′[n - 1, n] ←up(n−1,n) pk′ ←(n, pk′H - UPKE, ppH - UPKE) return (pk′, BB′) BB′′[·, ·] ←⊥ BB′′[n - 1, n] ←up(n−1,n) pk′ ←(n, pk′H - UPKE, ppH - UPKE, BB′) return (pk′, BB′′) UpdateSK(sk, BB) parse (n, skH - UPKE) ←sk n ←n + 1 δ ←H - UPKE.UpdDec(skH - UPKE, BB[n - 1, n]) skH - UPKE ←skH - UPKE ⋆δ sk′ ←(n, skH - UPKE) return sk′ LeapSK(sk, j, BB) parse (n, skH - UPKE) ←sk if j ≤n then return ⊥ e ←G.Path(n, j) for (u, v) ∈e do δ ←H - UPKE.UpdDec(skH - UPKE, BB[u, v]) skH - UPKE ←skH - UPKE ⋆δ n ←j sk′ ←(n, sk′H - UPKE) return sk′ UpdatePK - Idx(n) I ←∅ (In, A) ←G.Eval(n + 1) for all i ∈A ∪In \ {n} do I ←I ∪{(i, n)} return I UpdateSK - Idx(n) return {(n, n + 1)} LeapSK - Idx(n, j) e ←G.Path(n, j) I ←∅ for (u, v) ∈e do I ←I ∪{(u, v)} return I ``` **单发送方变体**: 当该方案部署在单发送方环境中,如两方安全消息传递方案时,可以进行一些调整以实现不同的存储/带宽权衡。由于接收方只会使用 $(i, j) \in E$ 的元素,发送方可以选择只上传 $E_{in}(n)$ 中的元素,将正在进行的累积更新作为本地状态的一部分保留。 这种变体的优点是: 1. 存储需求为 $O(\gamma + \alpha(n))$。 2. $UpdatePK$ 不需要从公告板读取任何内容,即 $UpdatePK - Idx(n) = \emptyset$,可能减少延迟。 以下是单发送方变体的流程图: ```mermaid graph LR A[发送方选择更新秘密] --> B[更新公钥] B --> C[生成新密文] C --> D{是否需要扩展累积更新} D -- 是 --> E[计算并上传累积更新] D -- 否 --> F[结束] E --> F ``` **正确性和效率**: 该构造的正确性直接源于底层 H - UPKE 方案的正确性。更新图的各种参数直接影响方案的效率,具体如下: |操作|效率指标| |----|----| |$UpdatePK$|$|UpdatePK - Idx(n)| \leq \gamma(n + 1)$,$|BB_{up}| \leq \gamma(n + 1) + 1$,需要 $O(\gamma(n + 1))$ 次与底层方案相同的加密操作| |$UpdateSK$|$|UpdateSK - Idx(n)| = 1$,需要 $O(1)$ 次与底层方案相同的加密操作| |$LeapSK$|$|LeapSK - Idx(n, j)| \leq \beta(j)$,需要 $O(\beta(j))$ 次与底层方案相同的加密操作| 单发送方方案的私钥大小与底层 H - UPKE 方案大致相同,公钥大小约为底层方案的 $\gamma(n)$ 倍(考虑本地存储),除了 $|UpdatePK - Idx(n)| = 0$ 和 $|BB_{up}| \leq \alpha(n + 1)$ 外,效率相同。 **安全性**: 该 FF - UPKE 方案的安全性直接源于底层 H - UPKE 方案的安全性。如果底层 H - UPKE 方案是 IND - CPA 安全的,那么 FF - UPKE 方案也是 IND - CPA 安全的。 #### 3. 总结 快速转发是前向安全加密的一个引人注目的特性,在实际相关的公告板模型中,快速转发可以以很小的额外成本实现。 我们构建了一个可快速转发的流密码,该密码保持恒定的本地状态,每次更新操作的运行时间恒定。同时,我们提出了一个从更新同态的 UPKE 方案构建可快速转发的可更新公钥加密方案的通用方法,填补了前向安全公钥加密(PKE)和更高效的可更新公钥加密(UPKE)之间的差距。 虽然目前的实例化方案还不十分实用,但这种新颖的 FF - UPKE 构造可能最终会产生性能显著优于前向安全 PKE 的构造,解决实际公钥加密中在选择前向保密性和快速转发之间的困境。未来,构建高效的更新同态 UPKE 方案是一个值得探索的问题。
corwn 最低0.47元/天 解锁专栏
赠100次下载
点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

史东来

安全技术专家
复旦大学计算机硕士,资深安全技术专家,曾在知名的大型科技公司担任安全技术工程师,负责公司整体安全架构设计和实施。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

利用Kaen实现PyTorch分布式训练及超参数优化

### 利用Kaen实现PyTorch分布式训练及超参数优化 #### 1. 启用PyTorch分布式训练支持 在进行模型训练时,我们可以使用Kaen框架来支持PyTorch的分布式训练。以下是相关代码示例: ```python train_glob = os.environ['KAEN_OSDS_TRAIN_GLOB'] if 'KAEN_OSDS_TRAIN_GLOB' in os.environ else 'https://raw.githubusercontent.com/osipov/smlbook/master/train.csv' val_glob = os.environ['

模型生产化:从本地部署到云端容器化

# 模型生产化:从本地部署到云端容器化 ## 1. 引入 FastAPI 在将模型投入生产的过程中,我们首先要安装 FastAPI。由于 FastAPI 是一个 Python 模块,我们可以使用 pip 进行安装。打开一个新的终端,运行以下命令: ```bash $ pip install fastapi uvicorn aiofiles jinja2 ``` 这里我们安装了一些 FastAPI 所需的额外依赖项。uvicorn 是一个用于设置 API 的底层服务器/应用程序接口,而 aiofiles 则使服务器能够异步处理请求,例如同时接受和响应多个独立的并行请求。这两个模块是 FastA

使用PyTorch构建电影推荐系统

### 使用 PyTorch 构建电影推荐系统 在当今数字化时代,推荐系统在各个领域都发挥着至关重要的作用,尤其是在电影推荐领域。本文将详细介绍如何使用 PyTorch 构建一个电影推荐系统,从数据处理到模型训练,再到最终的推荐生成,为你呈现一个完整的推荐系统构建流程。 #### 1. 数据探索与处理 首先,我们需要对 MovieLens 数据集进行探索和处理。该数据集包含用户对电影的评分信息,其中存在一些缺失的评分值,用 NaN 表示。我们的目标是利用非空评分训练推荐系统,并预测这些缺失的评分,从而为每个用户生成电影推荐。 以下是处理数据集的代码: ```python import p

利用PyTorch进行快速原型开发

### 利用 PyTorch 进行快速原型开发 在深度学习领域,快速搭建和验证模型是非常重要的。本文将介绍两个基于 PyTorch 的高级库:fast.ai 和 PyTorch Lightning,它们可以帮助我们更高效地进行模型的训练和评估。 #### 1. 使用 fast.ai 进行模型训练和评估 fast.ai 是一个基于 PyTorch 的高级库,它可以让我们在几分钟内完成模型的训练设置。下面是使用 fast.ai 训练和评估手写数字分类模型的步骤: ##### 1.1 模型训练日志分析 在训练过程中,我们可以看到冻结网络的第一个训练周期,然后是解冻网络的两个后续训练周期。日志中

电力电子中的Simulink应用:锁相环、静止无功补偿器与变流器建模

# 电力电子中的Simulink应用:锁相环、静止无功补偿器与变流器建模 ## 1. 锁相环(PLL) ### 1.1 锁相环原理 锁相环(PLL)是一种控制算法,用于确定正弦输入的频率和相位角。它主要用于两个系统之间的频率匹配,匹配完成后会存在一个恒定的相位差,从而实现相位“锁定”。PLL由相位检测机制、PID控制器和用于生成相位角信息的振荡器组成。此外,系统中还包含一个低通滤波器,用于获取正弦输入的频率信息。在柔性交流输电系统(FACTS)设备中,PLL增益对稳定系统性能起着至关重要的作用。 ### 1.2 Simulink环境下的PLL设置 为了直观展示PLL如何反映频率和相位的变化

二维和三维偏微分方程耦合求解及生命科学中常微分方程问题的解决

### 二维和三维偏微分方程耦合求解及生命科学中常微分方程问题的解决 #### 1. 二维和三维偏微分方程耦合求解 在求解二维和三维偏微分方程时,有几个具体的问题和解决方法值得探讨。 ##### 1.1 获取相同网格点的 v 值 要在与 u 相同的网格点上获取 v 值,可以输入以下命令: ```matlab >> T_table=tri2grid(p,t,u(length(p)+1:end,end),x,y) ``` 示例结果如下: ``` T_table = 0.6579 0.5915 0.5968 0.6582 0 0.6042 0.4892 0.5073 0.6234 0 0.543

模糊推理系统对象介绍

# 模糊推理系统对象介绍 ## 1. fistree 对象 ### 1.1 概述 fistree 对象用于表示相互连接的模糊推理系统树。通过它可以创建一个相互关联的模糊推理系统网络。 ### 1.2 创建方法 可以使用以下语法创建 fistree 对象: ```matlab fisTree = fistree(fis,connections) fisTree = fistree( ___ ,'DisableStructuralChecks',disableChecks) ``` - `fisTree = fistree(fis,connections)`:创建一个相互连接的模糊推理系统对象

强化学习与合成数据生成:UnityML-Agents深度解析

# 强化学习与合成数据生成:Unity ML - Agents 深度解析 ## 1. 好奇心奖励与超参数设置 在强化学习中,为了激发智能体的好奇心,可以传递与外在奖励相同的超参数。具体如下: - **好奇心奖励信号超参数**: - `reward_signals->curiosity->strength`:用于平衡好奇心奖励与其他奖励(如外在奖励)的缩放系数,取值范围在 0.0 到 1.0 之间。 - `reward_signals->curiosity->gamma`:根据奖励实现所需的时间来调整奖励感知价值的第二个缩放系数,与外在奖励的 `gamma` 类似,取值范围也在

多视图检测与多模态数据融合实验研究

# 多视图检测与多模态数据融合实验研究 ## 1. 多视图检测实验 ### 1.1 实验数据集 实验参考了Wildtrack数据集和MultiviewX数据集,这两个数据集的特点如下表所示: | 数据集 | 相机数量 | 分辨率 | 帧数 | 区域面积 | | ---- | ---- | ---- | ---- | ---- | | Wildtrack | 7 | 1080×1920 | 400 | 12×36 m² | | MultiviewX | 6 | 1080×1920 | 400 | 16×25 m² | ### 1.2 评估指标 为了评估算法,使用了精度(Precision)、

内存优化终极方案:告别Cocos2d-x塔防游戏卡顿与崩溃

![内存优化终极方案:告别Cocos2d-x塔防游戏卡顿与崩溃](https://assetsio.gnwcdn.com/astc.png?width=1200&height=1200&fit=bounds&quality=70&format=jpg&auto=webp) # 1. Cocos2d-x塔防游戏内存问题的根源分析 在开发基于Cocos2d-x的塔防类游戏过程中,内存问题常常成为性能瓶颈的关键诱因。这类游戏通常涉及大量动态对象(如敌人、子弹、塔、特效等)的实时创建与销毁,加之频繁的动画播放与资源加载,极易引发内存抖动、内存泄漏甚至OOM(Out Of Memory)崩溃。问题的根