web-dev-qa-db-fra.com

Est-il nécessaire de crypter les messages de discussion avant de les stocker dans Firebase?

Pour autant que je sache, Firebase envoie des données via une connexion HTTPS, de sorte que les données sont déjà cryptées. Bien que Firebase fournisse des règles de sécurité pour protéger ma structure de données, je peux toujours voir les messages de chaîne dans la base de données.

Je suis simplement curieux de savoir si c'est une bonne idée de chiffrer les messages avant de pousser les données vers Firebase ou non. Dois-je simplement passer de ce sujet à autre chose?

Je vous remercie.

13
JeffMinsungKim

Vous semblez avoir une bonne compréhension du fonctionnement de la base de données Firebase: le les données sont chiffrées en transit , et c'est stocké sur des disques chiffrés sur les serveurs . Si vous activez la persistance locale sur l'appareil, le sur les données de l'appareil n'est pas chiffré .

Mais les administrateurs de l'application peuvent voir les données dans la console Firebase. Si votre application exige que les administrateurs ne puissent pas lire ces données, vous devrez les crypter sur le client avant de les envoyer à Firebase. Il y a quelque temps, un développeur a expliqué son chat chiffré de bout en bout sur la liste de diffusion Firebase-talk .

14
Frank van Puffelen

Hey Jeff: vous avez raison de dire que lorsque vous écrivez des données dans Firebase/Firestore, les données:

  1. Est protégé sur le fil à l'aide de HTTPS.
  2. Ensuite, quand il atterrit sur le serveur frontal Firebase REST, HTTPS se termine et le serveur a accès à la charge utile complète
  3. Ensuite, le serveur REST achemine les données vers le backend/la base de données, qui a également accès aux données.
  4. Lorsque les données sont écrites sur le disque, elles sont chiffrées au repos, mais les clés de chiffrement au repos sont également disponibles pour Google et vos administrateurs verront également le contenu de Firestore

Le chiffrement côté client des données (chiffrement de bout en bout) interdit à tous ces participants/rôles de voir vos données.

Le chiffrement des données côté client est assez simple (la compatibilité entre les plates-formes mobiles et les navigateurs est délicate). L'autre partie délicate est la gestion des clés pour permettre à un utilisateur d'accéder à la clé de déchiffrement sans que l'autre utilisateur n'envoie la clé dans un canal non sécurisé.

La façon dont vous pouvez implémenter ceci est:

  1. Créez des clés privées et publiques pour vos utilisateurs lorsque vous les inscrivez
  2. Chiffrer les données sur le périphérique de l'utilisateur 1 avec la clé publique de l'utilisateur 2
  3. Écrire les données cryptées dans Firestore
  4. Lorsque user2 lit les données chiffrées, sa clé privée pourra les déchiffrer.

Découvrez cet exemple de discussion Firebase E2EE sur GitHub pour iOS: https://github.com/VirgilSecurity/demo-firebase-ios et Android: https://github.com/VirgilSecurity/demo-firebase-Android

HTH, David

6
David Szabo