2017-01-30 4 views
0

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

  • Использование MAC/IP-адреса Боба не будет работать, поскольку их можно легко подделать.
  • Имя пользователя/пароль как средство аутентификации не будет работать, поскольку Боб может просто предоставить эти учетные данные кому-либо.
  • Система с открытым ключом (например, с использованием RSA для подписания) не будет работать, поскольку Боб может просто поделиться своим личным ключом с кем угодно.

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

Редактировать (в случае, если это полезно): Я работаю с приложением iOS (Bob) и веб-сервером Python (служба).

+0

Что-то вроде маркера RSA, или зашифрованный ключ USB или карты, которая должна быть вставлена? –

+0

@RonMaupin Для USB-ключа или карты - Боб мог просто отдать это кому угодно. Повторите токен RSA, не могли бы вы объяснить это еще немного? – Dotl

+0

Боб мог отдать его, но тогда у Боб не было бы этого. Вероятно, этот вопрос лучше задать на [security.se]. –

ответ

1

Альтернативы:

  • Оборудование маркер, что пользователь должен присутствовать во время аутентификации, как USB-маркер или криптографической смарт-карты

  • биометрии не могут быть разделены. Например, распознавание отпечатка пальца/голоса/уха/радужки. В некоторых случаях вам понадобится читатель (обратите внимание, что биометрические данные отпечатков пальцев недоступны в мобильных устройствах), и вам нужно работать с диапазонами доверия и огромными базами данных для сравнения. Идентификатор никогда не является надежным на 100%.

  • криптографические системы с открытым ключом, которые управляют неиспользуемыми ключами. Криптографический провайдер в пользовательской части позволяет создавать или импортировать ключи, которые могут быть помечены как не извлекаемые, и не могут быть экспортированы за пределы. например, WebCryptographyApi, AndroidKeyStore, iOS KeyChain или Window Keystore. При регистрации пользователя создается пара криптографических ключей, общедоступная и приватная. Публика отправляется на сервер, связанный с учетной записью пользователя, а конфиденциальный хранится безопасно. Аутентификация выполняется с помощью цифровой подписи с использованием закрытого ключа.

См FIDO УАФ (Universal Framework аутентификации) и FIDO u2f (универсальный второй фактор)

https://fidoalliance.org/about/what-is-fido/

О IOS брелка, это позволяет пометить ключ как не извлекаемыми. См Apple Documentation

Важно

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

Посмотрите также Store and retrieve private key from Mac keychain programatically

+0

Спасибо за ваш ответ, это очень полезно. В случае использования системы открытого ключа Боб не мог просто отправить чужой открытый ключ (назовем его Imp) на сервер? Таким образом, Imp мог отправить все сообщения (с помощью собственного личного ключа) на сервер, используя свою собственную пару открытых/закрытых ключей. Сервер думает, что он общается с Бобом, когда он фактически является Импом. Конечно, это означает, что сам Боб не сможет общаться с сервером (так как Имп не может передать свой секретный ключ Бобу), но давайте предположим, что ему все равно. – Dotl

+0

Чтобы защитить вас от этого случая, необходимо, чтобы во время регистрации открытого ключа Боб посылал цифровую подпись вызова с помощью закрытого ключа. Тогда только владелец частного лица мог зарегистрировать открытый ключ – pedrofb

 Смежные вопросы

  • Нет связанных вопросов^_^