Ответ 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, за исключением того, что у вас есть компьютер.
Во многих случаях я просто помещаю секретные ключи в файл с ограниченными правами и принимаю обычные меры предосторожности, чтобы предотвратить укоренение моей системы. Есть несколько трюков, чтобы заставить его работать с многопользовательской системой, например, избегать временных файлов и т.д.