Если я храню закрытый ключ в KeyStore из приложения A, можно ли получить этот же ключ из приложения B? - PullRequest
3 голосов
/ 30 января 2020

Я работаю над проектом Android, состоящим из нескольких модулей (несколько приложений), и столкнулся со случаем, когда мне нужно сохранить некоторую секретную информацию, к которой могут обращаться все эти приложения. Моя идея состоит в том, чтобы зашифровать секретную информацию с помощью закрытого ключа, который сохраняется внутри KeyStore, и сохранить эту информацию в файле, который я планирую сохранить на устройстве (не во внешнем хранилище). У меня вопрос: смогу ли я получить доступ к этому секретному ключу внутри KeyStore из другого приложения, а затем использовать его для расшифровки секретной информации, сохраненной на устройстве?

Я просматривал документацию Android KeyStore , и если я правильно понял, я могу использовать API KeyStore для сохранения ключей шифрования c и использовать их в одном приложении. Но также в документации KeyChain говорится, что я могу использовать эти криптографические ключи c для нескольких приложений в системе. Я весьма озадачен тем, как я могу объединить эти два API и заставить его работать для моего варианта использования. Любая помощь приветствуется. Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Существует android: sharedUserId свойство. Из do c:

Приложения с одинаковым идентификатором пользователя могут получать доступ к данным друг друга и, при желании, запускаться в одном и том же процессе.

К сожалению, это устарел в API 29 без надлежащей замены.

0 голосов
/ 31 января 2020

Моя идея состоит в том, чтобы зашифровать секретную информацию с помощью личного ключа

Вы шифруете с помощью открытого ключа c, а не с закрытым ключом. Закрытый ключ используется для расшифровки.

Если вы создаете публичные c ключи для всех приложений, то вы можете расшифровать их с помощью индивидуальных закрытых ключей. Конечно, вы должны заранее доверять этим приложениям и парам ключей c каждого приложения; Я недостаточно знаком с вашей настройкой, чтобы давать какие-либо рекомендации на этот счет.

Если честно, API KeyChain кажется больше в аутентификации TLS, чем что-либо еще, и я не думаю, что он подходит для вашего варианта использования. , Например, API choosePrivateKeyAlias говорит только об аутентификации и сервере, запрашивающем цепочку ключей.

Хранилища ключей в принципе могут быть распределены. Или, конечно, для доступа к ним / их расшифровки вам все равно нужен ключ, распространяемый внутри каждого приложения. Вы можете поделиться информацией только для указанных c подписанных приложений кажется. Возможно, только безопасность совместного использования данных в частном порядке без шифрования уже отвечает вашим потребностям? В конце концов, управление ключами сложно.

Предостережение: я не очень хорошо знаком с моделью безопасности Android; надеюсь, мои общие знания в области криптографии и безопасности помогут вам в правильном направлении.

...