Публичные и закрытые ключи API

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


person Mario    schedule 11.06.2012    source источник


Ответы (2)


проверка того, что amazon s3 делает для аутентификации, может быть хорошее начало

в основном они делают то же самое, что вы предложили, и используют RFC 2104HMAC-SHA1 для хеширования. Реализация зависит от вашего выбора языков.

person xvatar    schedule 11.06.2012
comment
Какой лучший способ для вас сгенерировать закрытый ключ? Спасибо - person Mario; 12.06.2012
comment
@Mario, проверьте это для создания случайных вещей grc.com/passwords.htm - person xvatar; 12.06.2012
comment
У меня есть сомнения: если я сгенерирую закрытый ключ случайным образом, мне придется отправить его клиенту (приложению для Android), чтобы сниффер смог обнаружить ключ. Как насчет того, чтобы сгенерировать его из электронной почты или другого материала с обеих сторон? Это лучше? - person Mario; 13.06.2012
comment
@Mario, если вас беспокоит атака «человек посередине», вам следует использовать https или просто отправить ключ по электронной почте. - person xvatar; 13.06.2012

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

То, что вы делаете, это запрос подписи. Вы даете «секрет» (то, что вы называете «закрытым ключом»), затем они используют его для генерации хэша. Затем вы можете проверить хеш на своем сервере, так как вы также знаете секрет.

В такой системе не было бы открытого ключа. Обычно вы идентифицируете клиента с помощью сеансового ключа или токена, поэтому клиент должен сначала пройти аутентификацию (что означает, что вам нужен какой-то метод аутентификации). По сути, вы пытаетесь реализовать OAuth. Возможно, взгляните на библиотеку и посмотрите, сможете ли вы использовать ее напрямую — http://oauth.net/documentation/getting-started/

person laurent    schedule 11.06.2012