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 :

Compréhension de l'algorithme RC4


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Compréhension de l'algorithme RC4
    Bonjour,

    Voila je suis étudiant et j'ai un projet a rendre sur la sécurité des réseaux wifi, je me suis donc forcement intéressé a l'algorithme RC4, sauf que j'ai vraiment du mal a saisir le fonctionnement de cet algorithme, je vais mettre ci joint l'algorithme dans l'espoir que quelqu'un puisse m'aider...
    J'ai du mal a saisir le S[i]=i car pour moi i étant le pointeur, si i=2 on fait donc référence a l'élément de la case S[2] or si on fait S[i]=i on associe donc cette case au chiffre 2 ?
    L'algorithme que j'ai trouvé est celui sur wikipédia, rien de bien original, mais j'ai trouvé que c'est celui qui avait l'ai le plus simple ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pour i de 0 à 255
        S[i] := i
    finpour
    j := 0
    pour i de 0 à 255
        j := (j + S[i] + clé[i mod longueur_clé]) mod 256
        échanger(S[i], S[j])
    finpour
    et le deuxieme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    i := 0
    j := 0
    tant_que générer une sortie:
        i := (i + 1) mod 256
        j := (j + S[i]) mod 256
        échanger(S[i], S[j])
        octet_chiffrement = S[(S[i] + S[j]) mod 256]
        result_chiffré = octet_chiffrement XOR octet_message
    fintant_que
    le lien de la page wikipedia: http://fr.wikipedia.org/wiki/RC4

    Merci pour votre aide

    Titouan

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Bonjour,

    Quelle est ta question ?
    Je vois bien que tu demandes qu'on t'explique ... mais si on rédige un message de 200 lignes ... pour t'expliquer, ça va te servir ?
    Non.
    Tu seras encore plus perdu.

    - Tu as posté 2 bouts de codes, Pourquoi 2 portions de codes , tu as une idée ou non ?

    - Epluchons le premier 'programme' ; Est ce que tu as essayé d'exécuter ce programme ligne à ligne, sur une feuille de papier, pour voir ce que tu as dans tes différents tableaux quand ce programme a tourné...

    Fait cet effort, montre nous les étapes une par une ... mets les mains dans le cambouis, et peut-être que tu verras la magie faire son effet ?

    Dernier point, tu écris :
    J'ai du mal a saisir le S[i]=i car pour moi i étant le pointeur, si i=2 on fait donc référence a l'élément de la case S[2] or si on fait S[i]=i on associe donc cette case au chiffre 2 ?
    Moi je dirais plutôt qu'on associe le chiffre 2 à cette case, mais c'est peut-être parce que je suis trop rigoureux.
    Mais cette question que tu poses m'effraie.
    Si tu t'interroges sur cette ligne du programme, oublie temporairement ton exercice sur le cryptage et la sécurité du Wifi ... et revois très sérieusement les bases de la programmation. En faisant valider que les bases sont bien acquises.


    L'informatique , c'est comme le ski.
    Apparemment, tu n'es pas capable de descendre une piste verte, et tu t'attaques à une piste noire. C'est la gamelle assurée.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci de ta reponse, pour le S[i]=i si i=2 je comprend S[2]=2 c'est ce que je voulais dire, et ce que tu as dis en plus clair il me semble.
    EN ce qui concerne le tableau je fais ca tout de suite pour préciser ma question.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Alors, pour le pourquoi ces deux bouts de code, ils sont censé être la base de l'algorithme RC4 c'est a dire faire une permutation et ensuite modifier l'information en la combinant avec un code pseudo-aléatoire.

    Pour le premier je comprend bine que c'est une permutation, je voyais juste pas l'intérêt de faire S[i]=i ... c'est donc pour cette raison que je demandais si c'était bien ce qu'il se passait. le seul problème qu'il me reste sur ce code, est le "clé[i mod longueur_clé]" ce tableau "clé" n'est pas défini dans le code, est-il le morceau d'information que j'on veut crypter, ou tout autre chose que je n'ai pas saisi, le i mod longueur_clé étant l'équivalent de modulo 2pi en trigo non, sauf que ici on est sur la taille du tableau ?

    Pour le deuxième code, c'est plus compliqué pour moi...

    Déjà il y a une boucle while sans condition... je ne vois pas trop a quoi cela peut correspondre, une boucle infini peut etre ?
    jusque la ligne 6 c'est une simple permutation si je ne m'abuse... Apres on affecte a la variable octet_chiffrement la valeur du tableau S de coordonnées S[i]+S[J], par exemple, si S[i]=4 et S[j]=8 octet_chiffré serait egal a 12.

    Apres on effectue un ou exclusif, et la je n'ai pas réussis a saisir comment le programme traitait le ou exclusif ... j'ai bien compris que c'était l'un ou l'autre mais après ...


    J'espère avoir été plus précis, et que vous pourrez répondre a mes questions...

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    question 1 :
    ce tableau "clé" n'est pas défini dans le code, est-il le morceau d'information que j'on veut crypter, ou tout autre chose que je n'ai pas saisi ?

    Recherche "Clé de chiffrement" sur internet, ou directement ici :http://fr.wikipedia.org/wiki/Principe_de_Kerckhoffs :
    CLE n'est pas le message qu'on cherche à envoyer, c'est une CLE secrète, connue uniquement de l'expéditeur et du destinataire.



    Question n°2 :
    le i mod longueur_clé étant l'équivalent de modulo 2pi en trigo non, sauf que ici on est sur la taille du tableau ?

    Oui, on peut faire le parallèle avec la trigo.
    Mais ici, cette fonction Mod est plus simple. On parle de nombres ENTIERS, et pas de réels, comme on aurait en trigo.
    Et dans le cas de nombres entiers , le modulo, c'est tout simplement le reste de la division :

    mod (523,10) .. ça revient à diviser 523 par 10, et à regarder le reste de la division.
    523 divisé par 10, ça donne 52, et il reste 3, donc mod(523,10), ça vaut 3.



    Question n°3 :
    Déjà il y a une boucle while sans condition...

    Oui et non.
    Le code donné par Wikipédia ressemble à du code ... mais la syntaxe est très approximative.
    La fameuse ligne : '' tant_que générer une sortie: '' ne veut pas dire grand chose .. à toi de l'interpréter. Wikipédia est un outil qui vaut ce qu'il vaut, c'est un bon outil de vulgarisation, mais ce qu'on y trouve n'est pas toujours parfait.
    Par contre, dans ce même article Wikipédia, il y a du code PYTHON .... autrement dit du vrai code, dans un vrai langage informatique. Donc précis, et non plus approximatif.

    Et si tu arrives à lire ce code python, tu verras ce que devient cette instruction '' tant_que générer une sortie:''



    Question n°4 :
    Apres on effectue un ou exclusif, et la je n'ai pas réussis a saisir comment le programme traitait le ou exclusif ... j'ai bien compris que c'était l'un ou l'autre mais après ...

    Sur cette question, tu as tout faux, tu n'a pas du tout compris le OU exclusif.



    Tout le début du traitement consiste à mélanger des octets, INDEPENDAMMENT du message qu'on cherche à crypter.

    Et le seul endroit où le message à crypter intervient, c'est dans cette ligne :
    result_chiffré = octet_chiffrement XOR octet_message

    C'est donc essentiel de bien comprendre ce mot XOR.

    Un lien intéressant (mais un peu court) ici : http://www.primenumbers.net/Renaud/fr/crypto/XOR.htm



    Et pour pouvoir bien appréhender toutes ces notions autour du mot XOR, il faut absolument revenir aux fondamentaux : un ordinateur ne sait manipuler que des 0 et des 1. Tous les autres concepts sont systématiquement ramenés à des combinaisons de 0 et de 1.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord, merci d'avoir été si précis.

    Je pense avoir bien compris le fonctionnement des ces bouts de code, effectivement le fonctionnement de la fonction mod est plus simple que je ne l'avais pensé, pour le XOR c'est le fait que tu me dises que la machine travaillais que en binaire qui m'a fait comprendre, en faite j'avais deja vu le XOR en cours de SI, mais j'avais pas fait le lien, j'aurais du...


    Merci pour avoir pris le temps de me repondre, et pour moi le sujet est resolu

    Merci encore pour ton aide

    Titouan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Microsoft lance un appel à l'abandon définitif de l'algorithme RC4
    Par Cedric Chevalier dans le forum Actualités
    Réponses: 2
    Dernier message: 17/11/2013, 22h16
  2. implementation de l'algorithme RC4.c
    Par chaima01 dans le forum C
    Réponses: 11
    Dernier message: 11/11/2012, 23h25
  3. Réponses: 1
    Dernier message: 28/09/2011, 13h35
  4. Réponses: 0
    Dernier message: 27/09/2011, 18h07
  5. Compréhension d'un algorithme sur le problème du sac à dos
    Par Treuze dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 18/12/2006, 15h26

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