Как обеспечить неизменяемость контрольной суммы документа? - PullRequest
0 голосов
/ 26 декабря 2018

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

Я думаю, что я могу создать контрольную сумму из сохраненных данных для клиента, но мне нужно убедиться, что эта контрольная сумма не может быть изменена клиентом.Есть идеи?

PS.Если у вас есть идея, как озаглавить этот вопрос, скажите, пожалуйста.

PS.Сообщите мне, если вы видите лучший форум, чтобы задать этот вопрос, пожалуйста.

1 Ответ

0 голосов
/ 26 декабря 2018

В криптографии мы называем это целостность данных .

Чтобы гарантировать, что вы или кто-то еще не измените данные, ваш клиент может вычислить хеш файла с помощью криптографические хеш-функции , которые разработаны так, чтобы иметь сопротивление столкновению.Т.е.

 Hash(Original) != Hash(Modified) // equality almost impossible

Короче говоря, при изменении ожидается, что новый измененный документ с таким же значением хеш-функции невозможен (в терминологии криптологии, пренебрежимо мал.)

Ваш клиент может использовать SHA-3 хеш-функция, которая стандартизирована NIST .

Не используйте SHA-1, у которого разбито .

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


Для второй части мы можем решить ее с помощью цифровых подписей .Ваш клиент подписывает сообщение

 Sign(hash(message))

и дает вам

 ( Sign(hash(message)), message ) )

и его открытый ключ.

Вы можете проверить подпись с открытым ключом клиента, чтобывидеть, что клиент изменил данные или нет.Цифровые подписи дают нам Non-Repudation .

Эта часть фактически решает две ваши проблемы.Даже третьи лица могут проверить, что данные не изменены и исходят от подписавшего (вашего клиента).


Примечание: не используют контрольные суммы, которые не являются криптографически безопасными и в основномлегко изменить документ так, чтобы они имели одинаковые контрольные суммы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...