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


136

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

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

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

Ответы:


90

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

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

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


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

21
Сначала вы говорите «то, что Amazon хранит в своей системе, является« хешем »вашего секретного ключа», а затем «Amazon ищет свою копию секретного ключа». Кажется, они противоречат друг другу. Я считаю, что первое утверждение неверно.
Шон

3
Этот URL содержит
asyncwait,

10
«Теоретически, любые математические функции, которые отображают одну вещь в другую, могут быть обращены вспять» - это не правда, хеш-функции являются примером. это очень легко показать. допустим, у нас есть функция, которая превращает слова в числа на основе суммы значений (a = 1, b = 2, c = 3 и т. д.). Например, «SO» будет 18 + 14 = 32. Таким образом, мы изменили SO на 32, но если я открою кому-то эту функцию и дам ему номер 32, он не сможет узнать, было ли наше основное слово «SO» или «ZF» (26 + 6) или одна из десятков других возможностей
Лев

1
Согласно документу, связанному с @asyncwait, amazon определенно хранит ваш секретный ключ, а не просто его хэш. На самом деле, похоже, что происходит только то, что происходит внутри функции HMAC
cowlinator

7

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

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

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


2
не нужен закрытый ключ ссылка сломана в настоящее время.
Сетзамора

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

1

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

Генерация подписи

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.