Я хочу зашифровать данные, хранящиеся в базе данных Firestore.Допустим, вы шифруете данные с помощью 256-битного ключа AES, полученного из пароля пользователя, и шифруете ключ AES с помощью одного ключа Google KMS.
Этого достаточно?Или нам нужно локально использовать некоторую частно-публичную циторографическую библиотеку, такую как RNCryptor.
В моем случае все данные моего приложения хранятся в Firestore и имеют поддерживающие облачные функции (node.js).Большая часть пользовательских данных должна быть зашифрована.
У каждого пользователя будет уникальный ключ AES, сгенерированный таким образом ниже при входе в систему.Ключ будет сгенерирован при их первом входе в систему - или при регистрации, а пост-шифрование ключа AES с использованием ключа KMS будет сохранено в самом 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"));
(ссылка на код: Статья "Использование шифрования на основе пароля на Android" )
Только одна вещь - понятие конечного пользователя отсутствуетприложение и приложение поставщика услуг в моем случае использования.Существует только одно приложение, серверная часть firestore и облачные функции на стороне сервера, работающие на node.js.Я пытаюсь выяснить, могу ли я создать надежную систему, свободную от взломов, для хранения зашифрованных файлов (не позволяйте администраторам просматривать то же самое, используя консоль для личных данных).Я буду гарантировать, что ключ Google KMS не будет доступен напрямую, но он будет сохранен в другой учетной записи пользователя.
"Ключ KMS принадлежит другой учетной записи Google к базе данных Firebase, поэтому ни один пользователь (например, я) не имеет права ни читать данные, ни расшифровывать их. Хакеру потребуется взломать обе учетные записи для доступанезашифрованные данные. "
Справочник по стратегии КАК ШИФРОВАТЬ БАЗУ РЕАЛЬНОГО ВРЕМЕНИ ФАЙЛОВ GOOGLE