2010-04-20 2 views
113

Я только начинаю думать о том, как работают ключи api и секретные ключи. Всего 2 дня назад я подписался на Amazon S3 и установил S3Fox Plugin. Они попросили меня как ключ доступа, так и секретный ключ доступа, оба из которых требуют от меня входа в систему для доступа.Как работают ключи API и секретные ключи?

Так что мне интересно, если они спрашивают меня о моем секретном ключе, они должны хранить его где-то в порядке? Разве это не в основном то же самое, что просить меня о номерах или пароле моей кредитной карты и хранить их в своей собственной базе данных?

Как работают секретные ключи и ключи api? Как секрет, что они должны быть? Являются ли эти приложения, которые используют секретные ключи, так или иначе храня их?

Спасибо за понимание.

ответ

83

Основываясь на том, что обозначено here.

Вот как это работает: допустим, у нас есть функция, которая принимает число от нуля до девяти, добавляет три и, если результат больше десяти, вычитает десять. Итак, f (2) = 5, f (8) = 1 и т. Д. Теперь мы можем сделать другую функцию, назовем ее f ', которая идет назад, добавив семь вместо трех. f '(5) = 2, f' (1) = 8 и т. д.

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

Взятие ввода и применение односторонней функции называется «хешированием» ввода, и то, что Amazon хранит в своей системе, является «хэшем» вашего секретного ключа. SHA1 является примером такого рода «односторонней» функции, он также ожесточен от атак.

HMAC function основывается на установленных хэш-функциях, чтобы использовать известный ключ для аутентификации строки текста. Он работает следующим образом:

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

Разница между этим и PKI заключается в том, что этот метод равен RESTful, что позволяет минимальное количество обменов между вашей системой и серверами Amazon.

Не, что в принципе то же самое, просят меня за номера кредитных карт или пароля и хранения, которые в своей собственной базе данных ?

Да, хотя ущерб, который может быть у кого-либо, связанный с S3, по-видимому, ограничивается исчерпанием вашей учетной записи.

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

В какой-то момент вам придется загружать секретный ключ, а с большинством систем на основе Unix, если злоумышленник может получить доступ с правами root, они могут получить ключ. Если вы зашифруете ключ, у вас должен быть код для его расшифровки, и в какой-то момент код дешифрования должен быть простым текстом, чтобы он мог быть выполнен. Это та же проблема, что и DRM, за исключением того, что у вас есть компьютер.

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

+12

«Взятие ввода и применение односторонней функции называется« хэшированием »ввода, и то, что Amazon хранит в своей системе, является« хэшем » ваш секретный ключ ». Если Amazon хранит HASH вашего секретного ключа, как Amazon может использовать текст, отправленный им? – Franklin

+15

Сначала вы говорите: «Какие магазины Amazon в их системе являются« хэшем »вашего секретного ключа», а затем «Amazon просматривает свою копию секретного ключа». Кажется, они противоречат друг другу. Я считаю, что первое утверждение неверно. Например, у – Sean

+0

есть четыре идентификатора клиента и секрет клиента, который вы получаете при регистрации. И мне нужно отправить обоих, чтобы получить ответ. Так разве это не будет, чтобы быть увиденным и перехваченным на «проводе». Они не упоминают о создании или принуждении https. В наши дни также существует распространенный сценарий безсерверного приложения, поэтому было a) отправить запрос в FS через сервер (все еще можно увидеть перехваченный) b) отправить через браузер клиента в FS (очень легко определить ключ клиента и секрет.) Чего мне не хватает ... секрет, безусловно, как пароль, вы никогда не должны ОТПРАВИТЬ его всегда http https. – landed

7

Public Key Cryptography предназначен для защиты от очень специфических атак, некоторые из которых являются общими. Короче говоря, это сложная математика, которая позволяет проверить, что у человека есть пара Public и Private Key, но только зная открытый ключ. Это очень отличается от кредитной карты или статического пароля. В качестве примера, если вы аутентифицируете сервер OpenSSH, тогда сервер doesn't need the private key.

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

Аутентификация с открытым ключом статистически невосприимчива к грубой силе. Пароли часто являются словарными словами, которые могут быть быстро нарушены. Однако закрытый ключ - это огромное количество, которое нелегко догадаться. Если у злоумышленника был открытый ключ, они могли бы выполнить многие догадки «офлайн» на суперкомпьютере, но даже тогда для разлома ключа потребовалось бы много времени и денег.

+2

Не нужно, чтобы личная связь key_ была нарушена. – Joset

+0

@Joset обновил ссылку, указывающую на копию в машине с обратным доступом в Интернете, с 2008 года – oligofren

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