Зашифруйте данные вашего пожарного магазина - PullRequest
0 голосов
/ 11 июня 2018

Я хочу зашифровать данные, хранящиеся в базе данных 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

Ответы [ 2 ]

0 голосов
/ 12 июля 2018

Официальный ответ, полученный от службы поддержки Google Firebase:

В настоящее время настраиваемый доступ к Firebase (например, доступ к Firestore, RTDB) пока не поддерживается, но крайне востребована.Также, как вы знаете, клиентские SDK Firestore не имеют возможности шифрования.Таким образом, дополнительное шифрование не помешает (я не могу предложить так много на этой части).Чтобы добавить, наличие строгих правил безопасности является обязательным.

0 голосов
/ 11 июня 2018

Обычно вам не нужно это делать, потому что он автоматически шифруется.
https://cloud.google.com/firestore/docs/server-side-encryption
В нем уже нет трещин!

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