Как сделать безопасный вход с помощью UDID или токена устройства?

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

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

Как клиент может доказать серверу, что он предоставляет правильный идентификатор устройства?


person Erik B    schedule 12.01.2011    source источник
comment
Что вы ожидаете, когда пользователь, который владеет несколькими устройствами или самостоятельно заменяет свое устройство, попытается использовать ваше приложение?   -  person Jonah    schedule 12.01.2011
comment
Хороший момент. Я планировал дать пользователям возможность зарегистрировать свой адрес электронной почты. Вы вполне можете связать несколько идентификаторов устройств с одним и тем же пользователем, используя адрес электронной почты для их проверки.   -  person Erik B    schedule 12.01.2011


Ответы (2)


Теоретически вы не можете. Идентификатор устройства не является особо секретным, и в большинстве случаев его можно легко подделать. Что касается Android, то в этой ОС вообще нет надежного идентификатора устройства — см. подробности здесь: Есть ли уникальный идентификатор устройства Android?

Все, на что вы можете положиться, — это безопасность через неизвестность, надеясь, что никто не будет настолько решителен, чтобы реконструировать код и проанализировать протокол аутентификации. И не раскрывать код не вариант — ведь вы же распространяете приложение.

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

Для более надежного решения аутентифицируйте пользователей, а не устройства. Это зависит от ваших клиентов и характера бизнеса.

person Seva Alekseyev    schedule 12.01.2011
comment
Это точно такое же решение, которое я придумал. Однако я не эксперт по безопасности, поэтому я подумал, что, возможно, кто-то из stackoverflow знает лучший способ. Я не имею дело с конфиденциальными данными, поэтому простота важнее безопасности. - person Erik B; 12.01.2011

Я не эксперт по Android, но код IMEI считаю уникальным для устройства. Я не знаю, хотя, как вы можете прочитать и передать его.

person Elzo Valugi    schedule 14.07.2011