分布式密钥管理服务:nucypher演示
1.工作流程
- Alice: Alice有些想要共享的数据,通过为数据分类(label)生成非对称密钥(公钥发送给Enrico用于数据加密,私钥+bob的公钥配合用于生成重加密密钥),将重加密密钥切分成n个片段,放于Nucypher网络节点。
- Enrico:数据产生并且加密,Enrico产生一个随机的对称密钥,用对称密钥对数据进行加密,然后使用Alice提供的公钥对对称密钥进行加密,将加密的数据和加密的对称密钥,存放于分布式存储中。
- Bob:从分布式存储中拿到Alice存储的数据(加密的数据和加密的密钥);从n个Nucypher网络节点中取得m个代理重加密密钥片段,组合生成代理重加密密钥(阈值门限加密算法);Bob就可以用自己的私钥对加密的密钥进行解密,解密后拿到数据加密用的对称密钥,即可解密得到数据。
- Ursula: ursula节点是nucypher网络中的节点,通过多个ursula节点完成阈值代理重新加密操作。
本例使用四个节点分别模仿alice,bob,enrico和ursula。
2.本例目的
alice有一些数据,想要发送给一个或一些bob,这些数据可以假设是由enrico产生的。但是alice并不想直接使用bob的公钥对数据进行加密,因为下次alice想要把数据发送给另一个bob时,alice需要用另一个bob的公钥对数据再次进行加密,不仅浪费存储资源还浪费计算资源。所有引入了一个第三方代理重加密节点,即ursula。alice通过对bob进行授权,设置策略公钥(基于过期时间、标签分类等策略)。alice不用每次都用bob的公钥加密,但是bob可以通过自己私钥对数据进行解密。
本例中通过简单的一个ursula节点,对数据进行重加密,bob可以拿到alice的数据。
3.操作流程
3.1系统环境
ubuntu20.04
python3.8.2
nucypher 3.0.0-beta.0
3.2节点运行
分别打开四个终端,进入nucypher工作的虚拟环境。
3.2.1 运行ursula节点
(my_nucy_env) aha@aha:~/Desktop/nucypher$ nucypher ursula run --dev --federated-only --console-logs
这一步至关重要,因为后续的alice,bob,enrico的运行都要使用ursula提供的服务。
运行后可以看到如下界面
3.3.2 运行alice节点
(my_nucy_env) aha@aha:~/Desktop/nucypher$ nucypher alice run --dev --federated-only --teacher localhost:10151 --console-logs
运行后显示如下。在这里可以看到Alice_Verifying_Key。
3.3.3 运行enrico节点
在运行enrico之前,我们需要拿到alice给enrico分配的策略密钥。
在这里我们使用python+jupyter进行演示如何拿到策略加密密钥。
alice = "http://localhost:8151"
Alice_Verifying_Key = "03bebf3d9631d53c4797be3246c49dcc213b2cb3843abf35449430030e7c7339b6"
derivation_response =