2016-09-14 111 views
0

我想制作一个Web应用程序,用户可以在这个平台上用用户名和密码登录(我想制作一个MySQL数据库来盯住用户名和密码)。Charm加密的Web应用程序

当用户登录后,他从他的计算机中选择一个文件并在服务器上发送该文件。

我想要加密这个文件给一组用户(我想用Charm Crypto使用HybridABE加密技术)。

现在我有这些架构/编程问题。

假设我们有这样的计划:

from charm.toolbox.pairinggroup import PairingGroup,GT 
from charm.adapters.abenc_adapt_hybrid import HybridABEnc as HybridABEnc 
from charm.schemes.abenc.abenc_waters09 import CPabe09 

group = PairingGroup('SS512') 
cpabe = CPabe09(group) 

hyb_abe = HybridABEnc(cpabe, group) 

policy = '((ONE or THREE) and (TWO or FOUR))' 

msg = "hello world this is an important message." 

(master_secret_key, master_public_key) = hyb_abe.setup() 

attr_list = ['THREE', 'ONE', 'TWO'] 

secret_key = hyb_abe.keygen(master_public_key, master_secret_key, attr_list) 

cipher_text = hyb_abe.encrypt(master_public_key, msg, policy) 

decrypted_msg = hyb_abe.decrypt(master_public_key, secret_key, cipher_text) 

我在哪里可以节省主私钥和主公开密钥?在像文件一样的目录服务器上?在数据库上?

我在哪里可以保存用户的密钥?

回答

0

基于属性的加密系统通常只创建一次,只有一个主密钥和公钥对。

  • 主密钥存储在生成用户密钥的服务器上。由于通常只有一个主密钥,您甚至可以生成它并将其放入服务器代码的源代码中。当然,你可以将它包含在服务器数据库中。
  • 用户密钥必须提供给用户。请记住为用户提供某种(公共)标识符以及用户密钥,以便您可以管理某个用户在服务器端拥有的属性列表。否则,当您尝试更新属性时,您会头痛,因为您需要使用新的用户密钥与用户联系。
  • 主公钥(通常称为“公共参数”或简称“公钥”)是公开的。将它包含在您提供给用户的包中是一个好主意。您也可以创建一个API端点,以便感兴趣的“用户”可以向您的服务器询问公钥。
+0

简单明了。有一件事:当你说用户密钥必须给予用户时,你如何发送这些密钥?以及您如何/在哪里可以存储这些密钥?你能给我一个第二点的例子吗? – JLo

+1

密钥通常由多个值组成(例如配对组的元素)。这些可分别序列化为字节和Charm提供[必要的功能来执行此操作](http://stackoverflow.com/a/34447301/1816580)。现在,面临的挑战是将多个序列化值放入(文件)格式。有无数的方法来做到这一点。你可以将序列化的值放入一个不同的对象,只使用本地Python类型,然后[pickle it](https://docs.python.org/2/library/pickle.html)。你可以编写自己的文件格式。你可以使用类似Protobuf的东西。 –

+0

你能解释一下用户如何用主公钥加密数据客户端?我正在开发一个Web应用程序,我不知道如何使用从Charm Crypto(服务器端)发布的密钥来加密数据。我可以使用JavaScript吗? (客户端我不能使用Pyhton,因为它是一个Web应用程序)。感谢巡演支持。 – JLo