Für ein Unternehmen, für das ich früher gearbeitet habe, musste ich einen Socket-Empfänger implementieren, der Daten in UDP-Form über eine lokale Verbindung von einer speziellen Sensor-Hardware abnahm. Die fraglichen Daten waren wohlgeformte UDP-Pakete, aber interessanterweise endete die Datennutzlast immer mit einer CRC16-Prüfsumme, die unter Verwendung der restlichen Daten gebildet wurde.
Ich habe die Prüfung an meinem Ende gemäß der Spezifikation durchgeführt, aber ich habe mich immer gefragt, ob dies notwendig ist. Ist das UDP-Protokoll nicht selbst mit einem 16-Bit-CRC ausgestattet? Obwohl UDP-Pakete verloren gehen oder nicht in der richtigen Reihenfolge vorliegen können, hatte ich den Eindruck, dass sie nicht beschädigt werden können, ohne von der Netzwerkhardware verworfen zu werden, bevor sie die Prozesse des Betriebssystems erreichen. Oder gibt es einen speziellen Anwendungsfall, den ich vermisse?
Es ist erwähnenswert, dass ich in der Rüstungsindustrie gearbeitet habe, was, wie Sie sich sicher vorstellen können, in all diesen Dingen sehr explizit ist. Daher frage ich mich, ob es sich nur um eine "Sicherheits-OCD" handelte. ..
quelle
Antworten:
Das UDP - Protokoll garantiert nicht , dass Nachrichten, um geliefert werden oder gar nicht bereitgestellt, aber es ist sicher , dass diese Botschaften , die sie geliefert bekommen vollständig und unverändert bleiben , indem sie automatisch ein 16-Bit - Prüfsumme enthalten. Das bedeutet, dass das Hinzufügen einer weiteren 16-Bit-Prüfsumme auf der Anwendungsschicht normalerweise redundant ist.
...in der Regel....
Erstens ist bei IPv4 (nicht IPv6) die Prüfsumme optional . Das bedeutet, dass Sie möglicherweise eine exotische Konfiguration verwenden, die keine Prüfsummengenerierung und -validierung durchführt (in diesem Fall sollten Sie jedoch lieber den Netzwerkstapel reparieren, anstatt ihn auf der Anwendungsebene zu manipulieren).
Zweitens besteht bei einer 16-Bit-Prüfsumme eine Wahrscheinlichkeit von eins zu 65536, dass eine vollständig zufällige Nachricht eine gültige Prüfsumme aufweist. Wenn diese Fehlerspanne für Ihren Anwendungsfall zu groß ist (und in der Verteidigungsindustrie könnte ich mir mehrere vorstellen, wo sie sich befindet), würde sie durch Hinzufügen einer weiteren CRC-16-Prüfsumme weiter verringert. In diesem Fall sollten Sie jedoch einen korrekten Message Digest wie SHA-256 anstelle von CRC-16 verwenden. Oder gehen Sie den ganzen Weg und verwenden Sie eine echte kryptografische Signatur. Dies schützt nicht nur vor zufälliger Beschädigung, sondern auch vorsätzlicher Beschädigung durch einen Angreifer.
Drittens, je nachdem, woher die Daten stammen und wohin sie gehen, können sie vor oder nach dem Senden über das Netzwerk beschädigt werden. In diesem Fall schützt die zusätzliche Prüfsumme in der Nachricht möglicherweise die Integrität der Nachricht weiter als nur zwischen den beiden Netzwerkhosts.
quelle
UDP bietet jedoch eine Prüfsumme.
Ich kann also berechtigte Gründe dafür erkennen, dass ich der UDP-Prüfsumme nicht vertraue, aber auch der UDP-Prüfsumme nicht und dann eine ähnlich schwache Prüfsumme auf Anwendungsebene implementiere.
Es besteht die Möglichkeit, dass die Person, die das Protokoll erstellt hat, einfach nicht weiß, dass UDP Prüfsummen bereitstellt, oder dass das Protokoll tatsächlich eine geringfügige Variante von einem ist, das für die Ausführung auf einem Medium ohne Prüfsummen ausgelegt ist.
PS, da dieser Beitrag mit Sicherheit gekennzeichnet ist, beachten Sie, dass die fraglichen Prüfsummen zum Schutz vor versehentlichen Änderungen vorgesehen sind. Der Schutz vor absichtlicher Änderung oder Fälschung erfordert sowohl die Verwendung kryptografischer Hash-Funktionen, die gegen absichtliche Kollisionen / Vorimages resistent sind, als auch die Verwendung einiger Mechanismen (z. B. Signaturen, die mit einem öffentlichen Schlüssel erstellt wurden), um zu überprüfen, ob die Hashes selbst nicht geändert wurden.
quelle