Как убедиться, что связь между 2 точками не нарушена? - PullRequest
0 голосов
/ 15 июля 2011

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

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

Конечно, я могу зашифровать данные, но, поскольку их можно декомпилировать, это не сделает их на 100% безопасными.

Мы используем .net / c #.

спасибо!

Ответы [ 4 ]

6 голосов
/ 15 июля 2011

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

Например, предположим, что у вас есть клиент Алиса, пытающийся отправить сообщение на сервер, Боб.Является ли угроза:

  1. Третья сторона, Ева, может прослушивать канал связи.Алиса хочет, чтобы Боб понял сообщение, но Ева не должна понимать сообщение.

  2. Третья сторона, Мэллори, могла бы активно вмешиваться в канал связи.Боб хочет знать, не вмешивался ли кто-либо в попытку Алисы отправить сообщение.

  3. Ева и Мэллори работают вместе.Контролируя канал, Ева накопила записи ряда подлинных сообщений от Алисы Бобу.Несмотря на то, что она не может понять их, она считает, что они хорошие сообщения.Ева передает сообщения Мэллори.Мэллори вмешается в канал связи, так что Боб, кажется, получает действительные сообщения от Алисы, хотя Алиса не отправляет сообщения прямо сейчас.(Или Мэллори подделает канал так, чтобы текущее действительное сообщение Алисы было заменено предыдущим действительным сообщением.)

  4. Третья сторона, Мориарти, убила Алису и теперь отправляет сообщенияБобу, намеревающемуся прийти от нее.(Канал связи бескомпромиссен; у Мэллори и Евы выходной.) Боб хочет знать, действительно ли сообщение приходит от Алисы, как утверждается в сообщении.

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

1 голос
/ 15 июля 2011

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

Современное состояние проблемы такого типа включает в себя:

  • Создание защищенного от несанкционированного доступа клиентского кода (например, Как предотвратить декомпиляцию любого приложения C # )
  • Шифрование канала связи (вы можете использовать уровень сообщений и / или транспорт-уровневое шифрование в зависимости от вашей среды и потребностей)
  • Использование хеш-кода или аналогичного кода для определения того, была ли расшифрована передача (наличие соленого хеша затрудняет, а не делает невозможным изменение или подделку содержимого сообщения).
  • Следуя рекомендациям по защите вашего сервера как от удаленного, так и от физического доступа.
0 голосов
/ 15 июля 2011

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

http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx

, поскольку он предоставляет вам множество функциональных возможностей и представляет собой простое приложение типа drop-and-go.

тогда вы можете просто использовать https и веб-службы для включениябезопасная связь с 128-битным шифрованием (или лучше, если вы не пересекаете границы страны)

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

0 голосов
/ 15 июля 2011

Нет такой вещи, как "100% безопасность". Но да, одним из возможных способов было бы шифрование с подписью и доверенная третья организация (RCA), которая проверяет сертификаты.

...