2016-03-03 6 views
13

Я прочитал Android документации в http://developer.android.com/training/articles/keystore.html Но я пропускаю некоторые подробности ...Как система Android Keystore может быть защищена?

Если приложение генерирует ключ (симметричный или асимметричный) с использованием AndroidKeyStore.

Можно ли извлечь ключ из этого хранилища ключей?

Может ли другое приложение (AppB) получить доступ к ключу, созданному AppA?

В этом случае мы можем потерять ключ? Только сброс настроек устройства?

Спасибо.

+0

1) вы должны хранить свое хранилище в сейфе и ни при каких обстоятельствах не делиться им. 2) ключи в хранилище ключей требуют пароля, хотя я думаю, что все возможно, поэтому см. Пункт 1 3) не уверен, что я понимаю вопрос, но в целом я скажем, нет, а не секретный ключ, по крайней мере (используется для подписывания приложения). 4) этот я не уверен, что я получу либо, если у вас есть хранилище ключей, вы можете создать приложение с подпиской, используя его, но снова. Он не должен храниться на устройстве или подобном – cYrixmorten

+0

Спасибо за ваш ответ, но я не говорю о хранилище ключей, которое мы используем для подписания приложения. Я добавил документацию на Android к вопросу. –

+0

Хорошо, тогда я неправильно понял :-) nvm – cYrixmorten

ответ

15

Вы можете использовать Android KeyStore Provider или создать нормальный файл KeyStore.

  • KeyStore (API 1): Вам нужно будет создать файл KeyStore, и вы также должны управлять секрет, чтобы получить доступ к нему. Этот секрет очень чувствителен и с трудом скрывается от нападавших. Лично я не рекомендую этот выбор.

  • Провайдер KeyStore для Android (API 18): Используя этот API, вы делегируете все тяжелые вещи для доступа к нему операционной системы. Вам не нужно будет использовать какой-либо пароль, так как сама ОС будет хранить его, используя вывод блокировки экрана, пароль, шаблон и другие переменные. Если устройство содержит встроенный защищенный элемент и задает тип хранения Аппаратное обеспечение и не только Программное обеспечение, оно хранит там секреты. Это самый безопасный способ хранения любых секретов с использованием защищенного оборудования. Это может даже защитить секреты, даже если пользователь укоренил телефон.

Можем ли мы извлечь ключ из этого хранилища ключей?

С обоими из них ваше приложение может получить PrivateKey и использовать его, если это то, что вы имеете в виду.

Может ли другое приложение (AppB) получить доступ к ключу, созданному AppA?

С провайдером KeyStore каждое приложение может иметь доступ только к своим экземплярам или псевдонимам KeyStore. С обычным KeyStore, если у другого приложения есть доступ к файлу, он может попытаться атаковать его.

В этом случае мы можем потерять ключ? Только сброс настроек устройства?

Удаление приложения приведет к стиранию экземпляра поставщика ключей для вашего приложения. Однако из-за a nasty bug в Android (чаще всего до Android 5), если пользователь изменяет шаблон блокировки экрана на пароль или удаляет шаблон, который будет удален KeyStore. То же самое происходит, когда пользователь выполняет «Очистить учетные данные» из настроек Android. Вместо классического KeyStore вы можете сохранить его во внешнем хранилище и сохранить его даже после перезагрузки устройства. Однако он по-прежнему менее безопасен, чем поставщик.

Возможно, я ошибаюсь в некоторых аспектах, но это то, чему я научился, и я просто поделился своим опытом. Надеюсь, это поможет вам.

+1

Спасибо, это было действительно полезно для меня. – Herman

+0

@ Herman: вы используете Android KeyStore для хранения ключей? – j10

Смежные вопросы