Питон:шифрование как средство предотвращения подделки данных

StackOverflow https://stackoverflow.com/questions/1178789

Вопрос

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

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

Я рассматриваю возможность использования Python для быстрой разработки другого программного обеспечения.Чтобы дублировать функциональность шифрования и предотвратить подделку данных, лучшая идея, которую я придумал на данный момент, — это просто использовать ctypes с DLL для операций чтения/записи файлов, так что метод шифрования и дешифрования «достаточно» запутан.

Мы прекрасно понимаем, что «невзламываемый» метод недостижим, но в то же время меня явно не устраивает, что подходы к шифрованию/дешифрованию просто хранятся в виде обычного текста в исходном коде Python.Я думаю, что «очень решительное препятствование фальсификации данных» было бы достаточно.

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

Это было полезно?

Решение

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

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

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

Другие советы

Если вы куда-то встраиваете пароли, вас уже забанили.Вы не можете ничего гарантировать.

Однако вы можете использовать шифрование с открытым/закрытым ключом, чтобы убедиться, что данные не были подделаны.

Вот как это работает:

  1. Вы генерируете пару открытый ключ/закрытый ключ.
  2. Храните закрытый ключ в безопасности, распространяйте открытый ключ.
  3. Хешируйте данные, а затем подпишите хэш закрытым ключом.
  4. Используйте открытый ключ для проверки хеша.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top