Я смотрю на генерацию псевдослучайных одноразовых паролей, чувствительных ко времени.
Чтобы отправить сообщение, пользователь вводит свой пароль, который хэшируется вместе с сообщением. Полученный хеш отправляется с сообщением на сервер для проверки. Сервер выполняет тот же хэш и сравнивает его значение с предоставленным.
verificationKey = Hash(message + password);
Это прекрасно работает для проверки сообщения против пользователя, но мне нужно предотвратить повторную отправку злоумышленником. Злоумышленник может просто снова передать ту же информацию, и она будет принята.
По сути, мне нужен свободный основанный на времени ключ для включения в хеш. Что-то, что будет означать другое значение хеш-функции для разных времен, но с достаточным запасом времени для учета задержек в коммуникации.
verificationKey = Hash(message + password + time);
Очевидно, что если значение времени является конкретным, любое несоответствие между клиентом и сервером вызовет проблемы. Даже если значение времени округлено до ближайшего целого часа, будет момент времени (x: 30), где значения могут отличаться из-за времени, затраченного на передачу сообщения.
Может ли кто-нибудь дать какие-либо предложения о том, как бы я получал ценность свободного времени, подобную этой?