使用Firebase加密敏感数据

时间:2019-01-15 11:18:47

标签: java android firebase encryption firebase-realtime-database

简而言之,我的问题是:仅为会话保留用户密码是否不好?

长话短说:我正在编写一个Android应用程序,该程序将我所有的密码存储在Firebase数据库中。密码必须在设备之间同步,也就是说,如果我从其他智能手机或网站登录(使用Firebase身份验证),则可以读取所有已存储的密码(我必须记住突出显示的主密码)。这对我有用,但是如果我想与一些朋友分享我的应用程序,我可以阅读他们的密码,这是不正确的。因此,我开始在Internet上搜索一种加密密码的方法,然后在Firebase上存储(加密)密码。

我读过 https://hackernoon.com/client-side-encryption-in-firebase-database-60dd55abadb2http://www.geero.net/2017/05/how-to-encrypt-a-google-firebase-realtime-database/ 但仍然无法获得加密/解密密码的对称密钥的存储方式和位置。

我已经考虑过这种解决方案:当用户使用其主密码登录时,将密码保存在Singleton中;当他想存储新密码时,请使用该密钥对密码进行加密(使用AES libraby)。因此,在Firebase中,我无法读取密码或朋友的密码。在该活动中,用户可以实时读取所有加密的密码,并可以解密和使用密码(从AES中检索对称密钥并使用AES库解密密码)。

此解决方案的缺点是用户必须始终在每个会话中登录,这样我才能在Singleton中保留其密码。这是一个不好的方法吗?安全吗?我可以避免每次登录时都将主密码保存在Android Keystore中并使用它。当用户更换智能手机时,则在下一次登录时更新Android Keystore中的密钥。这可能适用于Android智能手机,但不适用于网站(那里没有安全的地方)。

其他方法是:

  • 使用一些非对称加密并将私钥存储在用户的设备中,并将公钥(以及加密的密码)存储在Firebase中。这样,由于私钥在设备上,因此设备(例如智能手机和网站)之间没有同步。
  • 保存未加密的密码,但我可以阅读它们。我不喜欢这种方式。

注意:我知道有很多应用程序可以执行此操作,但是我想使用自己的应用程序。

谢谢大家,对不起我的英语。

0 个答案:

没有答案