Безопасность: секрет клиента Google в исходном коде приложения безопасен?

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

private let kClientID = "YOUR_CLIENT_ID_HERE"
private let kClientSecret = "YOUR_CLIENT_SECRET_HERE"

Однако, насколько я знаю, я думал, что бинарные файлы приложений (как для iOS, так и для Android) можно декомпилировать, так что практически любой может узнать наши client_id и client_secret.

Видя, что Google объясняет это так, я думаю, это имеет смысл, но включение секретных кодов аутентификации в двоичные файлы, которые я распространяю, кажется неправильным.

Может ли кто-нибудь пролить больше света на это? Все советы приветствуются!


person kramer65    schedule 06.08.2015    source источник
comment
Вам нужно определить, от кого вы защищаете. Если ценность того, что защищается, больше, чем стоимость атаки.   -  person zaph    schedule 06.08.2015


Ответы (3)


Вам нужно определить, от кого вы защищаете. Если ценность того, что защищается, больше, чем стоимость атаки.

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

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

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

person zaph    schedule 06.08.2015

Я считаю, что это как-то неправильно.

Представьте себе этот сценарий. Вы хотите поместить свой код в общедоступный репозиторий git. Тогда каждый сможет увидеть ваш секрет.

Одним из способов решения этой проблемы было бы хранение этих данных в зашифрованном файле конфигурации или что-то подобное.

На Android вы можете попробовать SecurePreferences, а на iOS вы можете попробовать UICKeyChainStore для этого.

person Mauker    schedule 06.08.2015
comment
Как безопасно получить ключи? - person duci9y; 06.08.2015
comment
Почти так же, как вы бы прочитали SharedPreferences. Методы описаны в обоих документах. - person Mauker; 06.08.2015
comment
Нет, я имел в виду, как бы ты достал ключи? Вы бы перенесли их с сервера или что-то в этом роде? - person duci9y; 06.08.2015
comment
Ой. Простите за это! хаха. Ага. Вы можете перенести их из другого места или создать этот файл до развертывания приложения. - person Mauker; 06.08.2015
comment
Как бы вы поступили, чтобы безопасно получить эти ключи с сервера? Любая форма зашифрованного сообщения должна быть расшифрована, что в любом случае потребует хранения ключа дешифрования. PS: несколько месяцев назад я был в аналогичном положении для хобби-проекта, но после этого я так и не удосужился решить проблему. Ваш ответ напомнил мне об этом. Спасибо! - person duci9y; 06.08.2015
comment
Это действительно хороший момент. Возможно, использование сертификата, такого как открытый ключ или что-то в этом роде, может решить проблему. Добро пожаловать! - person Mauker; 06.08.2015

Из Шаг 1. Включение Gmail API

Выберите тип приложения Установленное приложение, тип установленного приложения Другое и нажмите кнопку Создать идентификатор клиента.

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

person abraham    schedule 08.08.2015