安全序列化

时间:2009-04-03 08:42:39

标签: c# .net serialization tcp rmi

我正在编写一个客户端/服务器,允许客户数据在我们的总部和公司内部的移动销售人员之间共享。

服务器将客户数据下载并写入XML文件,但也将数据保存在内存中,以便它可以充当本地客户端。

我打算对ArrayList进行序列化,以便可以通过互联网轻松发送客户数据。这有多安全?在传输Serialized对象之前,我应该查看一些表单加密吗?

7 个答案:

答案 0 :(得分:4)

我不会将加密作为序列化的一部分来执行。

这里有两个问题:

  1. 将对象置于可传输的形式,即序列化。
  2. 确保传输安全。
  3. 1和2是单独的问题,将它们组合成一个解决方案只会在将来给自己造成问题。

    我会使用开箱即用的序列化,然后使用安全的传输渠道,如TLS

答案 1 :(得分:3)

我的猜测,请看一下HTTPS。

答案 2 :(得分:2)

你不应该考虑序列化部分。在序列化过程结束时,您将获得数据(二进制或XML),您应该将其视为不安全。

如果您的计划是通过网络安全地传输它,您应该查看HTTPS,但如果您打算通过电子邮件或文件传输等其他方式进行传输,或者您需要安全地存储或存档它,您可能应该看看PKCS#7 and related standards

答案 3 :(得分:2)

  

我打算对ArrayList进行序列化,以便可以通过互联网轻松发送客户数据。这有多安全?

像在明信片上打印并将其放入邮件一样安全。您和接收者之间的任何链接都可以看到内容。

  

在传输Serialized对象之前,我应该查看一些表格加密吗?

这是通常的做法。传输级别安全性,例如安全套接字,客户端和服务器之间的连接已加密,但消息显示在任何一端的“纯文本”中,或者您可以加密消息本身,然后在客户端中解密。加密消息而不是传输更复杂,因为它会影响更多层,但允许您保存消息或从客户端服务器更改为允许缓存的内容。如果您担心如果移动中的人丢失笔记本电脑会丢失信息,那么加密消息并仅在使用时解密它们可能会更好。 (另一种方法是加密驱动器,保存任何客户消息,保护所有内容,但也影响计算机上的所有内容,因此需要更改公司IT策略)。

你当然可以同时使用这三种。

答案 4 :(得分:2)

  

我打算序列化   ArrayList使客户数据   可以很容易地发送过   互联网。这有多安全?我是不是该   之前考虑一些表格加密   我传输Serialized对象?

加密不应该在序列化步骤中发生。要清楚:序列化是将对象转换为字符串。所有序列化都应该在明确的情况下完成,而不会在那里进行任何不必要的调整以使事情变得复杂。

一旦准备好导出数据包,就应该进行加密。如果您正在与目标进行“实时”通信(例如通过网络),则应使用SSL来保护线路。幸运的是,只需将SslStream (MSDN)附加到TcpClient即可。请注意,在较大(未加密)的流中加密一小部分比特通常是错误的安全性。为了安全起见,整个谈话应该是安全的。

另一方面,如果您要存储这些位(即在文件中),那么您应该使用某种脱机加密。同样,.NET框架为您处理所有细节;只需将CryptoStream对象附加到FileStream,即可完成。

答案 5 :(得分:2)

Serialize,gzip,然后通过HTTPS发送。保持这些步骤的正确顺序非常重要。压缩加密数据不起作用。加密未压缩数据需要更多时间,理论上降低了安全性。

答案 6 :(得分:1)

使用HTTPS或TCP over SSL取决于您的通信渠道。如果它需要在每一方安全地部署您的证书,并且其中的所有内容都是安全的。

另外正如您所说的,在序列化之前加密可以解决问题,您可以在两侧使用一个密钥,您需要安全地存储密钥并确保无法访问它们。然而,这并不是很好,因为您可能希望稍后更换它们,密钥管理可能会有点痛苦。我会说坚持使用HTTPS / TCP + SSL