Самый легкий способ подписаться/сертифицировать текстовый файл в C++?

Я хочу проверить, вмешались ли в текстовые файлы журнала, созданные моей программой, выполняемой на сайте моего клиента. Как Вы предлагаете, чтобы я пошел о выполнении этого? Я искал набор здесь и Google, но не мог найти мой ответ.Спасибо!

Править: После чтения всех предложений до сих пор вот мои мысли. Я хочу сохранить это простым, и так как клиент не то, что компьютер savy, я думаю, что безопасно встроить соль в двоичный файл. Я продолжу искать простое решение с помощью ключевых слов "соленый хеш контрольной суммы" и т.д. и отправлять назад здесь, после того как я нахожу тот.

9
задан mrucci 1 October 2012 в 09:06
поделиться

5 ответов

Обязательная преамбула: Сколько здесь поставлено на карту? Вы должны предполагать, что фальсификация возможна, но вы можете очень усложнить ее, если потратите достаточно времени и денег. Итак: сколько это стоит для вас?

Тем не менее:

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

5
ответ дан 4 December 2019 в 22:27
поделиться

Это довольно сложная задача, если вы не можете каким-либо образом защитить пару ключей, используемую для подписи данных. Для подписи данных требуется закрытый ключ, и если этот ключ находится на машине, человек может просто изменить данные или создать новые данные и использовать этот закрытый ключ для подписи данных. Вы можете хранить закрытый ключ на «защищенной» машине, но как тогда гарантировать, что данные не были подделаны до того, как они покинули исходную машину?

Конечно, если вы защищаете только данные в движении, все становится намного проще.

Подписать данные легко, если вы можете защитить закрытый ключ.

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

1
ответ дан 4 December 2019 в 22:27
поделиться

Это действительно зависит от того, чего вы пытаетесь достичь, что поставлено на карту и каковы ограничения.

По сути: то, о чем вы просите, просто невозможно (по отдельности).

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

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

Если у вас есть сеть, вы можете сохранить хэш на удаленном (находящемся под вашим контролем) диске, а затем сравнить хеш. Здесь 2 трудности:

  • Хранение (как убедиться, что это ваш двоичный файл?)
  • Извлечение (как убедиться, что вы разговариваете с правильным сервером?)

И, конечно же, в обоих случаях остерегайтесь человека в средних синдромах ...

И последний совет: если вам нужна безопасность, вам нужно проконсультироваться с настоящим экспертом, не полагайтесь на каких-то странных парней (вроде меня), говорящих на форуме. Мы любители.

1
ответ дан 4 December 2019 в 22:27
поделиться

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

1
ответ дан 4 December 2019 в 22:27
поделиться

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

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

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

  • изменение размера файла
  • попытка переименования файла или папки
  • удаление файла и т.д.

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

Window API для мониторинга папки приведен ниже:

HANDLE FindFirstChangeNotification(
LPCTSTR lpPathName,
BOOL bWatchSubtree,
DWORD dwNotifyFilter
);

lpPathName: 
Path to the log directory.

bWatchSubtree:
Watch subfolder or not (0 or 1)

dwNotifyFilter:
Filter conditions that satisfy a change notification wait. This parameter can be one or more of the following values. 
FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_DIR_NAME
FILE_NOTIFY_CHANGE_SIZE
FILE_NOTIFY_CHANGE_SECURITY
etc... 
(Check MSDN)

Как заставить его работать?

Подозреваемый A: Наш процесс

Подозреваемый X: Другой процесс или пользователь

Inspector: Процесс, который мы создали для мониторинга папки.

Инспектор видит изменения в папке. Запрашивает у подозреваемого А, вносил ли он в нее какие-либо изменения.

если да,

change is taken as VALID.

если нет

clear indication that change is done by *Suspect X*. So NOT VALID! 
File is certified to be TAMPERED.

Кроме этого, ниже приведены некоторые приемы, которые могут (или не могут :)) помочь вам!

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

  2. Измените привилегию файла на только для чтения после записи в него журналов. Если какая-то программа или кто-то захочет подделать файл, он попытается изменить свойство "только для чтения". Это действие изменяет дату/время модификации файла.

  3. Записывайте в файл журнала только зашифрованные данные. Если кто-то подделает его, то при расшифровке данных мы можем обнаружить, что какой-то текст расшифрован неправильно.

  4. Использование механизма сжатия и разжатия (сжатие может помочь вам защитить файл с помощью пароля)

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

0
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: