Почему подписывание RSA обычно не используется в API RESTful?

Я разрабатываю простое приложение, которое не использует (по крайней мере, поначалу) стороннюю авторизацию. Я хочу создать API RESTful для использования клиентами iOS/Android/любыми, поэтому я прочитал кучу информации о реализации API RESTful. Однако обычные способы их реализации включают в себя отправку своего рода безопасного «токена», который используется для подписи запросов; это делает API уязвимым для атаки «человек посередине», и рекомендуемым способом противодействия ей является использование HTTPS.

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

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


person Max Yankov    schedule 07.04.2014    source источник


Ответы (1)


На данный момент не существует схемы, позволяющей получить пару асимметричных ключей из пароля.

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

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

person divanov    schedule 08.04.2014