Какая точка метки времени в OAuth, если Nonce может использоваться только один раз? - программирование

Какая точка метки времени в OAuth, если Nonce может использоваться только один раз?

Сначала я неправильно истолковал реализацию OAuth с меткой времени, думая, что это означает, что временная метка, которая не была в течение 30 секунд после текущего времени, была бы лишена, оказалось, что это было неправильно по нескольким причинам, включая тот факт, что мы могли не гарантирует, что каждый системный тактовый генератор достаточно синхронизирован до минут и секунд независимо от часового пояса. Затем я прочитал его снова, чтобы получить большую ясность:

"Если иное не указано поставщиком услуг, метка времени выраженное в количестве секунд с 1 января 1970 года 00:00:00 GMT. Значение метки времени должно быть положительным целым числом и должно быть равно или больше, чем временная метка, использованная в предыдущих запросах.

источник: http://oauth.net/core/1.0/#nonce

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

Затем я прочитал более подробное описание здесь: http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iii-security-architecture/

( TL; DR? - перейти к полужирным частям ниже)

Чтобы предотвратить повторное использование нежелательных запросов (повторное воспроизведение) OAuth использует nonce и timestamp. Термин nonce означает 'используемый номер один раз и является уникальной и обычно случайной строкой, предназначенной для однозначно идентифицировать каждый подписанный запрос. Имея уникальный идентификатор для каждого запроса поставщик услуг может предотвращать запросы от использования более одного раза. Это означает, что потребитель генерирует уникальная строка для каждого запроса, отправленного поставщику услуг, и Поставщик услуг отслеживает все неиспользованные для предотвращения от использования второго раза. Поскольку значение nonce включено в подпись, она не может быть изменена злоумышленником, не зная общий секрет.

Использование nonces может быть очень дорогостоящим для поставщиков услуг, поскольку они требуют постоянное хранение всех полученных значений nonce. Делать реализации, OAuth добавляет значение временной метки для каждого запроса который позволяет поставщику услуг сохранять только значения nonce для ограниченное время. Когда запрос приходит с отметкой времени, которая старше чем удержанный временной интервал, он отклоняется как поставщик услуг больше не имеет nonces из этого периода времени. Можно с уверенностью предположить, что запрос, отправленный после разрешенного срока, является повторной атакой. OAuth обеспечивает общий механизм для внедрения временных меток, но оставляет фактическая реализация до каждого Поставщика услуг (область многих верность должна быть пересмотрена по спецификации). Из безопасности точка зрения, реальное nonce - это комбинация значения метки времени и nonce string. Только вместе они обеспечивают постоянную уникальную ценность который никогда не может использоваться злоумышленником повторно.

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

Так может кто-нибудь прояснить это для меня? Какая точка метки времени, если nonce используется один раз, и я не сравниваю временную метку с моими системными часами (потому что это, очевидно, не будет надежным). Имеет смысл, что временные метки будут относиться только друг к другу, но с уникальным требованием nonce это кажется несущественным.

4b9b3361

Ответ 1

Временная метка используется для того, чтобы позволить серверу оптимизировать их хранение nonces. В принципе, считайте, что readce - это комбинация временной метки и случайной строки. Но имея отдельный компонент временной метки, сервер может реализовать ограничение по времени с использованием короткого окна (скажем, 15 минут) и ограничить объем требуемого хранилища. Без временных меток серверу понадобится бесконечное хранилище, чтобы сохранить все неиспользованные когда-либо используемые.

Предположим, вы решили разрешить разницу во времени между часами и клиентом до 15 минут и отслеживать значения nonce в таблице базы данных. Уникальным ключом для таблицы будет комбинация "идентификатор клиента", "токен доступа", "nonce" и "timestamp". Когда приходит новый запрос, убедитесь, что метка времени находится в пределах 15 минут от ваших часов, а затем найдите эту комбинацию в таблице. Если найдено, отклоните вызов, в противном случае добавьте его в свою таблицу и верните запрошенный ресурс. Каждый раз, когда вы добавляете новое nonce в таблицу, удаляйте любую запись для этой комбинации "идентификатор клиента" и "доступ к токену" с отметкой времени старше 15 минут.

Ответ 2

Хорошо, после долгих размышлений, я считаю, что я взломал этот.

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

Кроме того, Nonce должен быть уникальным, но я собираюсь хранить их до определенного диапазона дат, поэтому, если timestamp так много часов, Nonce будет отброшен и затем может быть использован снова, однако, поскольку последний также сохраняется временная метка времени, они не могут повторно использовать старый запрос, даже если Nonce считается уникальным, поскольку временная метка по этому запросу устарела.

Однако это работает только из-за подписи. Если они изменили временную метку или Nonce по запросу, подпись больше не будет соответствовать запросу и будет отказана (поскольку временная метка и Nonce являются частью создания подписи, и у них нет ключа подписи).

Уф!

Ответ 3

Если OAuth использовала только временную штангу, для злоумышленника было бы относительно легко угадать, какова будет следующая временная метка, и ввести свой собственный запрос в этот процесс. Они просто должны были сделать "предыдущую отметку времени + 1".

Используя nonce, который генерируется криптографически защищенным образом (надеюсь), злоумышленник не может просто вводить TS + 1, потому что у них не будет надлежащего nonce для аутентификации.

Подумайте об этом как о безопасном дверном замке, который требует как ключа, так и PIN-кода. Вы можете украсть ключ-карту, но все равно не можете пройти через дверь, потому что вы не знаете штырь.

Ответ 4

Разумно предположить, что можно попытаться взломать nonce с грубой силой. Временная метка уменьшает вероятность того, что кто-то может преуспеть.