Проблема в том, как безопасно хранить этот файл, чтобы клиент не мог его изменить. Если клиент может просто открыть текстовый файл и изменить метку времени, программа может быть обманута, заставив ее думать, что ей никогда не нужно синхронизироваться.
Я рассмотрел следующее:
- Какой-то способ подписи файла для обеспечения подлинности.
Это было бы ближе всего; очевидным способом было бы, если бы у сервера был закрытый ключ подписи, а у программы был соответствующий открытый ключ. Затем, когда вы подключитесь, сервер может подписать текущую отметку времени и отправить эту отметку времени и подпись клиенту.
Затем, когда клиент не может подключиться, он затем проверяет более позднюю отметку времени/подпись, которая была загружена, и проверяет эту подпись (используя открытый ключ, установленный вместе с клиентом); если это подтверждается, вы проверяете, не старше ли метки времени более пяти дней.
Кроме того, вы можете включить хэш некоторых важных файлов (тех, которые клиент не должен изменять) вместе с тем, что подписывает сервер; во время проверки клиент хэширует свои копии файлов и включает их в проверку.
Злоумышленник не может изменить отметку времени, потому что он не может изменить подпись (и проверить ее); он может заменить временную метку/подпись на предыдущую, однако это ничего не даст.
Возможные способы атаки:
Изменить «текущее время»; большинство ОС позволяют вам устанавливать время так, как хочет пользователь. Это предполагает проверенную (хотя и не очень точную) отметку времени.
Измените программу (либо для изменения открытого ключа, либо, что более вероятно, замените логику проверки чем-то, что всегда говорит: «это действительно»). Это всегда проблема, когда вы работаете в ненадежной вычислительной базе.