IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

choix d'un algo de checksum


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut choix d'un algo de checksum
    Voila j'ai à réaliser une application de type client/serveur de transfert de données par le web, ces données sont confidentielles, elle sont donc cryptées (AES 256bits), transportées par une liaison sécurisé (SSH2 256 bits).
    De plus la contrainte d'intégrité sur ces données est très forte, je me suis donc dit pourquoi ne pas effectuer une somme de controle sur ces données. Voila donc a quoi j'ai pensé :

    Client traite les données -> calcul le checksum -> envoi données et checksum

    Serveur recoit les données et checksum -> calcul le checksum -> compare a celui reçu -> Ok ou non et suite du traitement

    Bon jusque la ca parait cohérent, mais je me demandait vu que le checksum transite aussi sur le réseau, il peut se retrouver lui même altéré et donc ne plus vouloir rien dire vis à vis des données ??

    Es ce que ma technique est quand même un bon moyen de s'assurer de l'intégrité des données ou es ce du vent vis à vis du reste des dispositions (liaison sécurisé ...) ou simplement de la problématique du dessus ?

    Si oui que choisir comme algo de checksum : j'ai repéré MD5, SHA-1 ou d'autres sont plus adaptés à ma situation?

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Pas de problème dans le raisonnement.
    Pour l'anecdote, avec certaines fonction polynomiales de composition de checksum, on peut calculer à l'envoi "checksum_à_envoyer=checksum(donnees_à_envoyer)", envoyer "données_à_envoyer+checksum_à_envoyer" et controler à la réception que "checksum(données_reçues+checksum_reçu)"=0. C'est élégant, mais ça revient à controler que "checksum_reçu=checksum(données_reçues)

    Dans l'aviation (applications vitales "safety critical"), on utilise un checksum de 4 octets et non 2 octets qui a été jugé trop faible.

    Avec un checksum de 4 octets, la probalité de ne pas détecter une erreur en cas de corruption de données ou du checksum est quasi nullle.

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut Re: choix d'un algo de checksum
    Citation Envoyé par K-Kaï
    Bon jusque la ca parait cohérent, mais je me demandait vu que le checksum transite aussi sur le réseau, il peut se retrouver lui même altéré et donc ne plus vouloir rien dire vis à vis des données ??
    Bien sûr, mais vu la nature des fonctions de checksum, s'il a été altéré, il n'y a qu'une chance véritablement infime que les données ait aussi été altérée pour correspondre au nouveau checksum. Donc la situation sera traitée comme une erreur et les données réenvoyées, ce qui est ce qu'on veut puisqu'on ne peut pas s'assurer de l'intégrité des données.

    --
    Jedaï

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Merci, merci pour les réponses ca va j'étais pas trop à la masse sur le coup

    Et sinon concernant l'algo, pensez vous que SHA-1 convienne?
    Ou ya t'il quelque chose de mieux car SHA-1 est visiblement assez "lent" et les données à envoyer peuvent être relativement consequentes (plusieurs centaines de Mo possible voir des Go) mais en contrepartie la contrainte d'intégrité se doit également d'être costaud.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    En algo de checksum, il existe aussi MD5, mais je ne suis pas assez spécialiste pour connaitre ses détails.

    En revanche, juste une petite digression : tu dis vouloir transférer des données sécurisées. Les précautions que tu prends sont bonnes, mais as-tu pensé à vérifier les machines émétrices et réceptrices ?

    En effet, la gestion de certificats pour l'établissement de la connexion permet d'éviter un certain nombre d'attaque (type Man in the middle), et rendra ton transfer encore plus sécurisé.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Par gestion de certificats, tu veux parler par exemple de SSL ? Dans ce cas, oui c'était une solution envisagé en alternative à SSH. Sinon tu veux parler de quoi par exemple ?

    En quoi ce genre de solution protège plus qu'un tunnel crypté SSH? je ne vois pas trop non plus comment on peut avoir une attaque "man in the middle" par SSH.

    Sinon pour ce qui est du chacksum, oui je connais aussi MD5 qui en temps de calcul n'est pas très loin de SHA-1 (mais moins sure), je voulais juste savoir si ce n'était pas un peu trop lourd en traitement sur des grosses données et si donc d'autres solutions éxistait, un CRC-32 par exemple serait t'il suffisant ?

  7. #7
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Voici l'algo de calcul de checksum que j'utilise :

    - initialiser C0, C1,C2,C3 à 0
    - traiter chaque octet du buffer en:
    . ajoutant la valeur de l'octet i à C0
    . ajoutant C0 à C1, C1 à C2 et c2 à C3
    - A la fin, [pour que cheksum(buffer!!checksum(buffer))=0],
    . X0=-(C0+C1+C2+C3)
    . X1=C1+2*C2+3*C3
    . X2=-(C2+3*C3)
    . X3=C3


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var buffer : array[1..MAXBUFFERLENGTH] of byte;
          X           : array[0..3] of byte ;
          i,n,C0,C1,C2,C3 : integer ;
    begin
    n:=bs.ByteCount ;
    C0:=0 ; C1:=0 ; C2:=0 ; C3:=0 ;
    for i:=0 to n-1 do begin 
        C0:=AddBytes(C0,buffer[i]) ; C1:=AddBytes(C1,C0) ; 
        C2:=AddBytes(C2,C1       ) ; C3:=AddBytes(C3,C2) ; 
       end ;
    X[0]:=invertbyte( AddBytes(C0,AddBytes(C1,AddBytes(C2,C3 ))) ) ; // X0=-(C0+C1+C2+C3)
    X[1]:= AddBytes(C1,AddBytes(C2,AddBytes(C2,AddBytes(C3,AddBytes(C3,C3))))) ; // X1=C1+2*C2+3*C3
    X[2]:=invertbyte( AddBytes(C2,AddBytes(C3,AddBytes(C3,C3))) ) ; // X2=-(C2+3*C3) ;
    X[3]:=C3                                                    ; // X3=C3
    // return checksum of Buffer (in X)
    ...
    end ;
    // code des fonctions InvertByte et Addbyte
    (**)function invertbyte(ii:integer): byte ;
        begin if ii=0 then result:=0 else result:=255-ii ; end ;
    (**)function Addbytes(i1,i2:integer): byte ;
        begin result:=(i1+i2) mod 255 ; end ;

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Merci bien Graffito ca peut toujours servir ce genre de chose (bon c vrai dans mon cas je n'es pas a developper l'appli, juste établir un cahier des charges). Ton algo porte t'il un nom, enfin je ve dire es ce un algo connu (pas de moi visiblement ) ou issu de tes propres recherches ?

    Sinon j'avance un peu et je vois que SSH effectue un contrôle d'intégrité sur les données qui transite, chaque paquet est vérifié.
    D'où ma question : si SSH vérifie chaque paquet, est t'il nécessaire de remettre une couche de vérification d'intégrité au dessus sur le fichier complet ?

    D'avis personnel je dirais oui, mais je n'est pas encore assez de pratique pour affirmer des choses comme ca dans un problème aussi délicat que l'intégrité des données. La peur de pas en faire assez et de ne pas avoir une appli fiable et son contraire : trop en mettre et pénaliser les perf de l'appli (mine de rien un checksum type MD5 sur un fichier de plusieurs centaines de Mo c'est pas de l'instantané).

  9. #9
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    L'algo proposé est celui spécifié récemment par l'OACI pour les appli datalink utilisées pour la transmission des messages entre pilotes et contrôleurs.

    C'est probablement un algo connu, mais les doc OACI ne spécifient pas le nom ou la source.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    C'est noté merci du renseignement Msieur

    Sinon pour ma dernière question (cf post ci-dessus) des avis ?

  11. #11
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    D'une façon générale, Il y a toujours interet à mettre un checksum dans les données applicatives. Celà permet de contrôler l'integrité sans se préoccuper des protocoles utilisés, en particulier lorsque l'info va transiter en utilisant différents protocoles ou encapsulation.

    Dans l'exemple datalink aviation, on a pour une liaison :
    - un protocole spécial pour la transmission hertzienne entre avion et station de réception sol,
    - un protocole aviation entre le routeur de la station de réception et le réseau de télécom
    - des protocoles réseau standard dans le réseau de télécommunication,
    - le même protocole aviation entre le routeur du centre de contrôle et le frontal du centre de contrôle,
    - un protocol TCP/IP entre le le frontal et le système info du du centre de contrôle.

    Et j'ai simplifié ....

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Merci, merci. On est bien d'accord, c'est ce à quoi je pensais mais j hésitais en raison du temps que peut prendre une somme de controle sur d'importante données. Du coup un pti SHA-1 et zouuuuuuuuuuuuu

Discussions similaires

  1. Aide pour choix d'un projet en Algo & Prog
    Par Ravnos dans le forum Delphi
    Réponses: 13
    Dernier message: 06/03/2013, 20h41
  2. choix algo chiffrement symétrique
    Par sky_java_seb dans le forum Sécurité
    Réponses: 0
    Dernier message: 01/02/2009, 17h10
  3. choix d'algo d'encryptage (Java JCA)
    Par sky_java_seb dans le forum Sécurité
    Réponses: 0
    Dernier message: 27/01/2009, 16h52
  4. Choix de conteneur pour un algo
    Par tnarol dans le forum SL & STL
    Réponses: 7
    Dernier message: 03/12/2008, 08h55
  5. Choix et calcul CRC, checksum,md5
    Par mercure07 dans le forum C++
    Réponses: 1
    Dernier message: 22/04/2008, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo