web-dev-qa-db-fra.com

Correc façon d'effectuer un cryptage à deux voies sécurisé sur un site Web

Je travaille actuellement un projet qui me demande de stocker des informations sensibles (principalement des mots de passe et d'autres informations) sur un serveur Web via un site Web standard Python/Flack. Ces informations doivent être partagées avec un nombre x d'autres personnes sur le système où ils peuvent déchiffrer et voir les informations.

Idéalement, j'aimerais effectuer tout le cryptage du côté du client et conserver le serveur stocker les données cryptées de manière à ce que le serveur ne soit jamais capable de déchiffrer ces données.

J'avais initialement envisagé un système similaire à celui de LastPass, mais avec la possibilité de partager les mêmes données avec d'autres utilisateurs à être déchiffrés et considérés par eux, je ne peux pas penser à un moyen de travailler.

Est-ce possible?

[Édité pour ajouter plus d'informations]

Le projet que je travaille est en fait une application de mot de passe/gestion de l'information principalement ciblée lors des entreprises souhaitant gérer leurs mots de passe/informations internes pour Say Server Access ou Software Systems avec des comptes simples. Je ne pense pas qu'il soit possible de fournir aux utilisateurs les clés à utiliser à l'extérieur du système. J'espérais que le mot de passe des utilisateurs ou peut-être que la clé individuelle soit suffisante pour déchiffrer les données détenues dans le système, mais avoir la capacité de chiffrer les données afin que toute clé d'utilisateurs puisse la déchiffrer. Je pense que cela pourrait ne pas être possible.

5
nullabletype

Fondamentalement, vous devez chiffrer les données que vous souhaitez protéger à l'aide d'une clé symétrique (E.G. Touche AES). Cette clé n'est connue que du groupe des utilisateurs autorisés à accéder aux données cryptées sur le serveur.

La clé que vous avez utilisée pour chiffrer les données ne doit pas être stockée sur le serveur. Le cryptage et le déchiffrement se produisent du côté du client à l'intérieur du navigateur Web client. Il existe de nombreuses bibliothèques JavaScript qui implémentent l'algorithme AES.

La partie la plus difficile est la manière dont vous pouvez partager la clé de cryptage entre les utilisateurs. De plus, si le même utilisateur partage une partie de ses données avec deux groupes d'utilisateurs différents, il peut être nécessaire d'utiliser différentes clés de cryptage pour chaque groupe. Notez que vous ne voulez pas toucher pour être connu sur le serveur

Alors, comment pouvons-nous faire ça. Il existe deux options pour la distribution de clé:

  1. Utilisez le socket Web pour partager la clé entre le groupe d'utilisateurs à l'aide de la connexion P2P. Les clés peuvent être stockées cryptées à l'aide du stockage Web HTML5 dans chaque navigateur d'utilisateurs.
  2. Chaque utilisateur a une paire de clé RSA où sa clé publique est stockée sur le serveur. Ensuite, pour l'utilisateur A de partager une clé AES avec l'utilisateur B. Utilisateur Un utilisateur de téléchargement B Key BLOW et chiffrer la clé AES à l'aide de la clé publique UESR B. Ensuite, il télécharge la touche AES cryptée sur le serveur. Utilisateur B Ils téléchargent la clé d'AES cryptée et la déchiffrent à l'aide de sa clé privée. Ensuite, il peut utiliser la clé d'AES cryptée pour accéder à l'utilisateur une donnée.

Voir, le défi technique de votre système est de savoir comment gérer les clés de cryptage et la gestion des groupes d'utilisateurs.

Vous devez prendre des avantages du stockage Web HTML5 pour stocker les touches AES simplement attribuer à chaque utilisateur une phrase secrète et utilisez cette phrase secrète pour générer une clé de maître AES que vous pouvez utiliser pour chiffrer toutes les clés du stockage Web et d'autres données sensibles sur le. côté client.

Remarque: le problème principal ici si l'utilisateur perd la clé de cryptage. Dans ce cas, il est possible qu'il ne puisse pas ne pas récupérer les données cryptées sur le serveur.

Si vous postez plus de détails sur vos exigences de votre projet, nous pourrions peut-être vous donner une meilleure solution et peut-être un simple.

6
Ubaidah