Как работают API-ключи и секретные ключи? Будет ли это безопасно, если я передам свой API и секретные ключи другому приложению?

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

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

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

Ответ 1

В основном выработка того, что описано здесь.

Вот как это работает: пусть у нас есть функция, которая принимает число от нуля до девяти, добавляет три и, если результат больше десяти, вычитает десять. Итак, 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, за исключением того, что у вас есть компьютер.

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

Ответ 2

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

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

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

Ответ 3

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

Signature Generation

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