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