Шифрование конфиденциальных данных с помощью Firebase - PullRequest
0 голосов
/ 15 января 2019

мой вопрос вкратце: это плохой подход к сохранению пароля пользователя только для сеанса?

Длинная история: я пишу приложение для Android, которое хранит все мои пароли в базе данных Firebase. Пароли должны синхронизироваться между устройствами, то есть, если я вхожу в систему (с помощью Firebase auth) с другого смартфона или с моего веб-сайта, я могу прочитать все свои сохраненные пароли (я должен запомнить только главный пароль). Это работает для меня, но если я хочу поделиться своим приложением с некоторыми друзьями, я мог бы прочитать их пароль, и это не правильно. Поэтому я начинаю поиск в Интернете способа шифрования пароля и сразу после этого сохраняю (зашифровываю) пароли в Firebase.

Я прочитал https://hackernoon.com/client-side-encryption-in-firebase-database-60dd55abadb2 и http://www.geero.net/2017/05/how-to-encrypt-a-google-firebase-realtime-database/ но все равно не получается как и где хранить симметричный ключ для шифрования / расшифровки пароля.

Я думал об этом решении: когда пользователь входит в систему со своим мастер-паролем, держите пароль внутри Singleton, а когда он хочет сохранить новый пароль, зашифруйте пароль этим ключом (используя некоторую библиотеку AES). Поэтому в Firebase я не могу читать свои пароли или пароли моих друзей. В действии пользователь в режиме реального времени может прочитать все свои зашифрованные пароли и может расшифровать и использовать пароль, извлекая симметричный ключ из Singleton и расшифровывая пароль (с помощью библиотеки AES).

Плохая сторона этого решения заключается в том, что пользователь должен всегда входить в систему каждый сеанс, чтобы я мог хранить его пароль в Singleton. Это плохой подход? Это безопасно? Я мог избежать входа в систему каждый раз, сохраняя мастер-пароль в Android Keystore и используя его. Когда пользователь сменит смартфон, то при следующем входе в систему обновите ключ в Android Keystore. Это может работать на смартфоне Android, но не на веб-сайте (там нет безопасных мест).

Отные подходы:

  • Использование некоторого асимметричного шифрования и сохранение закрытого ключа на устройстве пользователя и открытого ключа (и зашифрованного пароля) внутри Firebase. Таким образом, отсутствует синхронизация между устройством (например, смартфоном и веб-сайтом), поскольку на устройстве имеется закрытый ключ.
  • Сохраняйте незашифрованные пароли, но я могу их прочитать. Мне не нравится этот путь.

ПРИМЕЧАНИЕ: я знаю, что есть много приложений, которые делают это, но я хочу использовать свое собственное приложение.

Спасибо всем, извините за мой английский.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...