Как работают API-ключи и секретные ключи? - PullRequest
131 голосов
/ 20 апреля 2010

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

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

Как должны работать секретные ключи и ключи API? Насколько секретными они должны быть? Эти приложения как-то хранят секретные ключи?

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

Ответы [ 3 ]

91 голосов
/ 20 апреля 2010

В основном уточняю, что намечено здесь .

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

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

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

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

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

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

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

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

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

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

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

7 голосов
/ 20 апреля 2010

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

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

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

0 голосов
/ 19 апреля 2019

AWS разработала собственный алгоритм аутентификации. v4 был выпущен в 2014 году. Подробности изложены здесь: Аутентификация запросов (AWS Signature Version 4) . Важным моментом является то, что запрос подписывается не самим секретом, а ключом подписи, который генерируется с использованием этого секрета. Он также использует HMAC-SHA256 для подписи.

Signature Generation

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

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