У меня есть сценарий, описанный ниже.
Справочная информация --------------
У меня есть 3 типа устройств / пользователи в моей экосистеме. Один тип устройства - Android, другой - Apple iOS, а третий тип устройства [пользователь] - облачное приложение.
Сценарий ------------ -
Итак, мой пример использования здесь заключается в том, что либо из Android, либо iOS может быть создатель некоторого «ключа данных». И я использую Android Key Store на Android для шифрования / дешифрования, в то время как я использую Secure Enclave на iOS для шифрования / дешифрования. Ключ publi c будет выбран из некоторого общего хранилища данных.
Сценарий 1: iOS устройство извлекает ключ publi c устройства android device [user] из центральное хранилище данных и шифрует ключ данных с помощью этого открытого ключа c, используя алгоритм Enclave, и помещает зашифрованный ключ данных в центральное хранилище данных. Теперь Android извлечет этот зашифрованный ключ данных и попытается расшифровать его, используя свой закрытый ключ в AndroidKeyStore.
Теперь здесь проблема в том, как выбрать такую же спецификацию алгоритма salt / padding / MGF1 et c. для того, чтобы успешно расшифровать ключ данных? Я хочу иметь такую совместимость?
Я могу управлять облачным приложением [пользователь], изменяя параметры java, так как это приложение было написано в java.
Сценарий 2: Второй сценарий аналогичен сценарию 1 выше, но в этом сценарии Android шифрует, а iOS расшифровывает.
Мой подход к этому моменту:
Я думаю об использовании какого-либо независимого поставщика безопасности, например Bouncy Castle, для всех операций шифрования и дешифрования на устройстве или в облачном приложении вместо использования шифрования / дешифрования на устройстве. Но это не так безопасно, и в памяти приложения будет храниться простой закрытый ключ, что увеличивает риск.
Я уверен, что это не первый раз, когда решается эта проблема, и должны быть некоторые подходы / алгоритмы, доступные для этого.
Может кто-нибудь, пожалуйста, подскажите мне об этом.