我正在开发一个通过UDP传输加密文件的应用程序(是的;我知道UDP通常不用于文件传输,但这是一个边缘情况),并且想知道它是否值得添加额外的开销数据包的额外校验和。我知道UDP数据包不会“损坏”,但是增加额外的校验和是否值得呢?
答案 0 :(得分:6)
UDP上的加密文件
如果加密,则加密必须包含HMAC。此外,如果你加密,你必须有一个会话密钥交换协议(通过UDP?暂时忽略它),你必须为每个UDP数据包生成一个随机的IV 并将此IV包含在数据包中。如果您不采取这些预防措施(每个数据包单独IV,添加HMAC),那么您的加密基本上是无用的。如果您有HMAC,则不需要校验和。
答案 1 :(得分:1)
UDP已经有16位校验和,理论上可能存在冲突的可能性很小。
你肯定想要部分校验和。如果你有一个需要一天传输的1TB文件然后你得到一个哈希失败,这会让你非常难过。
懒惰解决方案:哈希每兆字节左右?也许或多或少,眼球一点。
正确的解决方案:编写一个应用程序,使用您的UDP传输规范发送随机数据和哈希值。查看失败的百分比,(奖励:找到应用中的大量错误并提前修复)估计应该散列的数据大小。
在这个问题上偷懒可能不是什么大不了的事。试想一下,你有多少时间可以失败? 99%的用例在那段时间内会传输多少数据?这就是你应该在中间散列多少数据。
答案 2 :(得分:0)
UDP数据包已经有校验和来检测损坏。我不认为添加另一个校验和可以改善任何事情。但是,您可能对Hash Trees感兴趣。
哈希树可用于保护在计算机之间和之间存储,处理和传输的任何类型的数据。目前,哈希树的主要用途是确保从对等网络中的其他对等体接收的数据块未受损害且未经更改地接收,甚至检查其他对等体不会撒谎并发送伪块。
答案 3 :(得分:0)
这取决于你。如果您需要非常高的可靠性,可以添加CRC32计算。
因此计算UDP数据包的校验和:“所有16位字都使用一个补码算术求和。然后求和,得到UDP校验和字段的值。”
...在现有的校验和中,您似乎拥有相当高的但并非万无一失的可靠性。
答案 4 :(得分:0)
可能不是,因为他们已经有校验和。添加第二个并不能帮助那么多,除非你真的担心UDP校验和没有接收的边缘情况。
答案 5 :(得分:0)
我会说是的。如果我记得,IPV4级校验和对于UDP流是可选的。 IPV6强制要求。
答案 6 :(得分:0)
鉴于UDP已经执行校验和(一个补码)并且加密算法也有某种类型的完整性检查(您没有说明您正在使用哪种类型的加密,但大多数已建立的加密方案都具有完整性检查) ,我认为没有必要添加额外的校验和。话虽如此,我将指出您需要了解如何报告UDP和加密完整性故障。我认为chacksum失败被报告为SocketException,错误代码设置为WSANO_RECOVERY 11003.显然,如何报告加密方案,e取决于方案。然后,您必须决定将要采取的措施。在数据包级别捕获它允许请求再次发送该数据包,假设发送方跟踪每个数据包中的内容。这可能会变得很复杂,这是很多人最终只使用TCP。
希望有所帮助。