Android 加密firestore数据

Android 加密firestore数据,android,encryption,google-cloud-firestore,Android,Encryption,Google Cloud Firestore,我想加密存储在Firestore数据库中的数据。假设您使用从用户密码派生的256位AES密钥加密数据,并使用单个Google KMS密钥加密AES密钥 这够了吗?或者我们需要在本地使用某种私有的公共密码库,比如RNCryptor 在我的例子中,我的所有应用程序数据都存储在Firestore中,并具有支持的云功能(node.js)。大量用户数据需要加密 每个用户在登录时都会以这种方式在下面生成一个唯一的AES密钥。密钥将在他们第一次登录或注册时生成,使用KMS密钥进行加密后的AES密钥将保存在Fi

我想加密存储在Firestore数据库中的数据。假设您使用从用户密码派生的256位AES密钥加密数据,并使用单个Google KMS密钥加密AES密钥

这够了吗?或者我们需要在本地使用某种私有的公共密码库,比如RNCryptor

在我的例子中,我的所有应用程序数据都存储在Firestore中,并具有支持的云功能(node.js)。大量用户数据需要加密

每个用户在登录时都会以这种方式在下面生成一个唯一的AES密钥。密钥将在他们第一次登录或注册时生成,使用KMS密钥进行加密后的AES密钥将保存在Firestore中。当需要解密时,KMS密钥将用于解密AES密钥,然后使用它

String password  = "password";
int iterationCount = 1000;
int keyLength = 256;
int saltLength = keyLength / 8; // same size as key output

SecureRandom random = new SecureRandom();
byte[] salt = new byte[saltLength];
randomb.nextBytes(salt);
KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,
                    iterationCount, keyLength);
SecretKeyFactory keyFactory = SecretKeyFactory
                    .getInstance("PBKDF2WithHmacSHA1");
byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] iv = new byte[cipher.getBlockSize());
random.nextBytes(iv);
IvParameterSpec ivParams = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, ivParams);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes("UTF-8"));
(代码参考:)

只有一件事,在我的用例中,没有终端用户端应用程序和服务提供商应用程序的概念。只有一个应用程序、firestore后端和由node.js支持的服务器端云功能。我想看看我是否能制造出一个不受黑客攻击的强大系统来存储加密的内容(防止管理员也使用控制台仪表板查看相同的内容——用于私有数据)。我将确保谷歌KMS密钥不能直接访问,但它将保存在另一个用户帐户

“KMS密钥属于Firebase数据库的另一个Google帐户,因此没有一个用户(例如我)拥有读取和解密数据的权限。黑客需要破坏这两个帐户才能访问未加密的数据。”


策略参考

通常不必这样做,因为它是自动加密的。


它已经没有裂缝了

我从谷歌Firebase支持团队得到的官方回复:

目前,对Firebase的自定义访问(例如访问Firestore、RTDB) 尚不支持,但要求很高的功能。还有,你可以 要知道,Firestore客户端SDK不具备加密功能。所以 做额外的加密不会有什么坏处(我不能建议你这么做) 这部分)。此外,必须有严格的安全规则


同意,但如果你看到我的问题,我也会阻止管理员阅读。今天,firestore控制台使您能够查看所有客户数据。你如何防止这种情况发生。我想知道加密是否能帮上忙。然后,额外的Google KMS密钥将加密用于加密Google Firestore控制台中可见内容的密钥。从同一链接“服务器端加密可与客户端加密结合使用。在客户端加密中,您管理自己的加密密钥,并在将数据写入云Firestore之前对其进行加密。在这种情况下,您的数据将被加密两次,一次使用您的密钥,一次使用Google的密钥。”