更新时间:2025-11-08 15:57:03 编辑:丁丁小编
来源:点击查看
简介
注册即可参与,赢取价值60,000元的数字资产惊喜盲盒
NuCypher 是一个老牌项目,专注于为隐私保护应用提供基础设施,涵盖密钥管理、动态访问控制和安全计算。其中,代理重加密是其核心功能之一。本文将深入探讨 NuCypher 采用的代理重加密方法,他们称之为 Umbral,在西班牙语中意为“门槛”。
代理重加密与 Umbral 简介
Umbral 是一种门槛式代理重加密方法。要理解它,首先需要了解重加密的概念。在现代生活中,云存储服务被广泛使用,用于文件分享等。对于敏感数据,我们通常会先加密再上传,以确保服务提供商无法窃取或泄露。然而,加密后,如果想与使用不同密码的其他人分享,就需要创建多个副本。代理重加密将这个过程交给云服务提供商。上传一份加密文件后,服务提供商通过重加密生成针对不同接收者的加密副本,从而避免重复加密。
在这个流程中,可以分为三个角色:
- 加密方(Delegator)
- 解密方(Delegatee)
- 服务方(Proxy)
加密方提供一个重加密密钥 rk 给服务方,服务方利用加密方生成的密文 ca 和 rk 重新加密成给其他人的密文 cb。这个流程就是代理重加密。
代理重加密有三个关键属性:
- 方向性 (Directionality):如果服务方只能利用 rk 将 ca 转换为 cb,则称为单向 (unidirectional);如果可以反过来转换,则称为双向 (bidirectional)。我们希望代理重加密是单向的,以避免解密方使用其密钥生成密文后,被服务方与加密方共谋泄露明文。
- 跳数 (Number of Hops):如果服务方对于 ca,在具备不同 rk 的情况下(例如给 Bob 和 Charlie 的),可以分别生成对应的 ca,则称为多跳/多用 (multi-hop/multi-use);否则称为单跳/单用 (single-hop/single-use)。
- 交互性 (Interactivity):如果解密方的密钥不需要参与重加密密钥的生成流程,则称为非交互式 (non-interactive);否则为交互式 (interactive)。
Umbral 具有单向、多跳、非交互式的特性。此外,它还引入了非交互式零知识证明,以提供重加密的可验证性。
Umbral 的另一个特点是门槛式 (Threshold)。在之前的简介中,只有一个 Proxy。一旦这个 Proxy 出现故障,加密方和解密方就无法完成传递。因此,通过 Threshold 的设计,例如可以建立一个 t of N 的代理重加密会话,只要 N 个 Proxy 中有 t 个正常运作,就可以确保传递顺畅。
KEM/DEM Approach
Umbral 参考了美国国家标准协会提出的 ECIES-KEM,用到了 KEM/DEM Approach 方法。KEM/DEM Approach 是一种混合加密方式,通过混合非对称与对称加密,提供足够的安全性和加解密效率(非对称的加解密通常较为耗能)。KEM(Key Encapsulate Mechanism,密钥封装机制)会先产生一个对称加密的密钥,再通过 DEM(Data Encapsulate Mechanism,数据封装机制)将传递的数据加密。
Shamir's Secret Sharing
Umbral 中的 Threshold 特性通过 Shamir's Secret Sharing 的方式来实现。
Implementation
https://github.com/nucypher/pyUmbral
Umbral 如何运作
这里的 Alice 是 Delegator,Bob 是 Delegatee。首先,Alice 通过 Encapsulate 生成对称密钥 K 和 Capsule。这个 Capsule 包含了让 Bob 拿到 K 的信息。接着,Alice 会对 Bob 产生 N 个 kFrag 并发送给 Proxy 们。Proxy 拿着 Capsule 和 kFrag 就可以产生 cFrag 并发送给 Bob。Bob 拿到 t 个 cFrag 就可以用自己的密钥重组并解密出 K。
产生公开参数
首先会先产生一组 Parameter: 其中 G 是一个 order 为质数 q 的循环群,g 和 U 则是在 G 上的两个 Generator。H2, H3, H4 则是作为随机数产生器哈希函数。KDF 是 Key Derivation Function,将用这个来产生对称密钥。q 和 KDF 的输出长度是这个协议的安全性参数。
KeyGen
Alice 会产生自己的非对称密钥对 (pk, sk) = (g^a, a),接着产生提供给 Proxy 的 kFrag。产生 kFrag 的步骤如下:
- Alice 会选择一个暂时的非对称密钥对,这里可能是考虑 Alice 和 Bob 会需要建立不只一次协议
- 将这个密钥对和 Bob 做非互动式 Diffie-Hellman 密钥交换,计算
- 依照 Shamir's Secret Sharing 的方式,产生一个 t-1 次的多项式 f,其中秘密 f_0 = a \cdot d^{-1} \bmod q f0=a⋅d−1modq
- 计算共有的
- 产生 N 个 kFrag:
- 5.1 选取随机数
- 5.2 计算 Shamir's Secret Sharing 上的点
- 5.3 计算 Re-encrypt Key
- 5.4 计算 Commitment
- 5.5 组合成 kFrag
在产生 kFrag 中,论文有提到,z1, z2 这两个是作为验证用的。在官方实现上,是让 Alice 对 kFrag 加上 pkA, pkB 做签名来提供验证功能。由于这两个没有参与后面的运算,这里选择略过。
产生 Capsule
Alice 会选择两个随机数 r, u 并包装成。对称密钥则通过得出,任何人收到 Capsule 都可以通过去检验 E, V 的正确性。而 Alice 可以拿 Capsule 和 Private Key a 去取回。
重加密与解密
Proxy 拿到 Capsule 和 kFrag 后,就可以产生 cFrag:。同时还会产生 NIZK 证明:
这可能是基于 NuCypher 设计 Stake 机制,通过这个 NIZK,网络可以通过计算验证这个 Proxy 有没有正确的计算,而无需取得
Bob 搜集足够的 cFrag 后,就可以来做解密,步骤如下:
- 计算(即 KeyGen 4. 于 Bob 方的运算)和 d=(即 KeyGen 2. 于 Bob 方的运算)。
- 对每个 cFrag 计算对应的 si 与
- 计算
- 计算
这边用我自己比较好理解的方式去写,所以可能有点 Bug。其中如果把 E 展开,可以得到,这里做的就是前面 KeyGen 5. 通过 Shamir's Secret Sharing 的还原。套回 4. 后可以看出他与产生 Capsule 一节中最后的相同,从而使 Alice 与 Bob 共享这个 Key。
传递密文
最后再使用 KEM/DEM Approach 的方式来传递密文就可以达成完整的 Re-Encryption。原先产生 Capsule 时,会同时产生密文,并传递 ) C=(Capsule,encData),当 Bob 拿到时先解出 K 再 message = SymDecrypt(encData) 即可。
立即前往 获取更多信息。立即前往 下载应用。