2016-09-14 1 views
0

Je suppose pour faire une application Web où les utilisateurs peuvent se connecter sur cette plate-forme avec nom d'utilisateur et mot de passe (je veux faire une base de données MySQL pour fixer nom d'utilisateur et mot de passe). Après que l'utilisateur est connecté, il sélectionne un fichier de son ordinateur et envoie ce fichier sur le serveurApplication Web avec charme Crypto

Je veux crypter ce fichier à un groupe d'utilisateurs (je veux utiliser la cryptographie HybridABE avec Charm Crypto).

Maintenant, j'ai cette question d'architecture/programmation.

Supposons que nous ayons ce programme:

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) 

Où puis-je enregistrer le maître clé privée et le Maître Public Key? Sur un serveur de répertoire comme le fichier? Sur la base de données?

Où puis-je sauvegarder la clé secrète de l'utilisateur?

Répondre

0

Un système de chiffrement basé sur les attributs est généralement créé une seule fois et ne comporte qu'une seule clé secrète principale et une paire de clés publiques.

  • La clé secrète principale est stockée sur le serveur qui génère les clés secrètes de l'utilisateur. Comme il n'y a généralement qu'une seule clé secrète principale, vous pouvez même la générer et la placer dans le code source de votre code serveur. Bien sûr, vous pouvez l'inclure dans la base de données du serveur.
  • Des clés secrètes utilisateur doivent être attribuées aux utilisateurs. N'oubliez pas de donner à vos utilisateurs une sorte d'identifiant (public) avec la clé secrète de l'utilisateur afin que vous puissiez gérer la liste des attributs qu'un certain utilisateur a du côté serveur. Sinon, vous aurez un mal de tête lorsque vous tenterez de mettre à jour des attributs, car vous devrez contacter les utilisateurs avec leur nouvelle clé secrète utilisateur.
  • La clé publique principale (généralement appelée «paramètres publics» ou simplement «clé publique») est publique. C'est une bonne idée de l'inclure dans le paquet que vous donnez à vos utilisateurs. Vous pouvez également créer un point de terminaison API afin que les «utilisateurs» intéressés puissent demander à votre serveur la clé publique.
+0

simplement et clair. Une chose: quand vous dites que les clés secrètes de l'utilisateur doivent être données à l'utilisateur, comment pouvez-vous envoyer ces clés? Et comment/où pouvez-vous stocker ces clés? Pouvez-vous me donner un exemple du point 2? – JLo

+1

Une clé consiste généralement en plusieurs valeurs (par exemple des éléments du groupe d'appariement). Ceux-ci sont séparément sérialisables en octets et Charm fournit les [fonctions nécessaires pour le faire] (http://stackoverflow.com/a/34447301/1816580). Maintenant, le défi consiste à mettre les multiples valeurs sérialisées dans un format (fichier). Il y a d'innombrables façons de le faire. Vous pouvez placer les valeurs sérialisées dans un objet différent qui n'utilise que des types Python natifs, puis [pickle it] (https://docs.python.org/2/library/pickle.html). Vous pouvez écrire votre propre format de fichier. Vous pourriez utiliser quelque chose comme Protobuf. –

+0

Pouvez-vous m'expliquer comment un utilisateur peut crypter le côté client de données avec la clé publique principale? Je suis en train de développer une application web, et je ne sais pas comment je peux chiffrer les données avec une clé sortie de Charm Crypto (côté serveur). Puis-je utiliser JavaScript? (Côté client, je ne peux pas utiliser Pyhton parce que c'est une application web). Merci pour le soutien de la tournée. – JLo