【发布时间】:2013-08-20 17:32:18
【问题描述】:
我们有一个用 C# 编写的 TCP/IP 套接字服务器,用于将二进制文件传输到客户端。例如,剪辑、图像。正在使用带有回调的异步 BeginSend/EndSend 来发送 byte[] 缓冲区。
新要求是对正在传输的数据进行加密。每个客户端连接都将提供一个加密密钥供服务器使用。实际的加密算法并不那么重要,即目标是简单地确保数据不会以明文形式发送。即使 RC2CryptoServiceProvider 具有 40 位密钥也足够了......与 RC2 相比,具有 128 位密钥的 RijndaelManaged 是一种过度杀伤并且相当占用 CPU 资源。
当然可以先生成数据文件的加密版本,然后再传输它们。但理想情况下,我们应该在从文件中读取数据并在套接字上发送时动态加密文件。鉴于数据文件的大小,将整个文件内容读取到内存既不高效也不可扩展。
在动态加密文件中的数据以发送到套接字对等点时,是否有一些好的模式可以遵循?
【问题讨论】:
-
C# 到 C#?您应该使用 WCF。
-
您将如何告诉您的客户用于加密数据的密钥?如果不是 HTTPS/SSL,那你就错了。
-
使用 TLS,如有必要,使用 RC4 密码。
-
我们在同一台机器上确实有另一个 WCF 服务器。该服务器是实际生成所需“内容”资源(图像、剪辑等)的服务器。当资源可用时,为了响应请求,WCF 回调将通过 keys 发送给客户端客户使用。实际传输不通过 WCF 执行 - 我们对二进制传输进行了基准测试,WCF 的开销有其惩罚。相反,我们的 TCP 套接字服务器使用异步重叠 I/O 来传输二进制内容...
-
您想防范哪些类型的攻击?如果您将密钥与数据一起发送,即使是最简单的窃听攻击,加密也毫无用处。还是您有更具体的想法?
标签: c# .net sockets cryptography asyncsocket