Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/01/2011, à 13:45

nordinatueur

[Résolu] Vérification md5 réflexive

Bonjour à tous !
## Solution au post 2 ! ##

J'ai un problème d'ordre plutôt mathématique...
J'aimerais qu'un script vérifie lui-même son intégrité, grâce à la fonction md5.

Par exemple, j'avais fait un test tout bête :
Voilà XXjouer.sh

#!/bin/bash
echo "Bazinga ! ";

Sa somme md5 :

$ md5sum XXjouer.sh
3ea6bf7146889440e5028b3b893470b2  XXjouer.sh

Et le script à exécuter :

#!/bin/bash 
md5=$( md5sum XXjouer.sh ); md5=${md5%% *}

if [[ $md5 = "3ea6bf7146889440e5028b3b893470b2" ]]; then
    ./XXjouer.sh;
fi;

Comme ça, ça marche très bien, et la moindre modification entraine l'inutilité du script...
Le problème c'est que c'est assez lourd et que ça ne permet pas de facilement de vérifier l'intégrité du fichier une fois modifié. Et le mettre dans un fichier à part n'est pas pratique, car ça rajoute un fichier ...

Ce que j'aimerais c'est que ce soit inscrit à la fin du fichier après un « exit .» Ce ne serait pas lu par le script et ça permettrait de le retrouver et le modifier facilement :

#!/bin/bash
....
....
exit
somme_md5_reflexive 3ea6bf7146889440e5028b3b893470b2

Le script n'aurait donc plus qu'à se lire lui-même, comparer la chaine md5 à la fin avec sa propre somme md5, et ainsi exécuter ou non le reste.
Le problème qui se pose ici c'est que comme indiqué plus haut, la moindre modification du script entraine un changement radical de la somme md5.
Je ne sais pas si on connait assez bien cette fonction md5sum pour en calculer un « point fixe .»

Car ce problème se résout finalement à :
* Si X représente le contenu utile du script (jusqu'à « exit »)
* et F : C → md5sum (X\nC), une fonction associée au script X. prenant une chaine quelconque de caractères et renvoyant une somme md5.
Il « suffit » alors de trouver un point fixe de F, ie une chaine C telle que F(C)=C.

J'ai lu/entendu quelquepart que quelqu'un a trouvé deux fichiers textes ayant une même somme md5, prouvant ainsi que ce n'est pas un « bon » (tout est relatif) cryptage pour vérifier l'intégrité d'un fichier. J'ai donc pensé qu'il est possible d'étudier cette fonction.

Merci d'avance pour votre aide.

Dernière modification par nordinatueur (Le 24/01/2011, à 18:38)


Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne

#2 Le 24/01/2011, à 14:29

chopinhauer

Re : [Résolu] Vérification md5 réflexive

nordinatueur a écrit :

Je ne sais pas si on connait assez bien cette fonction md5sum pour en calculer un « point fixe .»

Si on connaissait cela, on pourrait facilement engendrer des collisions.

nordinatueur a écrit :

J'ai lu/entendu quelquepart que quelqu'un a trouvé deux fichiers textes ayant une même somme md5, prouvant ainsi que ce n'est pas un « bon » (tout est relatif) cryptage pour vérifier l'intégrité d'un fichier. J'ai donc pensé qu'il est possible d'étudier cette fonction.

C'est possible, en tout cas l'attaque ne doit pas être trivial.

Tu devrais te limiter à vérifier le fichier entier, sauf le MD5, par exemple avec :

#!/bin/sh
somme1="ABCDEF012345…"
somme2=`tail -n -2 "$0" | md5sum`
if [ "$somme1" != "$somme2" ]; then
…

Dernière modification par chopinhauer (Le 24/01/2011, à 14:30)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 24/01/2011, à 18:37

nordinatueur

Re : [Résolu] Vérification md5 réflexive

Merci ! J'ai pensé à ça aussi, avec un champ facile à reconnaitre comme :
##MD5##3ea6bf7146889440e5028b3b893470b2
Qui en plus il serait facile à modifier avec sed, mais je n'avais pas pensé à l'enlever au moment du calcul de la somme...
Moi qui étais en train d'étudier le chiffrage md5 pour trouver une faille « simple »...

J'avais aussi imaginé le mettre dans le nom, mais ce n'est pas pratique d'utiliser des fichiers avec ce genre de noms...

Je passe en résolu !


Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne

#4 Le 24/01/2011, à 21:10

ehmicky

Re : [Résolu] Vérification md5 réflexive

Salut,
J'ai l'impression pour les checksums :
  - ou tu veux vérifier l'intégrité des données contre un accident (problème de transfert, etc.), auquel cas tu as beaucoup moins à te soucier des risques de collusion, et auquel cas ça vaut le coup de mettre la checksum dans les data (paquets TCP, .deb, etc.).
  - ou tu veux la vérifier contre une corruption volontaire, et alors si tu sépares pas la checksum du fichier, la checksum sert plus à rien car elle pourra être corrompue avec le fichier.
Or tu veux les deux, mais je crois pas que ce soit possible.

Dernière modification par ehmicky (Le 24/01/2011, à 21:13)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#5 Le 25/01/2011, à 05:26

nordinatueur

Re : [Résolu] Vérification md5 réflexive

C'est surtout pour une protectioin personnelle.
J'ai pas mal de scripts divers maintenant. Et quand j'en crée d'autres, ils peuvent par mégarde modifier les scripts existants. Voire de modifier eux-mêmes !
Donc en faisant des back-ups et en faisant en sorte que tous mes nouveaux scripts vérifient leur intégrité avant exécution et envoient une alerte s'ils sont modifiés malencontreusement, je pourrai facilement détecter une modification ou une erreur causée par le remplacement d'un script.

Déjà que je rajoute pour tous mes nouveaux scripts cette fonction :

continuer=false;
until ${continuer}; do
case $1 in
-e|-E) shift; vim -p $0;;
-d|-D) shift; exec 1>$0.log;;
*) continuer=true ;;
esac;
done;

Et autres fonctions si nécessaire, pour faciliter l'utilisation de chaque script.
J'aimerais que ce « header » contienne une fonction de vérification md5 intégrée.
Autrui n'est pas mon souci premier, car un script téléchargé n'est pas exécutable à priori ! Bien sûr il faut faire attention à la longue, mais mon ennemi récurrent est l'auteur même des scripts qui modifient les fichiers à leur portée.

EDIT : Dans un script, un des formats les plus ouverts de programmation... Empêcher la corruption volontaire est quasi-inutile.
Sauf peut-être, et ce n'est pas forcément évident, quand le script fait 500Mo (script d'installation de Mathematica pour linux par exemple.)
Et quand il vaut mieux être une machine pour le comprendre.

Dernière modification par nordinatueur (Le 25/01/2011, à 05:31)


Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne