Приложение, которое я реализую, будет содержать высокочувствительные пользовательские данные, и поэтому мы хотим зашифровать данные перед их сохранением, как локально, так и онлайн (в Gcloud Firestore). Я хотел бы сделать это, используя Envelope Encryption .
. В настоящее время у меня есть Python серверная часть, развернутая в Gcloud Run, которая имеет учетные данные для подключения к GCloud KMS. Он предлагает REST API, который я хочу использовать для шифрования ключа шифрования данных (DEK), используя ключ KCl GCloud в качестве ключа шифрования ключа (KEK). В настоящее время он может зашифровывать только простые строки, используя для этого отдельный бэкэнд, а не из самого приложения, поскольку, насколько я знаю, безопасного способа хранения учетных данных GCloud внутри приложения нет. Клиентская библиотека GCloud KMS не поддерживает Android. Другой SO-ответ касается этого.
На стороне Android я использую Tink , чтобы создать ключ шифрования данных, и я могу зашифровать свои данные с его помощью. Последний шаг, и я не могу полностью понять, как я могу отправить ключ AEAD на свой сервер. Это то, что я уже рассмотрел:
Тинк технически уже имеет поддержку для прямой работы с GCloud , но для этого необходимо, чтобы мое приложение имело учетные данные GCloud, которые не не защищены, как упомянуто выше.
Я мог бы использовать JSONKeyWriter , чтобы записать JSON версию ключа в строку, используя ByteArrayOutputStream, и отправить это Строка, которую нужно зашифровать, используя мой бэкэнд, но по какой-то причине я пока не могу объяснить, что мне не подходит.
Так что я немного застрял. Второй вариант по-прежнему правильный? Может быть, есть еще один третий вариант, который я еще не рассматривал. Я не думаю, что я первый, кто реализовал это, но я не могу найти какую-либо информацию о работе таким образом.