golang 实现代理重加密 源码

关于代理重加密

    代理重加密是一组算法,它允许半可信代理将密文从一个加密转换到另一个加密,而无需接触到底层明文的任何内容。为此,Alice(原始数据拥有者)创建了一个称为“重加***”的特殊**,允许代理转换密文,从而使Bob可以在被称为“重加密”的过程中打开它们。


    代理重加密非常适合用于在要与多方共享加密的数据使用场景,就不需要再与收件人共享私有的**,也不需要为每个收件人都加密整个消息后再进行代理。该加密让用户仅需要进行一次加密操作,随后可以根据收件人的公钥对其进行授权。这样一来,就不必要求所有数据所有者都同时在线,并且还可以轻松撤消某人的访问权限,也可以根据指定的条件来管理访问(例如,限制访问时间)。

golang 实现代理重加密 源码

Umbral:一种新的代理重加密方案


    借助于Umbral,Alice(数据拥有者)可以通过由一组N个半可信代理执行的重新加密过程,将解密的权限授权给Bob(在NuCypher KMS的术语中,称为“Ursulas”)。当这些代理(至少为M个,至多为N个)通过执行重加密操作参与进来时,Bob能够使用自己的私钥解密出原始邮件。Umbral是门限密码系统(Threshold Cryptosystem)的一种,因为重新加密过程必须要N个Ursula中的M个参与其中。


    根据另一个技术说明中所述,Umbral受到了ECIES( https://en.wikipedia.org/wiki/Integrated_Encryption_Scheme )和BBS98( https://link.springer.com/chapter/10.1007/BFb0054122 )代理重加密方案的启发,并且进行了一些改进。其中包括,使用了非交互式零知识(NIZK)证明来验证重加密的正确性,以确保KMS节点不会进行欺骗。Umbral的门限功能使用了Shamir秘密共享的思路,让重加密过程成为一个分布式的过程。
在技术文档中,可以查阅更详细的Umbral规范。
 

golang 实现代理重加密 源码

 

    当前只有python版本的代码实现,但基于其python的兼容性等特性,在实际生产环境中使用并不十分方便,以及当前区块链系统大部分采用golang实现,如果双方结合golang代码将更具备可用性,因此,本代码实现采用umbral论文理论设计,而使用纯golang语言实现。