2014-03-19 45 views
1

我見過一個c/C++程序,它使用CRC來檢查從TCP套接字接收到的數據。 我不明白爲什麼在應用程序中使用CRC。我相信只有在第2層到第4層才需要CRC,即鏈路層或傳輸層可能(網絡層也是?)。CRC是否有助於防止安全攻擊或保證數據的完整性?

但今天,我的同事告訴我,CRC有助於防止安全攻擊。他懷疑可能有攻擊者改變數據包。這是他在TCP套接字程序中需要CRC的原因。

但我仍然不能100%同意他。我認爲一個能夠改變數據包的攻擊者,我相信他也可以操縱CRC不被發現。

我認爲RSA是爲了這種安全。它是HTTP中的HTTPS和TCP中的SSL。 如果是這樣 - 如果我是對的 - 不需要CRC。而不是CRC加密算法是真正需要的算法。

我錯過了什麼嗎? CRC在TCP套接字編程中有用嗎?

+0

TCP在每個數據包中已經包含校驗和。這用於保證正確的交付。發生錯誤時,TCP將重新請求數據包。 – PaulG

+0

這個問題似乎是題外話題,因爲它是關於一般安全性,而不是編程。 –

+0

這個問題的重點不在於安全。關於套接字編程中CRC的必要性。我想知道爲什麼套接字程序員在TCP數據上使用CRC。 – Jeonghum

回答

0

首先,CRC和加密算法有很大不同。
CRC檢測到變化(有點運氣)。有更好的ECC甚至可以糾正一些錯誤的字節,但所有這些都可以被人類「欺騙」。

加密可以使用有或沒有ECC,獨立於它。
至少可以防止攻擊者通常讀取數據。

網絡層在這裏並不重要。 (因爲在每個正常網絡中都有錯誤,下面的層具有一些基本的錯誤控制,即CRC,並且他們設法重新發送錯誤的數據,這樣你作爲程序員就不會需要實現那個
但如果您需要100%可靠的數據,則內置的CRC是不夠的。)

您的同事對數據無法改變的看法完全是無稽之談。
是的,如果有人改變了它,他也將改變任何錯誤校正數據
(任何ECC數據是不是一個encryted裏面的東西(然後它也不會轉回去意義
因爲現代加密屬性算法))。
畢竟,ECC只是爲了防止技術錯誤。

我不同意像「需要RSA」這樣的泛化。
有許多加密系統具有不同的屬性和用途。
現在的問題是:你想用加密來防止什麼?
如果要防止攻擊者讀取發送給您的數據,至少可以選擇RSA。
如果您想阻止攻擊者可以向您發送自己的數據,那麼像RSA這樣的公共密鑰系統將不會有任何幫助。
...

而CRC等仍然是有用的,即使加密。
RSA不需額外的幫助你,如果一些比特的網線傳輸過程中改變
(恰恰相反,它會加重病情不但很少位將是壞,但整體塊。)
又說:是的,這每天都會發生。

1

但今天,我的同事告訴我,CRC有助於防止安全攻擊。

這完全是無稽之談。它防止任何事情。它可能會幫助檢測的一次攻擊,發生後已經發生。這不是一回事。

他懷疑可能有攻擊者改變數據包。這是他在TCP套接字程序中需要CRC的原因。

如果你的同事'懷疑可能有攻擊者',那麼他也可以解決這個攻擊,這在邏輯上是不連貫的。

我有一位熱衷於驗證TCP/IP流的同事。在1992-3。我從來沒有這樣做過,而且我從來沒有見過一個損壞的TCP下載。由於數據損壞,您有多少次需要重新下載任何內容?

+0

「我從來沒有見過損壞的TCP下載」。那麼你真的很幸運。我每月大約有一次損壞的文件(並且不,我不是在非洲叢林或類似的地方)。 (好吧,「問題」...我檢查了一些SHA等,它失敗了,然後重新下載,沒有更多的問題,但仍然...) – deviantfan

+1

在18年的互聯網下載中從未體驗過。 – EJP