登录
首页 > 文章列表 > NuCypher Umbral:代理重加密技术详解

更新时间:2025-11-08 15:57:03 编辑:丁丁小编
来源:点击查看

简介

注册即可参与,赢取价值60,000元的数字资产惊喜盲盒

NuCypher 是一个老牌项目,专注于为隐私保护应用提供基础设施,涵盖密钥管理、动态访问控制和安全计算。其中,代理重加密是其核心功能之一。本文将深入探讨 NuCypher 采用的代理重加密方法,他们称之为 Umbral,在西班牙语中意为“门槛”。

代理重加密与 Umbral 简介

Umbral 是一种门槛式代理重加密方法。要理解它,首先需要了解重加密的概念。在现代生活中,云存储服务被广泛使用,用于文件分享等。对于敏感数据,我们通常会先加密再上传,以确保服务提供商无法窃取或泄露。然而,加密后,如果想与使用不同密码的其他人分享,就需要创建多个副本。代理重加密将这个过程交给云服务提供商。上传一份加密文件后,服务提供商通过重加密生成针对不同接收者的加密副本,从而避免重复加密。

在这个流程中,可以分为三个角色:

加密方提供一个重加密密钥 rk 给服务方,服务方利用加密方生成的密文 ca 和 rk 重新加密成给其他人的密文 cb。这个流程就是代理重加密。

代理重加密有三个关键属性:

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 的步骤如下:

  1. Alice 会选择一个暂时的非对称密钥对,这里可能是考虑 Alice 和 Bob 会需要建立不只一次协议
  2. 将这个密钥对和 Bob 做非互动式 Diffie-Hellman 密钥交换,计算
  3. 依照 Shamir's Secret Sharing 的方式,产生一个 t-1 次的多项式 f,其中秘密 f_0 = a \cdot d^{-1} \bmod q f0​=a⋅d−1modq
  4. 计算共有的
  5. 产生 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 后,就可以来做解密,步骤如下:

  1. 计算(即 KeyGen 4. 于 Bob 方的运算)和 d=(即 KeyGen 2. 于 Bob 方的运算)。
  2. 对每个 cFrag 计算对应的 si 与
  3. 计算
  4. 计算

这边用我自己比较好理解的方式去写,所以可能有点 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) 即可。

立即前往 获取更多信息。立即前往 下载应用。

热门文章