Подтвердить что ты не робот

Зачем использовать ключ API и секрет?

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

В моих глазах одного ключа может быть достаточно. Скажем, у меня есть ключ, и только я и сервер это знают. Я создаю хэш HMAC с этим ключом и выполняю вызов API. На сервере мы снова создаем хэш HMAC и сравниваем его с отправленным хэшем. Если это то же самое, вызов аутентифицируется.

Так зачем использовать два ключа?

Изменить: или это ключ API, используемый для поиска секретности API?

4b9b3361

Ответ 1

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

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

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

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

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

ИЛИ ЖЕ

Вы можете посетить эту ссылку для более подробного объяснения.

Как работают API-ключи и секретные ключи?

Ответ 2

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

"Ключ" - это ваш идентификатор пользователя, а "секрет" - ваш пароль. Они просто используют "ключевые" и "секретные" термины, потому что так они это реализовали.

Ответ 3

Простой ответ, если я правильно понял...

Если вы используете свой ключ API для шифрования, как служба узнает, кто с ними связывается? Как они расшифруют это сообщение?

Вы используете ключ API, чтобы указать, кто вы, это то, что вы отправляете в виде простого текста. Секретный ключ вы никому не отправляете. Вы просто используете это для шифрования. Затем вы отправляете зашифрованное сообщение. Вы не отправляете ключ, который использовался для шифрования, что противоречило бы цели.

Ответ 4

Есть ответы, объясняющие, что такое секретный и (открытый) ключ. Это пара открытых и закрытых ключей, которым они дают запутанные имена. Но никто не говорит, почему API требуют и того, и другого, и многие API открывают вам только один секрет! Я также никогда не видел, чтобы какие-либо документы по API объясняли, почему у них есть два ключа, поэтому лучшее, что я могу сделать, это спекулировать...

Лучше всего указывать в запросе только ваш открытый ключ и подписывать его локально с помощью своего закрытого ключа; отправлять что-либо еще не нужно. Но некоторым сходит с рук только секрет в запросе. Хорошо, любой хороший API будет использовать некоторую транспортную безопасность, такую как TLS (обычно через HTTPS). Но вы все равно выставляете свой закрытый ключ на сервер таким образом, увеличивая риск того, что они каким-то образом неправильно с ним справятся (см. Недавно обнаруженную ошибку регистрации паролей в GitHub и Twitter). И HTTPS теоретически так же безопасен, но всегда есть недостатки реализации.

Но многие - на самом деле большинство - API-интерфейсы заставляют вас отправлять оба ключа в запросах, поскольку это проще, чем заставлять людей делать свои собственные подписи; иначе не может быть чистых примеров cURL! В этом случае бессмысленно разделять их. Я полагаю, что отдельные ключи предназначены только для того, чтобы потом изменить API, чтобы воспользоваться ими. Или у некоторых есть клиентская библиотека, которая может сделать это более безопасным способом.