Используя AWS SDK , можно использовать готовое шифрование на стороне клиента.
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);
AmazonS3 s3EncryptionClient = AmazonS3EncryptionClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withEncryptionMaterials(new StaticEncryptionMaterialsProvider(encryptionMaterials))
.withRegion(clientRegion)
.build();
Обратите внимание:
- если клиенту потребуется предоставить дополнительный ключ для шифрования содержимого. Вопрос в том, как / где клиент будет управлять ключом содержимого. (PBKDF? KMS из другой учетной записи?)
- если ключ шифрования утерян, содержимое невозможно восстановить
Я имею в виду, если ключ шифрования сохранен на стороне пользователя и он удаляет приложение и все его данные, как он может расшифровать данные после повторной установки приложения?
Я предлагаю вам создать ключ шифрования на основе пароля где пользователь может предоставить пароль шифрования (отличный от пароля аутентификации пользователя, который может измениться).
Может быть, я могу использовать пароль Cognito для этого, но что, если пользователь захочет изменить пароль
У вас (не должно быть) доступа к паролю пользователя.