Создание несанкционированного доступа к подписи некоторых данных?

У меня есть часть данных. На данный момент это файл XML, но архитектура может измениться. Итак, давайте пока предположим, что это класс C#.

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

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

Мой общий подход заключается в использовании симметричного шифрования. Я генерирую Hash, т.е. SHA-512 из всех полей, а затем шифрую этот хэш и мои дополнительные данные, чтобы получить мою подпись, используя хэш в качестве пароля. Чтобы расшифровать, моя функция сгенерирует хеш из фактических данных в файле и попытается расшифровать подпись. Это не будет защищено от несанкционированного доступа, поскольку легко создать подпись, в которой дата подписания и дополнительная информация остаются неизменными.

Поскольку я не эксперт в этой области, я считаю, что я пытаюсь заново изобрести колесо, и что это не очень хорошее колесо. Мне просто интересно, есть ли какой-то стандартный подход? Я считаю, что часть моего запроса невозможна (в конце концов, если кто-то контролирует всю среду, этот человек также контролирует системное время), но я все еще задаюсь вопросом, как это обычно решается?

6 ответов

Решение

Для меня это звучит так, будто вы хотите сочетание цифровой подписи с безопасной цифровой меткой времени.

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

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

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

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

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

Ответ Джеффри Хантина - лучшее, что я думаю, ты сможешь сделать. Это не идеально, хотя:

1) Это не мешает вашей черной шляпе совершить полностью фальшивую сделку.

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

Возможно, вы захотите использовать PGP, используя GPGME (GnuPG Made Easy) - библиотеку, разработанную для облегчения доступа к GnuPG для приложений.

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

Вам нужна цифровая подпись с использованием асимметричной криптографии.

Эта статья, кажется, имеет несколько хороших примеров и объяснений.

Другие вопросы по тегам