В основном уточняю, что здесь изложено .
Вот как это работает: допустим, у нас есть функция, которая принимает число от нуля до девяти, добавляет три и, если результат больше десяти, вычитает десять. Итак, 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, за исключением того, что у вас есть компьютер.
Во многих случаях я просто помещаю секретные ключи в файл с ограниченными разрешениями и принимаю обычные меры предосторожности, чтобы предотвратить рутирование моей системы. Есть несколько хитростей, чтобы заставить его работать должным образом с многопользовательской системой, например, избегать временных файлов и тому подобное.
Криптография с открытым ключом используется для защиты от очень специфических атак, некоторые из которых распространены. Короче говоря, это сложная математика, которая позволяет проверить, что у человека есть пара как Открытый, так и Закрытый ключ, при этом зная только открытый ключ. Это очень отличается от кредитной карты или статического пароля. Например, если вы проходите аутентификацию на сервере OpenSSH, тогда серверу не нужен закрытый ключ .
В идеале, если база данных API Amazon будет скомпрометирована, у злоумышленника будет список открытых ключей, и он не сможет получить доступ к API пользователя, используя эту информацию. Однако идеальные системы не всегда применяются на практике, и я не знаю точно, защищает ли Amazon этот вектор атаки, но так и должно быть.
В аутентификации с открытым ключом статистически невосприимчив к грубой силе. Пароли часто являются словарными словами, которые могут быть быстро нарушены. Однако закрытый ключ - это огромное число, которое нелегко угадать. Если бы у злоумышленника был открытый ключ, он мог бы выполнять множество предположений «в автономном режиме» на суперкомпьютере, но даже тогда для взлома ключа потребовалось бы много времени и денег.
источник
AWS разработала собственный алгоритм аутентификации. v4 был выпущен в 2014 году. Подробности изложены здесь: Аутентификация запросов (AWS Signature Version 4) . Важным моментом является то, что запрос подписывается не самим секретом, а ключом подписи, который генерируется с использованием этого секрета. Он также использует HMAC-SHA256 для подписи.
Использование асимметричных ключей будет более безопасным, поскольку AWS будет хранить только открытый ключ вместо секретного, который хранится как пользователем, так и AWS.
источник