Подтвердить что ты не робот

Как я могу доказать сторонней стороне, что файл данных не был подделан?

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

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

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

В настоящее время я размышляю о том, что где-то в облаке размещается "файл журнала", доступный только для записи (предположительно, с провайдером, который сторонний аудитор найдет разумно заслуживающим доверия, например AWS), что мы можем записывать каждую заявку id и контрольной суммы, когда они происходят. В идеале этот файл удаленного журнала будет вести себя как журнал учета в старой школе - вы пишете только перо, поэтому вы никогда не сможете стереть предыдущую запись!

Другим вариантом может быть отправка этих почтовых квитанций стороннему поставщику архива электронной почты? (объем нашей истории сообщений настолько мал, это может не стоить разговора с поставщиком архива)

Есть ли у кого-нибудь предложение?

4b9b3361

Ответ 1

Самым безопасным решением для обеих сторон было бы заставить ваших клиентов подписывать свои материалы с действительным криптографическим сертификатом, чтобы они могли проверить вне всяких разумных сомнений в том, что материалы не были изменены.

Существуют также способы процедурного подписи и проверки на С#, это может дать вам представление об этом: http://blogs.msdn.com/b/alejacma/archive/2008/06/25/how-to-sign-and-verify-the-signature-with-net-and-a-certificate-c.aspx?PageIndex=1

Ответ 2

Хорошей новостью является то, что эта проблема (и может понравиться) может быть решена с помощью криптографии с открытым ключом. Плохая новость заключается в том, что разработка протокола - это работа для экспертов. В последний раз, когда у меня был один из них, я попросил парня по имени Брюс Шнайер помочь, но вокруг есть много других экспертов.

По существу, вы делаете что-то вроде этого. Сначала вы готовите криптографический дайджест документа. Это своего рода контрольная сумма, но она гарантирована быть уникальной и нерушимой. Никто не может создать другой документ с тем же самым дайджестом.

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

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

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