Безопасная сериализация - PullRequest
0 голосов
/ 03 апреля 2009

Я пишу клиент / сервер, который позволит совместно использовать Данные клиента между нашим головным офисом и коммерческими сотрудниками компании.

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

Я планирую сериализовать ArrayList, чтобы данные клиентов можно было легко отправлять через Интернет. Насколько это безопасно? Должен ли я изучить шифрование какой-либо формы перед передачей сериализованного объекта?

Ответы [ 7 ]

4 голосов
/ 03 апреля 2009

Я бы не стал выполнять шифрование как часть сериализации.

Здесь есть две проблемы:

  1. Помещение объекта в форму, которая может быть передана, то есть сериализация.
  2. Проверка безопасности передачи.

1 и 2 - это отдельные проблемы, и объединение их в единое решение только создаст проблемы для вас в будущем.

Я бы использовал стандартную сериализацию, а затем использовал бы безопасный канал передачи, например TLS .

3 голосов
/ 03 апреля 2009

Полагаю, загляните в HTTPS.

2 голосов
/ 03 апреля 2009

Сериализация, gzip, затем отправка по HTTPS. Важно сохранить эти шаги в правильном порядке. Сжатие зашифрованных данных не работает. Шифрование несжатых данных занимает больше времени, а теоретически снижает безопасность.

2 голосов
/ 03 апреля 2009

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

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

Шифрование должно произойти, как только пакет битов будет готов к экспорту. Если вы общаетесь «вживую» с пунктом назначения - например, по сети, вам следует использовать SSL для защиты линии. К счастью, это так же просто: SslStream (MSDN) к вашему TcpClient. Обратите внимание, что шифрование только небольшого пакета битов в большем (незашифрованном) потоке обычно ложно защищено. Чтобы быть в безопасности, весь разговор должен быть безопасным.

Если, с другой стороны, вы храните биты (то есть в файле), то вам следует использовать какое-то автономное шифрование. Опять же .NET Framework обрабатывает все детали для вас; просто прикрепите объект CryptoStream к вашему FileStream и все готово.

2 голосов
/ 03 апреля 2009

Я планирую сериализовать ArrayList, чтобы данные клиентов можно было легко отправлять через Интернет. Насколько это безопасно?

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

Должен ли я изучить шифрование какой-либо формы, прежде чем передать сериализованный объект?

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

Конечно, вы можете использовать все три сразу.

2 голосов
/ 03 апреля 2009

Вы не должны думать о части сериализации. В конце процесса сериализации вы получаете данные (в двоичном или XML-формате), и вам следует рассматривать их как ненадежные.

Если ваш план состоит в том, чтобы безопасно передать его через Интернет, вам следует обратиться к HTTPS, но если вы планируете передавать его с помощью других средств, таких как электронная почта или передача файлов, или вам необходимо безопасно сохранить его или заархивировать, вероятно, вам следует изучить PKCS # 7 и соответствующие стандарты .

1 голос
/ 03 апреля 2009

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

Кроме того, как вы сказали, шифрование перед сериализацией поможет вам, вы можете использовать один секретный ключ с обеих сторон, вам необходимо безопасно хранить ключи и гарантировать, что они не будут доступны. Однако это не очень хорошо, потому что вы, возможно, захотите заменить их позже, и управление ключами может быть немного болезненным. Я бы сказал, придерживаться HTTPS / TCP + SSL

...