Могу ли я использовать шифрование AWS KMS для шифрования на стороне клиента в Android?
В Android AWS SDK нет способа шифрования KMS. На стороне сервера мы используем KMSEncryptionMaterialsProvider
создавать AmazonS3EncryptionClient
объект, но этот класс недоступен в Android SDK. Я пытался использовать Java SDK в моем проекте Android, но это вывело исключение
Код:
KMSEncryptionMaterialsProvider materialProvider = new KMSEncryptionMaterialsProvider(kms_cmk_id);
encryptionClient = new AmazonS3EncryptionClient(new ProfileCredentialsProvider(), materialProvider,
new CryptoConfiguration())
.withRegion(Region.getRegion(Regions.US_WEST_2));
исключение
Причина: java.lang.ClassNotFoundException: не найден класс "javax.management.MBeanServerFactory" на пути: DexPathList
1 ответ
Да, это возможно. Я дам вам три варианта, но все они требуют, чтобы ваши руки стали немного грязнее.
Вариант 1. Вы можете самостоятельно реализовать поставщика материалов для шифрования KMS. Несмотря на то, что этот конкретный класс (и, вероятно, некоторые его зависимости) отсутствуют в AWS Android SDK, у вас есть необходимый интерфейс в SDK: EncryptionMaterialsProvider. На этой основе должна быть возможность реализовать вашего собственного провайдера.
Вариант 2: Используйте клиент KMS, предоставленный в Android SDK, чтобы получить ваши собственные материалы для шифрования из KMS, а затем передать StaticEncryptionMaterialsProvider клиенту S3.
Вариант 3: разобраться с шифрованием / дешифрованием самостоятельно. Технически вы можете получить материалы для шифрования с помощью клиента KMS, а затем следовать указаниям KMS по официальной документации для шифрования / дешифрования ваших данных. Пожалуйста, просто сделайте это, если вы знакомы с криптографией.