CRC有助于防止安全攻击或保证数据的完整性吗?

时间:2014-03-19 08:47:15

标签: security ssl tcp crc

我见过一个c / c ++程序,它使用CRC来仔细检查来自TCP套接字的接收数据。 我不明白为什么在应用程序中使用CRC。我认为CRC仅在第2层到第4层需要,即链路层或传输层可能(网络层也是?)。

但今天,我的同事告诉我,CRC有助于防止安全攻击。他怀疑可能有攻击者改变数据包。这就是他在TCP套接字程序中需要CRC的原因。

但是我仍然不能100%同意他的看法。我认为一个能够改变数据包的攻击者,我相信他也可以操纵CRC不被捕获。

我认为RSA就是为了这种安全。它是HTTP中的HTTPS和TCP中的SSL。 如果是这样 - 如果我是对的 - 不需要CRC。而不是CRC加密算法是真正需要的算法。

我错过了什么吗? CRC在TCP套接字编程中有用吗?

2 个答案:

答案 0 :(得分:2)

  

但今天,我的同事告诉我,CRC有助于防止安全攻击。

这完全是胡说八道。它什么都没有阻止它可能有助于检测攻击 之后发生。它不是一回事。

  

他怀疑是否有攻击者会更改数据包。这就是他在TCP套接字程序中需要CRC的原因。

如果你的同事怀疑可能会有攻击者,那么他在逻辑上也是不连贯的,也不能为攻击提供解决方案。

我有一位热衷于验证TCP / IP流的同事。在1992-3。我从来没有这样做过,而且我也从未见过TCP下载损坏。由于数据损坏,你有多少次不得不重新下载?

答案 1 :(得分:0)

首先,CRC和加密算法完全不同 CRC检测到变化(运气不错)。有更好的ECC,甚至可以 纠正一些错误的字节,但所有这些都可以被人类“欺骗”。

加密可以与ECC一起使用,也可以不与ECC一起使用 并且它至少可以防止攻击者可以读取数据。

网络层在这里并不重要 (因为每个普通网络都有错误,所以底层有一些基本的 错误控制,即。 CRC,他们设法重新发送不良数据,以便你作为程序员不会 需要自己实现。但是,如果您需要~100%可靠的数据,内置的CRC将是 不够。)

你的同事所说的数据无法改变是完全无稽之谈 是的,如果有人改变了,他也会改变任何纠错数据 (任何不在加密物内的ECC数据(然后它就没有意义了) 因为现代加密算法的特性)) 毕竟,ECC只是为了防止出现技术错误。

我不同意像“需要RSA”这样的概括 有许多具有不同属性和用途的加密系统 问题是:你想用加密防止什么?
如果您想防止攻击者可以读取发送给您的数据,请执行 RSA至少是一种可能的选择 如果您想防止攻击者向您发送自己的数据, 像RSA这样的公钥系统根本不会有任何帮助 ...

即使加密,CRC等仍然有用 如果在网络电缆传输期间某些位发生变化,RSA将无法帮助您 (恰恰相反,情况会更糟。不仅几点不好,而是整块) 再说一遍:是的,每天都会发生这种情况。