2013-08-14 3 views
4

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

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

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

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

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

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

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

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

+0

Мне нравится, как я делаю покупки в Steam и Xbox Live. В обоих случаях мне не нужно использовать клавиатуру. Я бы проверял их, был ли я вами. Банкоматы также проверяют, они более ограничены, чем ваше устройство. Кроме того, аутентификация пользователя, позволяя ему выбирать фотографии, - это верный способ позволить хакерам украсть учетные записи ваших пользователей. Мне не нужно ничего делать, кроме как взглянуть на чье-то плечо, чтобы открыть свой пиктографический пароль, и быть снимками, которые я мог бы сделать дальше, чем мне нужно, с простыми персонажами. – Renan

+0

@Renan Спасибо, я не знаком с потоком аутентификации Steam или Xbox Live. Не могли бы вы описать процесс? – Andrew

+5

Этот вопрос относится к другим сайтам в сети Stack Exchange: security.stackexchange.com Пожалуйста, пожалуйста, введите другой сайт для обмена файлами в «Этот вопрос принадлежит другому сайту в сети Stack Exchange». Это сводит меня с ума. –

ответ

1

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

Обновление: Надеюсь, вы не рассматриваете многопользовательский сценарий для каждого устройства. Итак, я предполагаю, что на устройство есть один пользователь. Второе предположение - устройство может иметь уникальный серийный номер, который может быть доступен через некоторые API, и серийный номер зарегистрирован на сервере заранее. На начальном этапе пользователь генерирует случайный ключ через кнопку выбора устройства, и приложение подтверждает успех генерации ключа, вероятно, отображает серийный номер (пользователю может потребоваться зарегистрировать серийный номер для последней конфигурации). За кулисами приложение отправляет новый ключ с его серийным номером на сервер. Сервер обновляет свой серийный номер случайным ключом в записи базы данных. Устройство может блокировать дальнейшее генерирование ключей или может допустить, пока он, наконец, не будет сконфигурирован с выделенным пользователем. Устройство также сохраняет серийный номер со случайным ключом в локальной базе данных/файле. Затем пользователь переходит в свою учетную запись через веб-интерфейс для настройки устройства. Для зарегистрированного пользователя сервер представляет список доступных устройств, и пользователь может выбрать тот, который принадлежит ей/ей, и установить четырехзначный пин-код. Сервер выполняет следующие операции:

  1. Связать учетную запись пользователя, серийный номер, случайный ключ (тот, который отправлено устройством в начале).
  2. генерирует маркер
  3. сгенерировать ключ с помощью пин-кода и случайный ключ в виде соли с помощью пароля на основе ключа алгоритма производное (PBKDF2)
  4. шифрует маркер с помощью ключа, полученного на этапе 3
  5. пользователя Обновление базы данных строка с маркером шифрования.

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

+0

Это будет встроенное устройство с пользовательским оборудованием ввода. Он будет работать на Linux, и приложение будет написано в Ruby. – Andrew

+0

Что касается вашего комментария о многопользовательском, то в плане будет основной пользователь, который обычно всегда регистрируется. Основной пользователь может совершать покупки в приложении, однако в конечном итоге я хотел бы разрешить гостевым пользователям регистрироваться в, но не будет иметь доступ к покупке в приложении. Не знаю, как я буду заниматься аутентификацией гостевого пользователя. Возможно, 2-факторное auth путем создания временного (revokable) токена и отправки сообщения электронной почты/текста для утверждения, чтобы код доступа не отображался другим в виде обычного текста. – Andrew