文章来源:互联网 发布时间:2023-03-28 22:25:00
NuCypher是一个长期的项目,最重要的目标是为隐私保护的APP应用提供基础设施,包括安全管理、动态访问控制和安全计算。 其中使用的代理再加密功能。 本文介绍了NuCypher使用的代理重新加密方法。 他们被命名为Umbral,在西班牙语中是Threshold的意思。
:
Umbral是一种基于门槛的代理重新加密方法,首先需要了解什么是重新加密。 在现代生活中,云驱动器大概是大多数人使用的服务,也经常用于文件共享等。 今天如果需要向朋友提供文档,我们通常会上传并创建链接,但更敏感的资料可能需要加密后再上传,以防服务商窃取或泄露该资料。 但是,如果加密后想提供给别人,但密码不同,就需要制作很多副本。 代理重新加密将此过程交给云服务商,上传加密文件后,这些服务商通过重新加密生成给不同人的加密副本,可以避免重复加密。
在上面的过程中,可以分为以下三个角色。
加密端( Delegator )
解码方( Delegatee ) ) ) ) ) )。
服务器端( Proxy ) ) ) )。
加密方向服务器提供再加密密钥rk,服务器可以使用加密方生成的密文ca和该rk再加密为他人的密文cb,该过程称为代理再加密。
重新加密代理有三个属性。
Directionality :如果服务器只能利用rk将ca转换为cb,则称为unidirectional;反之,则称为bidirectional。 在代理的再加密中,他希望unidirectional在解密者用他/她的密钥生成密文之后防止被服务者与加密者共谋泄露其中的明文。
Number of Hops :在服务器端对于ca具有不同rk的情况下,例如能够生成与Bob和Charlie分别对应的ca的情况下,称为multi-hop/multi-use,否则称为single-hop
Interactivity :如果解密密钥不需要参与重新加密密钥的生成过程,则称为非间隔;否则称为间隔。
在这三个属性中,Umbral为unidirectional、multi-hop和non-interactive,并引入了非交互式零知识证书以提供重新加密的验证性。
另一方面,Umbral的另一个特征是他是Threshold,在以前的个人资料中只有一个代理,如果这个代理发生故障,则其加密方和解密方就不能完成传送,因此,例如,可以建立t of N的代理再加密会话
:
Umbral参考了美国国家标准协会提出的ECIES-KEM,使用了一种叫做KEM/DEM Approach的方法。 KEM/DEM Approach是一种混合加密方法,通过混合使用非对称加密和对称加密来提供足够的安全性和解密效率。 非对称加密通常消耗较高的电力。 KEM Key Encapsulate Mechanism生成对称加密密钥,并对通过DEM Data Encapsulate Mechanism传递的数据进行加密。
:
Umbral的Threshold特性为Shamir&; #039; 通过s Secret Sharing方式实现。
:
3359 github.com/nucypher/py 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进行解密。
:
首先生成参数组。
这里,g是order为素数q的循环群,g和u是g上的两个Generator。 H2,H3,H4是作为随机数发生器的散列函数。 KDF是Key Derivation Function,用于生成对称密钥。 q和KDF的输出长度是这个协议的安全参数。
:
爱丽丝生成自己的非对称密钥对
( pk,sk )=)在g^a,a )之后,生成提供给Proxy的kFrag。 要生成kFrag,请执行以下操作:
Alice选择临时非对称密钥对。 在这里,Alice和Bob可能认为需要建立多个协议
交换和计算该密钥对和bob的非交互式Diffie-Hellman密钥
Shamir&; #039; 通过s Secret Sharing的方式,生成t-1次多项式f,其中秘密f _0=a\cDOTd ^ {-1 }\bmodqf0=ad1 modq
计算共享
生成n个kFrag :
5.1选择随机数5.2以选择Shamir&; #039; 计算s Secret Sharing上的点计算5.3re-encryptkey5.4计算Commitment5.5并结合到kFrag
在生成kFrag的过程中,根据论文,z1、z2这两个是用于验证的,在正式安装中,是让Alice在kFrag上签名pkA、pkB来提供验证功能的,但是因为这两个与之后的运算无关,所以我们决定忽略。
:
Alice选择两个随机数r、u进行包装。 对称密钥表明,任何收到Capsule的人都可以验证e、v的正确性。 Alice可以去拿Capsule和私有密钥a。
:
Proxy拿到Capsule和kFrag后,就可以生成cFrag。 它还将生成NIZK证书。
这可能是基于NuCypher设计了Stake机制。 在此NIZK中,网络可以通过计算验证此代理是否进行了正确的计算。 没有必要取得
Bob在收集到足够的cFrag后,可以进行解密。 步骤如下。
计算(即KeyGen 4.在Bob侧的运算)和d=(即KeyGen 2.在Bob侧的运算)。
与每个cFrag对应的si
与
计算
这里用我自己容易理解的方法写,所以可能会有一点漏洞。 在其中展开e,就会得到。 这里是之前KeyGen 5.的Shamir&; #039; 使用s Secret Sharing进行恢复。 如果嵌入4 .你会发现他和产生Capsule的节的最后一个一样,Alice和Bob可以共享这个Key。
:
最后通过KEM/DEM Approach方式传递密文可以达到完整的Re-Encryption。 本来在Capsule发生的时候,同时发生密码文,被传递( c=(capsule,encData ) ),在Bob得到的时候解除k之后再传递message=symdecrypt ) encData )就可以了
4