Аутентификация устройства Windows Mobile 6

У меня есть приложение, которое работает на КПК под управлением Windows Mobile 6 Professional. Приложение устанавливается путем просмотра URL-адреса устройства и загрузки кабины.

Пользователи собирают информацию в приложении, а затем она реплицируется обратно на сервер SQL 2005 с использованием репликации слиянием и IIS v6.

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

Я хотел бы как-то аутентифицировать устройства либо на этапе установки, либо на этапе репликации (или на обоих).

Можно ли аутентифицировать устройство по серийному номеру или номеру IMEI (идентификатора мобильного телефона)? Есть ли способ загрузить сертификат на устройство, чтобы разрешить подключение только сертифицированным устройствам?

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


person MBoy    schedule 17.01.2009    source источник


Ответы (3)


Одно из возможных решений - отправить уникальный идентификатор устройства как часть аутентификации. Есть сообщение об использовании GetDeviceUniqueID в блоге группы разработчиков Windows Mobile .

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

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

person Gordon Wilson    schedule 17.01.2009
comment
Привет, это помогает на стороне клиента, но что будет проверять на стороне сервера? - person MBoy; 29.01.2009

У вас противоречивые требования:

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

и:

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

Если можно ожидать, что ваши пользователи будут использовать только (едва ли) пароль, то вы не можете рассчитывать на возможность защиты в любом случае от кого-либо еще, у кого есть их пароль.

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

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

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

Если у вас есть другой канал аутентификации (телефон, электронная почта, SMS), вы можете обеспечить более надежную и содержательную аутентификацию.

Например, вы можете сделать работу вашей программы зависимой от файла «public.key» с открытым ключом для каждого пользователя, который требуется вашему серверу для использования. После того, как пользователь войдет на ваш веб-сайт, попросите его дать вам свой номер телефона (теперь у вас есть номер телефона и пароль) и отправьте SMS со ссылкой на временную загрузку ключа. Создайте новый ключ для каждого пользователя, храните их закрытый ключ на сервере и шифруйте (или, по крайней мере, аутентифицируйте) каждую транзакцию между устройством и сервером с использованием этой пары ключей.

Теперь, если кто-то другой хочет представить себя их пользователем, он должен получить этот файл одним из трех способов:

  • Берут прямо с КПК (им тоже нужен пароль, так как открытый ключ должен быть защищен паролем пользователя)
  • Они заставляют пользователя запрашивать новую ссылку для SMS и каким-то образом получают ссылку, не имея телефона.
  • Они меняют номер телефона и запрашивают новую ссылку для СМС

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

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

-Адам

person Adam Davis    schedule 29.01.2009
comment
Спасибо за ответ, отличные идеи здесь, Адам. Вы правы насчет противоречивых требований ... нужно подумать об этом (здесь, в Африке, время выпить), но вариант с паролем для номера телефона может быть решением для меня. Дам обнову завтра. - person MBoy; 29.01.2009

Для каждой загрузки вы можете создавать немного разные CAB-файлы. Единственное отличие - это токен безопасности, который ваше приложение будет использовать в качестве аналога пользователя / пароля. Это должен быть открытый ключ для реальной безопасности.

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

person vava    schedule 30.01.2009