web-dev-qa-db-fra.com

Comment chiffrer les données utilisateur dans Firebase

J'utilise la méthode de connexion par e-mail/mot de passe pour Firebase. Je voudrais crypter les données que les utilisateurs sauvegardent dans la base de données en temps réel avant de les envoyer à la base de données. Firebase gère déjà le mot de passe de l'utilisateur, mais puis-je l'utiliser d'une manière ou d'une autre pour crypter des données qui ne peuvent être décryptées par moi que le client? Ce serait bien si je pouvais y arriver avec le client sdk.

Donc, mon flux serait quelque chose comme ceci:

  1. L'utilisateur se connecte avec ses informations d'identification (qui sont gérées par Firebase lui-même)
  2. L'utilisateur crypte certaines données avec une clé unique, qui ne peut être générée qu'à partir des informations d'identification ou à partir de certaines données disponibles uniquement pour l'utilisateur, mais pas moi. (cette clé doit être persistante entre les sessions ou après que l'utilisateur a changé son mot de passe.)
  3. Les données sont enregistrées dans la base de données (je ne peux pas les lire car elles sont cryptées avec les informations d'identification de l'utilisateur)
  4. L'utilisateur se connecte sur un autre appareil (la clé de déchiffrement peut être générée immédiatement et les données peuvent être déchiffrées.)
23
NoNameProvided

Vous pouvez facilement le faire de la manière suivante:

  1. Une fois que l'utilisateur A s'est connecté, une paire de clés privées publiques aléatoires est générée sur son téléphone. ex.: utiliser Ecc Curve25519
  2. La clé privée de A est stockée en toute sécurité sur son téléphone
  3. La clé publique de A est stockée dans Firebase et est accessible à toute personne qui discute avec A.
  4. Si X envoie un message à A, il récupère la clé publique de A à partir de Firebase crypte le message pour A localement et stocke le message crypté sur Firebase dans la boîte de réception à partir de A
  5. A télécharge le message crypté à partir de Firebase et le déchiffre avec sa clé privée stockée sur son téléphone

(vice versa pour A à X)

Si A veut passer à un autre téléphone ou souhaite utiliser plusieurs téléphones, vous pouvez procéder de cette façon:

  1. Demandez à A de définir un mot de passe fort pour crypter sa clé privée stockée localement. (ou créez une phrase secrète aléatoire et utilisez des codes QR pour l'échange de clés)
  2. Cryptez la clé privée localement (par exemple: utilisez AES256) sur son téléphone avec le mot de passe de l'étape 1 et téléchargez-la sur Firebase. (signe facultatif avec sa clé privée)
  3. Téléchargez la clé privée chiffrée du deuxième appareil depuis A
  4. Demandez la phrase secrète sur le deuxième appareil de A et stockez la clé privée en toute sécurité (vérifiez en option la signature avec la clé publique de A)
  5. Supprimez la clé privée chiffrée de Firebase si aucune sauvegarde n'est souhaitée
20
Hollerweger