Я только начинаю думать о том, как работают ключи API и секретные ключи. Всего 2 дня назад я зарегистрировался в Amazon S3 и установил Плагин S3Fox. Они попросили у меня и моего Ключа доступа и Секретного Ключа доступа, оба из которых требуют, чтобы я вошел в доступ.
Таким образом, я задаюсь вопросом, если они просят у меня мой секретный ключ, они должны хранить его где-нибудь право? Это не в основном то же самое как выяснение у меня для моих номеров кредитных карт или пароля и хранения это в их собственной базе данных?
Как секретные ключи и ключи API, как предполагается, работают? Насколько секретный они должны быть? Эти приложения, которые используют секретные ключи, хранящие его так или иначе?
В основном развивая то, что изложено здесь.
Вот как это работает: предположим, у нас есть функция, которая принимает число от нуля до девяти, складывает три и, если результат больше десяти, вычитает десять. Таким образом, f(2) = 5, f(8) = 1 и т.д. Теперь мы можем сделать другую функцию, назвать ее f', которая идет в обратном направлении, добавив семь вместо трех. f'(5) = 2, f'(1) = 8 и т.д.
Это пример двусторонней функции и ее обратной стороны. Теоретически любые математические функции, которые сопоставляет одну вещь с другой, могут быть обращены вспять. На практике, однако, вы можете сделать функцию, которая скремблирует свои входные данные настолько хорошо, что ее невероятно трудно повернуть вспять.
Прием входных данных и применение односторонней функции называется «хешированием» входных данных, а то, что Amazon хранит в своей системе, является «хэшом» вашего секретного ключа. SHA1 является примером такого рода «односторонней» функции, она также усилена против атак.
Функция HMAC основана на установленных хэш-функциях для использования известного ключа для проверки подлинности строки текста. Это работает следующим образом:
Разница между этим и PKI заключается в том, что этот метод RESTful, позволяющий минимальное количество обменов между вашей системой и серверами Amazon.
Разве это не то же самое, что запрашивать номера моих кредитных карт или пароль и хранение его в своих собственная база данных?
Да, хотя ущерб, который кто-то может нанести с S3, кажется, ограничивается опустошением вашей учетной записи.
Насколько секретными они должны быть?Ар Эти приложения, использующие секрет ключи, хранящие его каким-то образом?
В какой-то момент вам придется загрузить секретный ключ, и в большинстве unix-систем, если злоумышленник может получить root-доступ, он может получить ключ. Если вы шифруете ключ, у вас должен быть код для его расшифровки, и в какой-то момент код расшифровки должен быть обычным текстом, чтобы его можно было выполнить. Это та же проблема, с которыми имеет DRM, за исключением того, что вы владеете компьютером.
Во многих случаях я просто помещаю секретные ключи в файл с ограниченными разрешениями и принимаю обычные меры предосторожности, чтобы предотвратить укоренения моей системы. Есть несколько трюков, чтобы заставить его правильно работать с многопользовательской системой, например, избегать временных файлов и тому подобное.
Криптография с открытым ключом используется для защиты от очень специфических атак, некоторые из которых являются обычными. Короче говоря, это сложная математика, которая позволяет проверить, что у человека есть пара открытого и закрытого ключей, зная только открытый ключ. Это сильно отличается от кредитной карты или статического пароля. Например, если вы аутентифицируетесь на сервере OpenSSH, то серверу не нужен закрытый ключ .
В идеале, если база данных API Amazon, которая может быть скомпрометирована, злоумышленник должен иметь список открытых ключей и не сможет получить доступ к пользовательскому API, используя эту информацию.Однако идеальные системы не всегда применяются на практике, и я не знаю наверняка, защищает ли Amazon от этого вектора атаки, но они должны быть.
Проверка подлинности с открытым ключом статистически неуязвима для грубой силы. Пароли часто представляют собой словарные слова, которые можно быстро взломать. Однако закрытый ключ - это огромное количество, которое нелегко угадать. Если бы у злоумышленника был открытый ключ, он мог бы выполнять многие догадки «в автономном режиме» на суперкомпьютере, но даже тогда для взлома ключа потребовалось бы много времени и денег.