Хранение пароля хранилища ключей для закрепления сертификата в Android

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

Поскольку я не могу доверять файловой системе Android, чтобы сохранить свой пароль хранилища ключей в секрете, главным образом потому, что любой пользователь с правами root сможет в конечном итоге его откопать, я начинаю задумываться, действительно ли это необходимо для надежного хранения этого пароля хранилища ключей или нет потому что это хранилище ключей будет содержать только SSL-сертификат моего сервера, который должен быть общедоступным.

Я не могу думать о любой злонамеренной атаке, если кто-то может декомпилировать мою APK и увидеть пароль хранилища ключей, поскольку злоумышленник не сможет изменить какой-либо код приложения и, таким образом, изменить, например, целевой сервер IP или даже изменить хранилище ключей, переключив мой сертификат с каким-либо другим вредоносным сертификатом, который в сочетании с изменениями, которые злоумышленник мог внести в целевой IP, заставит приложение работать с любым вредоносным сервером ( атака "человек посередине").

Я нашел довольно хороший пример закрепления сертификата в Android здесь, на github, но, к сожалению, автор не заботится о надежном хранении пароля, так как он жестко закодирован в MainActivity,

Итак, мой подытоженный вопрос: действительно ли нужно защищать пароль хранилища ключей, если это хранилище ключей имеется только внутри предполагаемой публичной SSL сертификат сервера?

Из проведенного мною исследования я обнаружил, что по этому вопросу ФП рассматривает возможность прохождения null в качестве пароля на код Android. Может быть, я мог бы пойти с этим и сохранить пароль хранилища ключей на моем сервере, а не упаковывать его в приложении для Android.


Также во время поиска в Google я нашел довольно полезные статьи, которые могут быть интересны для любого, кто изучит этот вопрос в будущем:


Обновление прогресса - Проход null в качестве пароля хранилища ключей (как я уже упоминал выше в качестве одного из вариантов), если вы установили его при генерации, это приведет к обходу хранилища ключей: запросы все равно отправляются, а пользовательское хранилище ключей ничего не делает. Никаких исключений не выдается или что-то еще, это просто работает, как будто вы не установили никакого пользовательского хранилища ключей.

 KeyStore trustStore = KeyStore.getInstance("BKS");
 trustStore.load(keyStoreInputStreamFromResources, null);

0 ответов

Другие вопросы по тегам