В криптографии мы называем это целостность данных .
Чтобы гарантировать, что вы или кто-то еще не измените данные, ваш клиент может вычислить хеш файла с помощью криптографические хеш-функции , которые разработаны так, чтобы иметь сопротивление столкновению.Т.е.
Hash(Original) != Hash(Modified) // equality almost impossible
Короче говоря, при изменении ожидается, что новый измененный документ с таким же значением хеш-функции невозможен (в терминологии криптологии, пренебрежимо мал.)
Ваш клиент может использовать SHA-3 хеш-функция, которая стандартизирована NIST .
Не используйте SHA-1, у которого разбито .
Если вы хотите пойти дальше, ваш клиент может использовать HMAC , которые являются ключевымиоснованные на хэше функции, обеспечивающие целостность данных и аутентификацию данных.
Для второй части мы можем решить ее с помощью цифровых подписей .Ваш клиент подписывает сообщение
Sign(hash(message))
и дает вам
( Sign(hash(message)), message ) )
и его открытый ключ.
Вы можете проверить подпись с открытым ключом клиента, чтобывидеть, что клиент изменил данные или нет.Цифровые подписи дают нам Non-Repudation .
Эта часть фактически решает две ваши проблемы.Даже третьи лица могут проверить, что данные не изменены и исходят от подписавшего (вашего клиента).
Примечание: не используют контрольные суммы, которые не являются криптографически безопасными и в основномлегко изменить документ так, чтобы они имели одинаковые контрольные суммы.