web-dev-qa-db-fra.com

Les charges udum des données UDP doivent-elles inclure un CRC?

Pour une entreprise, je devais travailler pour, je devais mettre en place un récepteur de socket qui a principalement pris des données sur une forme UDP sur une connexion locale à partir d'un matériel de capteur spécialisé. Les données en question étaient un paquet UDP bien formé, mais de manière intéressante, la charge utile de données est toujours terminée par une checksum CRC16 formée à l'aide du reste des données.

J'ai mis en œuvre le chèque à ma fin, selon la spécification, mais je me suis toujours demandé si cela était nécessaire. Après tout, le protocole UDP ne porte-t-il pas un CRC 16 bits? Par conséquent, bien que les paquets UDP puissent être perdus ou hors de l'ordre, j'ai eu l'impression qu'ils ne peuvent pas être corrompus sans être jetés par le matériel réseau avant d'atteindre les processus du système d'exploitation. Ou existe-t-il un cas particulier d'utilisation, je manque?

Il convient de souligner que je travaillais dans l'industrie de la défense, qui, comme je suis sûr que vous pouvez imaginer, aime être super-explicite de tout ce que ceci, alors je me demande si ce n'était qu'un cas de "OCD de sécurité". ..

17
Xenoprimate

le protocole UDP ne garantit pas que les messages sont livrés dans l'ordre ou livrés du tout, mais cela garantit que ces messages sont Les livrées sont livrées sont complètes et inchangées en incluant automatiquement un checksum de 16 bits. Cela signifie que l'ajout d'un autre contrôle de 16 bits sur la couche d'application est généralement redondant.

...d'habitude....

Tout d'abord, avec IPv4 (non IPv6), la somme de contrôle est en option . Cela signifie que vous utilisez peut-être une configuration exotique qui ne présente pas la génération et la validation de la checksum (mais dans ce cas, vous devriez plutôt corriger votre pile de réseau au lieu de le gréer en jury sur la couche d'application).

Deuxièmement, avec une somme de contrôle de 16 bits, une chance de 65536 est une chance d'un message complètement aléatoire ayant une somme de contrôle valide. Lorsque cette marge d'erreur est trop grande pour votre cas d'utilisation (et dans l'industrie de la défense, je pouvais imaginer plusieurs où il est), l'ajout d'une autre somme de contrôle CRC-16 le réduirait davantage. Mais dans ce cas, vous pourriez envisager d'utiliser un digeste de message approprié comme SHA-256 au lieu de CRC-16. Ou aller jusqu'au bout et utiliser une vraie signature cryptographique. Cela protège non seulement une corruption aléatoire, mais également une corruption intentionnelle par un attaquant.

Troisièmement, selon l'endroit où les données proviennent et où elles vont, cela pourrait être corrompu avant ou après avoir été envoyé sur le réseau. Dans ce cas, la somme de contrôle supplémentaire à l'intérieur du message peut protéger l'intégrité du message plus loin que simplement entre les deux hôtes réseau.

24
Philipp

UDP fournit une somme de contrôle.

  1. La somme de contrôle UDP n'est que de 16 bits. Cela signifie une chance de 1 sur 65536 d'un paquet corrompu qui passe la somme de contrôle.
  2. dans UDP sur IPv4, la somme de contrôle est facultative, un émetteur pourrait donc théoriquement finir par l'envoi d'un paquet sans somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de somme de contrôle.
  3. La somme de contrôle couvre les informations IP/Port ainsi que les données. Bien que cela soit utile dans la chute de paquets avec des adresses corrompues, cela signifie que si le paquet passe à travers A NAT la somme de contrôle doit être recalculé par le NAT.
  4. La somme de contrôle protège uniquement les données lorsqu'elle se déplace dans le paquet UDP. Un contrôle de niveau d'application peut protéger la fin de données à la fin, car elle passe à travers un système plus complexe.
  5. Le checksum UDP ne vous dit que si le paquet a été généré par une implémentation UDP. Cela ne vous dit pas que cela venait de votre capteur. Un contrôle de niveau d'application de l'autre côté peut aider à rejeter les paquets valides UDP, mais provenait d'une autre source.

Donc, je peux voir des raisons légitimes de ne pas faire confiance à la somme de contrôle UDP, mais également de ne pas faire confiance à la somme de contrôle UDP, puis de mettre en œuvre une somme de contrôle similaire au niveau de l'application semble étrange.

Il est possible que la personne qui désingère du protocole ne soit tout simplement pas sachée que UDP a fourni des checksums ou que le protocole est en réalité une légère variante d'une conçue pour fonctionner sur un milieu qui n'a pas fourni de somme de contrôle.

P.s. Étant donné que cet article est étiqueté, la sécurité est consciente que les checksums en question sont conçus pour protéger contre les changements inadvertistes. La protection contre la modification délibérée ou l'usurpation nécessite à la fois l'utilisation de fonctions de hachage cryptographiques qui résistent à des collisions/primages délibérées et à l'utilisation d'un mécanisme (par exemple, des signatures fabriquées à l'aide d'une clé publique) pour vérifier que les hachages n'ont pas été modifiés.

12
Peter Green