Отметка времени в аутентификации hMAC

в качестве спокойного веб-API-сервера мы предоставляем нашему клиенту идентификатор клиента и пароль. Я думаю, что клиенту достаточно использовать clientid + hMAC (clientid, хешированный паролем) для аутентификации.

Я просмотрел некоторые документы, в которых рекомендуется использовать метку времени или даже дополнительную информацию для базовой строки. Я просто не могу понять смысла этого.

Может ли какой-нибудь гуру помочь объяснить, что именно отметка времени поможет предотвратить атаку или что-то еще?


person James Rao    schedule 10.05.2016    source источник


Ответы (1)


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

Если вы добавите метку времени, срок действия сообщения истечет через короткое время и предотвратит это. Вы бы выбрали, как долго будут соблюдаться временные метки в серверном приложении. Когда вы не забываете учитывать «будущее» время, потому что щелчок клиента может немного опередить ваш и появиться в будущем в вашем приложении.

person BlargleMonster    schedule 10.05.2016
comment
поэтому отметка времени действительно полезна для защиты секрета, поскольку, если время изменяется, hMac соответственно изменяется. если бы не отметка времени, злоумышленнику не было бы дела до секрета, поскольку hMac всегда один и тот же. Это правильно? - person James Rao; 11.05.2016
comment
но в случае, если злоумышленник может перехватить сообщение, даже зашифрованное с отметкой времени, он все равно может смоделировать точно такое же сообщение. так в чем смысл такого рода шифрования? - person James Rao; 11.05.2016
comment
Это не шифрование, сообщение может прочитать любой, кто получит копию. Смысл подписания hmac заключается в том, чтобы иметь возможность проверить, что сообщение пришло из надежного источника и не было подделано. С отметкой времени злоумышленник сможет повторить сообщение только в течение короткого периода времени, что значительно усложнит его использование. Им нужно было бы скомпрометировать сообщения, отправляемые в режиме реального времени, вместо того, чтобы иметь возможность использовать что-то вроде перехваченного старого HTTPS-трафика для получения ваших сообщений. - person BlargleMonster; 11.05.2016
comment
Спасибо Блэргл. Это имеет смысл. - person James Rao; 12.05.2016