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