logo Homepage
+  NewbieContest
|-+  Divers» Hacking» Length extension attack
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Length extension attack  (Lu 7894 fois)
poute35

Profil challenge

Classement : 347/54770

Néophyte
*
Hors ligne Hors ligne
Messages: 25


Voir le profil WWW
« le: 19 Septembre 2019 à 14:20:31 »

Bonjour,
J'essaie de comprendre le Length extension attack.
Pouvez vous me dire pourquoi les deux valeurs ne donnent pas le même hash ?
Code:
<?php
$Value1 
sha1(urldecode("%73%65%63%72%65%74%64%61%74%61%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%50"));
$Value2 sha1(urldecode("%73%65%63%72%65%74%64%61%74%61"));
?>


Merci
« Dernière édition: 19 Septembre 2019 à 14:22:18 par poute35 » Journalisée

Over hack
flob
Administrateur

Profil challenge

Classement : 20/54770

Membre Junior
*****
Hors ligne Hors ligne
Messages: 74


Voir le profil WWW
« #1 le: 19 Septembre 2019 à 18:10:02 »

Salut,

Le fait d'avoir le même hash ça s'appel une collision.

Cette attaque ne permet pas de générer une collision.

Tu trouveras beaucoup de documentations à ce sujet sur internet. Tu peux d'ailleurs commencer par la page Wikipedia
Journalisée

Newbie Contest Staff :
Flob
Statut :
Administrateur
Citation :
...
Blog :
elrindel.github.io
poute35

Profil challenge

Classement : 347/54770

Néophyte
*
Hors ligne Hors ligne
Messages: 25


Voir le profil WWW
« #2 le: 19 Septembre 2019 à 18:11:57 »

Merci pour ta réponse mais je ne souhaite pas faire de collision.
Ce que j'ai ajouté c'est le padding.
Journalisée

Over hack
flob
Administrateur

Profil challenge

Classement : 20/54770

Membre Junior
*****
Hors ligne Hors ligne
Messages: 74


Voir le profil WWW
« #3 le: 19 Septembre 2019 à 18:38:01 »

Pouvez vous me dire pourquoi les deux valeurs ne donnent pas le même hash ?

Je répondais simplement à ta question ^^ C'est tout à fait normal que les deux valeurs ne donnent pas le même hash (puisque le but de cette attaque n'est pas de générer un collision) 

Donc oui t'as ajouté un padding pour tenter une "length extension attach" mais si tu l'as fait dans l'espoir d'avoir le même hash alors c'est pas la bonne démarche.

Le concept de base de cette attaque est très bien expliqué dans le premier paragraphe de la page Wikipédia.
Journalisée

Newbie Contest Staff :
Flob
Statut :
Administrateur
Citation :
...
Blog :
elrindel.github.io
poute35

Profil challenge

Classement : 347/54770

Néophyte
*
Hors ligne Hors ligne
Messages: 25


Voir le profil WWW
« #4 le: 19 Septembre 2019 à 18:41:04 »

J'ai du louper un truc
Pour moi les deux valeurs sont les mêmes vu de l'algo du sha1.
De ce que je comprends sur le site de PIXIS:

"Le premier bloc que nous avons pris soin de créer est exactement le même que celui produit par sha1..."
https://beta.hackndo.com/hash-length-extension/

Dans son exemple, les deux bloc donnent le même sha1:

4d 6f 6e 53 33 63 72 65  74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64  6d 69 6e 3d 30

et

4d 6f 6e 53 33 63 72 65  74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64  6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 E8
« Dernière édition: 19 Septembre 2019 à 18:44:45 par poute35 » Journalisée

Over hack
flob
Administrateur

Profil challenge

Classement : 20/54770

Membre Junior
*****
Hors ligne Hors ligne
Messages: 74


Voir le profil WWW
« #5 le: 19 Septembre 2019 à 19:21:11 »

L'article de pixis est très bien fait mais tu ne dois pas t'arrêter à cette étape. Si tu vas jusqu'au bout tu verras que ça fonctionne !

Citation
Le premier bloc que nous avons pris soin de créer est exactement le même que celui produit par sha1...
Pour ce qui est de cette phrase, elle est tout à fait juste.
Tu devrais relire tout le début de l'article ( les chapitres avant "Cas pratique" ) afin de mieux comprendre.
Journalisée

Newbie Contest Staff :
Flob
Statut :
Administrateur
Citation :
...
Blog :
elrindel.github.io
nikost
Beta testeur

Profil challenge

Classement : 2/54770

Néophyte
*
Hors ligne Hors ligne
Messages: 21


Voir le profil
« #6 le: 20 Septembre 2019 à 11:24:40 »

Je crois que je vois où est la confusion.
Pour comprendre, il faut s'intéresser à l'algorithme de padding. Dans ton exemple, si tu donnes comme entrée à l'algorithme sha1 la chaîne :

4d 6f 6e 53 33 63 72 65  74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64  6d 69 6e 3d 30

L'algorithme du sha1 va effectivement utiliser du padding pour obtenir un bloc de 512 bits qui sera :

4d 6f 6e 53 33 63 72 65  74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64  6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 E8

Et c'est ce bloc qui sera utilisé pour calculer le hash.

Cependant, si tu donnes directement comme entrée à l'algorithme sha1 la chaîne :

4d 6f 6e 53 33 63 72 65  74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64  6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 E8

Dans ce cas là, le sha1 va rajouter un bloc entier de padding. En effet, l'agorithme de padding fonctionne de la manière suivante:
1. Dans tous les cas, rajouter un bit à '1' à la fin du message (dans l'exemple précédent, c'est ce qui fait apparaître l'octet 0x80).
2. Ensuite rajouter des 0 jusqu'à arriver à une taille totale étant (un multiple de 512) - 64 bits.
3. Rajouter la taille du message originale pour combler les 64 bits de fin de bloc (dans l'exemple précédent, c'est ce qui fait apparaître l'octet 0xE8).

Donc dans ce nouvel exemple, un bloc entier sera rajouté au message. Et donc la partie calculatoire du sha1 sera effectuée sur deux blocs :

4d 6f 6e 53 33 63 72 65  74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64  6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 E8

80 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 xx

C'est pour ça que tu obtiens un hash différent.

Et comme le dis flob, le but de l'attaque n'est pas de réaliser une collision, mais de pouvoir, en se basant sur le hash d'un message 1, de connaître le hash d'un message 2 sans forcément connaître le premier message (dans l'article de pixis, on ne connaît pas le secret en préfixe)

Journalisée
poute35

Profil challenge

Classement : 347/54770

Néophyte
*
Hors ligne Hors ligne
Messages: 25


Voir le profil WWW
« #7 le: 20 Septembre 2019 à 13:27:46 »

Oui merci à vous deux.
Mon erreur était de considérer le padding comme = ( le bit à 1 + les zéros + la tailles des données utiles).
Or le bit à 1 comme tu le dis nikost ne fait pas partie du padding il est toujours ajouté par sha1 quelque soit la taille des données utiles à hasher.
Merci encore.
Journalisée

Over hack
Pech
Profil challenge

Classement : 35/54770

Membre Junior
**
Hors ligne Hors ligne
Messages: 83


Voir le profil
« #8 le: 20 Septembre 2019 à 14:28:42 »

Salut,

Or le bit à 1 comme tu le dis nikost ne fait pas partie du padding il est toujours ajouté par sha1 quelque soit la taille des données utiles à hasher.
La longueur du message est également ajoutée dans tous les cas : seul le padding est optionnel.

Pour présenter d'une façon qui - selon moi - fait moins mal à la tête que celle de nikost (:p), ce que tu donnes en entrée à l'algorithme il le traite comme étant uniquement le message.
Autrement dit, il ne se demande pas si (0x80 [+ padding] + taille sur 8 octets) ont été ajoutés au préalable.
Et donc, ici, tu calcules le hash de deux messages différents.

Pech.
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: