活动介绍

支持细粒度发送者权限控制的SCPEKS方案解析

立即解锁
发布时间: 2025-08-31 01:29:12 阅读量: 7 订阅数: 15 AIGC
### 支持细粒度发送者权限控制的 SCPEKS 方案解析 #### 1. 引言 在当今数字化时代,数据的安全存储和检索至关重要。可搜索公钥加密(PEKS)技术为数据的安全检索提供了有效的解决方案。本文将详细介绍一种支持细粒度发送者权限控制的 SCPEKS 方案,包括其系统模型、算法定义、安全模型、具体构造以及性能分析。 #### 2. SCPEKS 相关定义 ##### 2.1 系统模型 SCPEKS 系统模型包含四种实体:信任权威机构、数据发送者、数据接收者和云服务器。 - **信任权威机构**:负责系统初始化,为数据发送者和接收者生成密钥。接收数据发送者的属性后,通过安全通道为其分发对应属性的密钥,并生成 PKTree 的根节点分发给数据接收者。 - **数据发送者**:可能诚实或恶意。其密钥与某些属性对应,可被接收者验证。发送者使用自己的密钥和接收者的公钥加密关键词生成可搜索密文,然后将其与加密数据上传到云服务器。 - **数据接收者**:可能诚实或恶意。使用自己的密钥生成包含访问控制策略的合法陷门,将其发送到云服务器进行关键词搜索。 - **云服务器**:诚实但好奇。接收接收者的陷门后,验证发送者的属性是否满足访问控制策略,以及密文是否与陷门匹配。若都满足,则将匹配的加密数据返回给接收者。 ```mermaid graph LR A[信任权威机构] -->|Sender Keys| B[数据发送者] A -->|Receiver Keys| C[数据接收者] B -->|Encrypted Data, Ciphertext| D[云服务器] C -->|Trapdoor| D D -->|Encrypted Data| C classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px A:::process B:::process C:::process D:::process ``` ##### 2.2 算法定义 SCPEKS 方案由五个算法组成: - **Setup (1λ)**:由信任权威机构运行,输入安全参数 1λ,输出主公共密钥 mpk 和主秘密密钥 msk。后续算法默认使用 mpk 作为隐式输入。 - **SkGen (σ, msk)**:信任权威机构运行,输入数据发送者的属性 σ,输出对应属性的发送者密钥 ssk。 - **RkGen (sk, ID, τ, Tree)**:由信任权威机构或 PKTree 中的节点运行,输入节点或权威机构的密钥 sk、接收者或根节点的身份 ID、时间戳 τ 和 PKTree,为接收者或根节点生成公钥和私钥对 (rsk, rpk)。 - **Encryption (w, σ, ssk, rpk)**:数据发送者运行,输入关键词 w、属性 σ、发送者密钥 ssk 和接收者公钥 rpk,输出 w 的密文 Ct。 - **Trapdoor (w, R, rsk)**:数据接收者运行,输入关键词 w、策略 R 和接收者密钥 rsk,输出陷门 T = (R, Tw)。 - **Test (Ct, T)**:云服务器运行,输入密文 Ct 和陷门 T,若 Ct 包含与 Tw 相同的关键词且满足策略 R,则输出 1,否则输出 0。 ##### 2.3 安全模型 安全的 SCPEKS 需要满足密文不可区分性和不可伪造性: - **密文不可区分性**:在密文不可区分性游戏中,若不存在多项式有界的对手 A 对挑战者 C 有不可忽略的优势,则 SCPEKS 满足密文不可区分性。游戏流程如下: 1. **Setup**:挑战者 C 输入安全参数 1λ,生成 mpk 和 msk,将 mpk 发送给 A,保留 msk。 2. **Query Phase 1**:A 进行各种查询,包括 SkGen、RkGen、Trapdoor 和 Encryption 查询。 3. **Challenge**:A 选择发送者属性 σ∗、接收者公钥 rpk∗和未在之前查询中出现的关键词 w∗0, w∗1 发送给 C。C 随机选择 b ∈ {0, 1},计算 Ct∗ = Encryption(w∗b, σ∗, sskσ∗, rpk∗) 并返回给 A。 4. **Query Phase 2**:A 再次进行查询,但对 Trapdoor 查询有约束,不能是 (w∗0, rpk∗) 或 (w∗1, rpk∗)。 5. **Guess**:A 输出猜测位 b′,若 b = b′ 则 A 获胜。 - **不可伪造性**:在不可伪造性游戏中,若不存在多项式有界的对手 A 对挑战者 C 有不可忽略的优势,则 SCPEKS 满足不可伪造性。游戏流程如下: 1. **Setup**:挑战者 C 输入安全参数 1λ,生成 mpk 和 msk,将 mpk 发送给 A,保留 msk。 2. **Query Phase**:A 进行各种查询,包括 SkGen、RkGen、Encryption 和 Trapdoor 查询。挑战者 C 维护 LS 和 LE 列表记录查询信息。 3. **Guess**:A 发送密文 Ct∗和策略 R∗给 C。若 Verify (Ct∗, R∗) = 1,且 (Ct∗, R∗) 满足特定要求,则游戏输出 1,否则输出 0。 #### 3. SCPEKS 的构造 ##### 3.1 Setup (1λ) 输入安全参数 1λ,生成两个素数阶循环群 G 和 GT,两个不同生成元 g, h ← G 和双线性映射 e : G × G → GT。选择多个密码哈希函数,随机选择 α, β ∈ Z∗p,生成主秘密密钥 msk = (gα, β) 和主公共密钥 mpk = (G, GT, e, p, g, h, gβ, e(g, g)α, H1, H2, H3, H4, H5)。 ##### 3.2 SkGen (σ, msk) 输入数据发送者的属性 σ = (σ1, σ2, ..., σl) 和 msk,随机选择 s ← Z∗p,计算发送者的密钥 ssk1,i = gαH1(σi)s 和 ssk2 = gs,其中 i = {1, ..., l}。 ##### 3.3 RkGen (msk/ski, IDRt/IDrcv, τ, Tree) 根据是否首次运行分为两种情况: - 首次运行:输入主秘密密钥 msk、根节点身份 IDRt 和时间戳 τ,运行 PKTree.BuildTree (mpk, msk, IDRt, τ) 为根节点生成公钥 pkRt 和私钥 skRt。 - 非首次运行:输入 PKTree 中节点 i 的密钥 ski、数据接收者身份 IDrcv、时间戳 τ 和 PKTree,运行 PKTree.AddNode (mpk, Tree, ski, IDrcv, τ) 为 IDrcv 生成私钥 rsk,并将其设为子节点。IDrcv 的公钥 rpk = gH2(rsk)。 ##### 3.4 Encryption (w, σ, ssk, rpk) 输入关键词 w、属性 σ、发送者密钥 ssk 和接收者公钥 rpk,随机选择 r1, r2, r3 ← Z∗p,计算密文: - C1 = e(rpkr1·H4(w), H3(IDrcv)) - C2 = gr1 - C3 = hr1 - C4 = ssk2 · gr2 - C5 = gr3 - 对于每个 i ∈ [1, l],C6,i = ssk1,i · H1(σi)r2 · H5(C1−5)r3,其中 C1−5 表示 C1 ∥ C2 ∥ C3 ∥ C4 ∥ C5。 最终输出密文 Ct = (σ, C1, C2, C3, C4, C5, C6,i)。 ##### 3.5 Trapdoor (w, R, rsk) 输入要搜索的关键词 w、接收者指定的策略 R 和接收者密钥 rsk,随机选择 t1 ← Zp,计算 T1 = ht1 · H3(IDrcv)H2(rsk)H4(w) 和 T2 = gt1,输出陷门 T = (R, Tw = (T1, T2))。 ##### 3.6 Test (Ct, T) 输入密文 Ct 和陷门 T = (R, T1, T2),解析策略 R 为 (M, ρ) 格式,随机选择 −→x = (1, x2, ..., xn) ← Zn×1p,计算 −→λ = (λ1, λ2, ..., λl)⊤ = M−→x,计算 {wi ∈ Zp}i∈I 使得 i∈Iwi−→M i = (1, 0, ..., 0),I = {i : ρ(i) ∈ S}。检查以下等式是否成立: C1 · e(T2, C3) · i∈I e(C6,i, g) / (e(H1(σi), C4) · e(H5(C1−5), C5))λiwi = e(g, g)α · e(C2, T1) 若等式成立,输出 1,否则输出 0。 #### 4. 安全证明和性能分析 ##### 4.1 安全证明 - **定理 1**:若存在概率多项式时间对手 A 在密文不可区分性游戏中以不可忽略的优势获胜,则可构造概率多项式时间对手 B 以不可忽略的优势解决决策性 BDH 假设。 - **定理 2**:若存在概率多项式时间对手 A 在不可伪造性游戏中以不可忽略的优势获胜,则可构造概率多项式时间对手 B 以不可忽略的概率解决计算性 BDH 假设。 ##### 4.2 性能分析 - **功能比较**:与其他相关 PEKS 方案比较,我们的方案不仅支持双向访问控制,还支持多用户场景下的细粒度访问控制,更具灵活性。 | 方案 | 接收者控制 | 发送者控制 | 细粒度控制 | | ---- | ---- | ---- | ---- | | FKS - HPABE | √ | × | √ | | HEPKS | √ | × | √ | | PAEKS | √ | √ | × | | dIBAEKS | √ | √ | × | | 我们的方案 | √ | √ | √ | - **计算成本比较**:与 MA - dIBAEKS 比较,我们的方案在实现细粒度访问控制的同时,保持了相似甚至更低的计算成本。 | 算法 | MA - dIBAEKS | 我们的方案 | | ---- | ---- | ---- | | SkGen | (E + H) × l | (l + 1)E + lH | | RkGen | E + H | E | | Encryption | (3E + H + 2P) × l | (l + 6)E + (l + 3)H + P | | Trapdoor | (2E + H + P + M) × l | 3E + 3H | | Test | (2E + 2P + M) × l | (i + 1)H + (2i + 3)P | - **通信成本比较**:与 MA - dIBAEKS 比较,我们的方案在实现更灵活的访问控制的同时,保持了相似甚至更低的通信成本。 | 项目 | MA - dIBAEKS | 我们的方案 | | ---- | ---- | ---- | | 发送者密钥 | |G| × l | (l + 1)|G| + |σ| | | 接收者密钥 | 2|G| | 2|G| | | 密文 | (2|G| + |GT|) × l | |GT| + (l + 4)|G| + |σ| | | 陷门 | 2|G| × l | 2|G| + |R| | 通过实验分析,在 PC 上使用 PBC 库进行模拟,结果表明我们的方案在实际应用中具有良好的性能。 综上所述,我们提出的 SCPEKS 方案在安全性和性能方面都具有优势,为数据的安全存储和检索提供了一种有效的解决方案。 ### 支持细粒度发送者权限控制的 SCPEKS 方案解析 #### 4. 安全证明和性能分析(续) ##### 4.1 安全证明(续) 在上述两个定理的证明过程中,对手 B 通过模拟与对手 A 的游戏过程,利用 A 的优势来解决相应的 BDH 假设问题。 对于定理 1 的证明,对手 B 接收一个决策性 BDH 实例,然后与对手 A 进行密文不可区分性游戏: - **Setup 阶段**:B 随机选择参数并设置主公共密钥 mpk 发送给 A,同时将 H3 编程为随机预言机。 - **Query 阶段 1**: - **Hash 预言机 OH**:对于输入的身份 ID,随机选择 rj ∈ Z∗p,输出 H3(ID) = (hc)rj。 - **SkGen 预言机 OS**:运行 SCPEKS.SkGen(σ) 为 A 生成发送者密钥 ssk。 - **RkGen 预言机 OR**:若 ID 之前已查询过,返回之前的结果;否则,运行 SCPEKS.RkGen(sk, ID, τ, Tree) 生成相应的节点和密钥。 - **Trapdoor 预言机 OT**:随机选择 t1 ∈ Zp,返回陷门 T = (Tw = (T1, T2), R)。 - **Challenge 阶段**:A 选择身份 ID∗和两个关键词 w∗0, w∗1 发送给 B。B 随机选择 b ∈ {0, 1} 和 r2, r3 ← Z∗p,计算 Ct∗和 Node∗。 - **Query 阶段 2**:A 进行查询,但不能对 (ID∗, w∗0) 或 (ID∗, w∗1) 进行 Trapdoor 查询。 - **Guess 阶段**:A 输出猜测位 b′,若 b = b′,则 B 向决策性 BDH 挑战者返回 R = e(g, h)abc,否则返回 R 是 GT 中的随机元素。 对于定理 2 的证明,对手 B 接收一个计算性 BDH 挑战,然后与对手 A 进行不可伪造性游戏: - **Setup 阶段**:B 初始化游戏,设置主公共密钥 mpk 发送给 A,将 H1 编程为随机预言机,隐式设置主秘密密钥 gα。 - **Query 阶段**: - **Hash 预言机 OH**:对于输入的属性 σi,根据 R(σi) 的值选择不同的 r 和 r′,返回 (gb)rgr′ 并记录信息。 - **SkGen 预言机 OS**:随机选择 s ∈ Zp,计算发送者密钥 ssk1i 和 ssk2。 - **RkGen 预言机 OR**:与密文不可区分性游戏相同。 - **Trapdoor 预言机 OT**:与密文不可区分性游戏相同。 - **Guess 阶段**:A 输出密文 Ct∗和策略 R∗,B 进行一系列计算,若满足条件则可计算出 e(g, g)abc。 ```mermaid graph LR A[对手 B] -->|Setup| B[对手 A] B -->|Query Phase 1| A A -->|Response| B B -->|Challenge| A A -->|Query Phase 2| A A -->|Guess| B classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px A:::process B:::process ``` ##### 4.2 性能分析(续) - **实验分析**:在 PC 上使用 3.8 GHz Intel(R) Core(TM) i5 - 1135G7 CPU 和 16 GB 内存,基于 PBC 库(Type A 曲线,q - bits = 512)对我们的方案进行模拟。实验结果如图所示,横坐标分别表示属性数量 l 和关键词数量 k,纵坐标表示运行时间和存储大小。 | 实验指标 | 实验条件 | 结果 | | ---- | ---- | ---- | | 运行时间 | l = 5 | 如图 3a 所示 | | 运行时间 | k = 1 | 如图 3b 所示 | | 存储大小 | l = 5 | 如图 3c 所示 | | 存储大小 | k = 1 | 如图 3d 所示 | 从实验结果可以看出,我们的方案在不同属性数量和关键词数量的情况下,运行时间和存储大小都表现出良好的性能。随着属性数量或关键词数量的增加,运行时间和存储大小的增长趋势较为平缓,说明该方案具有较好的扩展性。 #### 5. 总结 本文详细介绍了一种支持细粒度发送者权限控制的 SCPEKS 方案。该方案通过合理的系统模型设计,包括信任权威机构、数据发送者、数据接收者和云服务器,实现了数据的安全存储和检索。 在算法定义方面,明确了 Setup、SkGen、RkGen、Encryption、Trapdoor 和 Test 六个算法的具体功能和输入输出。安全模型满足密文不可区分性和不可伪造性,通过安全证明表明该方案在决策性 BDH 假设和计算性 BDH 假设下是安全的。 性能分析结果显示,与其他相关 PEKS 方案相比,我们的方案不仅支持双向访问控制,还支持多用户场景下的细粒度访问控制,在计算成本和通信成本上也具有优势,同时在实际实验中表现出良好的性能和扩展性。 未来,该方案可以进一步优化和扩展,例如考虑更复杂的访问控制策略、提高算法的效率等,以适应不断变化的安全需求和应用场景。
corwn 最低0.47元/天 解锁专栏
赠100次下载
点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

史东来

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

专栏目录

最新推荐

iOS开发中的面部识别与机器学习应用

### iOS开发中的面部识别与机器学习应用 #### 1. 面部识别技术概述 随着科技的发展,如今许多专业摄影师甚至会使用iPhone的相机进行拍摄,而iPad的所有当前型号也都配备了相机。在这样的背景下,了解如何在iOS设备中使用相机以及相关的图像处理技术变得尤为重要,其中面部识别技术就是一个很有价值的应用。 苹果提供了许多框架,Vision框架就是其中之一,它可以识别图片中的物体,如人脸。面部识别技术不仅可以识别图片中人脸的数量,还能在人脸周围绘制矩形,精确显示人脸在图片中的位置。虽然面部识别并非完美,但它足以让应用增加额外的功能,且开发者无需编写大量额外的代码。 #### 2.

Rust模块系统与JSON解析:提升代码组织与性能

### Rust 模块系统与 JSON 解析:提升代码组织与性能 #### 1. Rust 模块系统基础 在 Rust 编程中,模块系统是组织代码的重要工具。使用 `mod` 关键字可以将代码分隔成具有特定用途的逻辑模块。有两种方式来定义模块: - `mod your_mod_name { contents; }`:将模块内容写在同一个文件中。 - `mod your_mod_name;`:将模块内容写在 `your_mod_name.rs` 文件里。 若要在模块间使用某些项,必须使用 `pub` 关键字将其设为公共项。模块可以无限嵌套,访问模块内的项可使用相对路径和绝对路径。相对路径相对

Rust开发实战:从命令行到Web应用

# Rust开发实战:从命令行到Web应用 ## 1. Rust在Android开发中的应用 ### 1.1 Fuzz配置与示例 Fuzz配置可用于在模糊测试基础设施上运行目标,其属性与cc_fuzz的fuzz_config相同。以下是一个简单的fuzzer示例: ```rust fuzz_config: { fuzz_on_haiku_device: true, fuzz_on_haiku_host: false, } fuzz_target!(|data: &[u8]| { if data.len() == 4 { panic!("panic s

AWS无服务器服务深度解析与实操指南

### AWS 无服务器服务深度解析与实操指南 在当今的云计算领域,AWS(Amazon Web Services)提供了一系列强大的无服务器服务,如 AWS Lambda、AWS Step Functions 和 AWS Elastic Load Balancer,这些服务极大地简化了应用程序的开发和部署过程。下面将详细介绍这些服务的特点、优缺点以及实际操作步骤。 #### 1. AWS Lambda 函数 ##### 1.1 无状态执行特性 AWS Lambda 函数设计为无状态的,每次调用都是独立的。这种架构从一个全新的状态开始执行每个函数,有助于提高可扩展性和可靠性。 #####

Rust编程:模块与路径的使用指南

### Rust编程:模块与路径的使用指南 #### 1. Rust代码中的特殊元素 在Rust编程里,有一些特殊的工具和概念。比如Bindgen,它能为C和C++代码生成Rust绑定。构建脚本则允许开发者编写在编译时运行的Rust代码。`include!` 能在编译时将文本文件插入到Rust源代码文件中,并将其解释为Rust代码。 同时,并非所有的 `extern "C"` 函数都需要 `#[no_mangle]`。重新借用可以让我们把原始指针当作标准的Rust引用。`.offset_from` 可以获取两个指针之间的字节差。`std::slice::from_raw_parts` 能从

并发编程中的锁与条件变量优化

# 并发编程中的锁与条件变量优化 ## 1. 条件变量优化 ### 1.1 避免虚假唤醒 在使用条件变量时,虚假唤醒是一个可能影响性能的问题。每次线程被唤醒时,它会尝试锁定互斥锁,这可能与其他线程竞争,对性能产生较大影响。虽然底层的 `wait()` 操作很少会虚假唤醒,但我们实现的条件变量中,`notify_one()` 可能会导致多个线程停止等待。 例如,当一个线程即将进入睡眠状态,刚加载了计数器值但还未入睡时,调用 `notify_one()` 会阻止该线程入睡,同时还会唤醒另一个线程,这两个线程会竞争锁定互斥锁,浪费处理器时间。 解决这个问题的一种相对简单的方法是跟踪允许唤醒的线

Rust应用中的日志记录与调试

### Rust 应用中的日志记录与调试 在 Rust 应用开发中,日志记录和调试是非常重要的环节。日志记录可以帮助我们了解应用的运行状态,而调试则能帮助我们找出代码中的问题。本文将介绍如何使用 `tracing` 库进行日志记录,以及如何使用调试器调试 Rust 应用。 #### 1. 引入 tracing 库 在 Rust 应用中,`tracing` 库引入了三个主要概念来解决在大型异步应用中进行日志记录时面临的挑战: - **Spans**:表示一个时间段,有开始和结束。通常是请求的开始和 HTTP 响应的发送。可以手动创建跨度,也可以使用 `warp` 中的默认内置行为。还可以嵌套

Rust项目构建与部署全解析

### Rust 项目构建与部署全解析 #### 1. 使用环境变量中的 API 密钥 在代码中,我们可以从 `.env` 文件里读取 API 密钥并运用到函数里。以下是 `check_profanity` 函数的代码示例: ```rust use std::env; … #[instrument] pub async fn check_profanity(content: String) -> Result<String, handle_errors::Error> { // We are already checking if the ENV VARIABLE is set

React应用性能优化与测试指南

### React 应用性能优化与测试指南 #### 应用性能优化 在开发 React 应用时,优化性能是提升用户体验的关键。以下是一些有效的性能优化方法: ##### Webpack 配置优化 通过合理的 Webpack 配置,可以得到优化后的打包文件。示例配置如下: ```javascript { // 其他配置... plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('production') } }) ],

Rust数据处理:HashMaps、迭代器与高阶函数的高效运用

### Rust 数据处理:HashMaps、迭代器与高阶函数的高效运用 在 Rust 编程中,文本数据管理、键值存储、迭代器以及高阶函数的使用是构建高效、安全和可维护程序的关键部分。下面将详细介绍 Rust 中这些重要概念的使用方法和优势。 #### 1. Rust 文本数据管理 Rust 的 `String` 和 `&str` 类型在管理文本数据时,紧密围绕语言对安全性、性能和潜在错误显式处理的强调。转换、切片、迭代和格式化等机制,使开发者能高效处理文本,同时充分考虑操作的内存和计算特性。这种方式强化了核心编程原则,为开发者提供了准确且可预测地处理文本数据的工具。 #### 2. 使