16/11/2005 @ 15:49:52: Sécurité - La collision de MD5 en code source s'il vous plait
Le monde de la cryptographie a été largement secoué lorsqu'on a annoncé que l'algorithme MD5 n'était pas sûr et que, moyennant de nouveaux algorithmes, on pouvait créer une collision en moins d'une journée.

Créer une collision, cela signifie pouvoir donc regénérer un mot de passe qui, encodé en MD5, donnera le même résultat et pourra donc être utilisé comme si c'était le vôtre. Le MD5 est utilisé par exemples dans de nombreux projets PHP pour cacher le mot de passe en cas de vulnérabilité, ce qui avait moyennement bien fonctionné jusque la.

Seulement, même si l'algorithme était publique, aucun code source n'était rendu public dans ce sens, ce que Patrick Stach vient de réaliser. Avec son source, un MD4 peut être cassé en quelques secondes et un MD5 en 45 minutes sur un P4 1.6Ghz.

On risque donc maintenant de voir débarquer de nouveaux supers virus, supers trojans ou autres exploits qui utiliseront cette technique pour, par exemple, trouver votre mot de passe sur un forum phpBB compromis.
Source: Slashdot
Auteur: zion
16/11/2005 @ 15:56:25: Ppxl: La collision de MD5 en code source s'il vous plait...
Et on procède comment pour contrer cela? On explique cela comment aussi aux gens?
16/11/2005 @ 15:59:19: zion: La collision de MD5 en code source s'il vous plait...
On utilise un autre algorithme et on oublie le MD5, sauf pour des choses non essentielles. Ou alors autant le laisser en clair :joce:

On parle de rijndael pour remplacer tout cela, et cocorico, c'est du belge :grin:

Sinon y a du SHA-256,SHA-512 et autres, ca doit aussi pouvoir le faire :grin:
Dernière édition: 16/11/2005 @ 16:00:08
16/11/2005 @ 16:15:24: gizmo: La collision de MD5 en code source s'il vous plait...
Les gens vont peut-être enfin comprendre qu'on n'utilise pas un algo de hashing pour faire du cryptage de données :oh:
16/11/2005 @ 16:33:49: zion: La collision de MD5 en code source s'il vous plait...
Oui, enfin si on cassait leur algo de cryptage ce serait pareil, ce serait la paniiique paniiiique :ddr555:
(non pas sur le périphériiiique)
16/11/2005 @ 17:02:00: cruciforme: La collision de MD5 en code source s'il vous plait...
Trouver votre mot de passe sur un forum phpBB compromis

Je ne vois pas trop ce que ça change. S'ils ont le hash MD5, ils peuvent de toute façon se loguer en le tapant dans les cookies. Comme dit dans la news, ça trouvera une collision, donc probablement un autre mot de passe fonctionnel et pas NOTRE mot de passe. Je ne vois pas trop ce que ça change par rapport à avant pour ce cas là, on pouvait de toute façon s'identifier illégalement :oh:

16/11/2005 @ 17:25:18: zion: La collision de MD5 en code source s'il vous plait...
S'ils ont le hash MD5, ils peuvent de toute façon se loguer en le tapant dans les cookies.


Négatif, phpBB utilise un autologin basé sur un MD5 d'un id aléatoire qu'ils changent à chaque login, un truc assez complexe mais qui ne stocke pas du coup le mot de passe chez l'utilisateur et il faut avoir été connecté un jour pour l'avoir. Donc non, tu ne peux pas te logger sur un phpBB rien qu'avec le MD5 du mot de passe, le MD5 que tu as en cookie n'est pas cela.

Bon ok maintenant tu vas me dire que tu peux piquer le MD5 qui est stocké dans la table en question. Oui, c'est sur, mais si l'admin a viré l'auto-login ou que l'user ne l'a pas demandé, tu ne pourras pas, l'honneur est sauf, tu ne peux pas y arriver aussi simplement.

Par contre pour la collision, personne ne peut t'assurer que c'est le même mot de passe, c'est le principe même, je sais, mais il aura un mot de passe qu'il pourra utiliser en ton nom sur tout autre site qui utilise le MD5 et donc sur tout autre phpBB auquel tu serais inscrit avec le même mot de passe, bonjour les dégats. Et si en plus c'est le bon mot de passe, il pourra l'utiliser sur tout autre site même qui n'utilise pas le MD5.
Dernière édition: 16/11/2005 @ 17:26:30
16/11/2005 @ 20:26:25: cruciforme: La collision de MD5 en code source s'il vous plait...
Ils n'avaient qu'à mettre un grain de sel et puis c'est tout :oh:
16/11/2005 @ 21:30:04: Ppxl: La collision de MD5 en code source s'il vous plait...
J'ai vu il n'y a pas très longtemps, mais je ne sais plus où, qu'il y a un site qui veux empêcher les gens qui multiplient leurs inscripions. Résultat trouvé : publier sur une page la liste triée des pseudos ayant les mêmes mots de passe !!! :aaah:
Dernière édition: 16/11/2005 @ 21:59:42
16/11/2005 @ 21:49:39: zion: La collision de MD5 en code source s'il vous plait...
Le site en question......... Wikipedia!
16/11/2005 @ 23:01:21: cauet: La collision de MD5 en code source s'il vous plait...
:dawahuh:
17/11/2005 @ 00:44:56: apn: La collision de MD5 en code source s'il vous plait...
Par curiosité, j'ai testé ce fameux script (md5coll.c) et bien que je ne m'attendais pas au miracle des 45Minutes sur un P4 1.6GHz je dois malgré tout déclarer forfait après + de 2heures...

Pour info, j'ai lancé le script selon ces spécs:
CFLAGS: -O3 -march=nocona
NICE Level: -19
Procos: Bi-Xeon (pseudo-64bits donc ok pour la gestion des entiers en 32bits) 2.8GHz HT (4Proco virtuels même si qu'un seul utilisé par le script)

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
47737 root 1 87 -19 2400K 720K CPU0 0 128:16 99.02% md5coll.bin

Je viens de le relancer via screen car mtnt dodo, on verra combien de temps il mettra :tongue:
Dernière édition: 17/11/2005 @ 00:48:22
17/11/2005 @ 01:02:58: zion: La collision de MD5 en code source s'il vous plait...
T'es courageux dis donc, sur tous les commentaires que j'ai lu sur Slashdot, il n'y en a qu'un qui a lu le code mais aucun qui a essayé de le faire fonctionner jusque la, et je dois dire que moi non plus :sweat:
17/11/2005 @ 03:09:17: apn: La collision de MD5 en code source s'il vous plait...
Bon finallement j'ai pu attendre la fin du traitement, bingo en 1h50 sur la même machine, j'ai du avoir plus de chance ce coup-ci avec random():

#ll md5coll.log
-rw-r--r-- 1 root wheel 868 Nov 17 02:36 md5coll.log
apn@bep-pc1|108#cat md5coll.log
block #1 done
block #2 done
unsigned int m0[32] = {
0x6ca39a0a, 0x0b49ac46, 0x6a1b6742, 0xaeabf3fe,
0xcd3b0462, 0x82ffcb54, 0xe43b104d, 0x862307b6,
0x06352d55, 0xe4738c0a, 0x8d93003b, 0x14e10332,
0x362468e9, 0x8138d5b1, 0x705dbbed, 0x7be8d9d7,
0xb4cfaea6, 0x4e1fb981, 0x0a919194, 0xe54b9263,
0xb5a68ecf, 0xfd462a97, 0x75b1f942, 0xdf8d4bd2,
0x327bc6e5, 0x4c5f6fb7, 0x334f976a, 0x6551d053,
0xab86fcd4, 0x55c79950, 0x27c0fcbe, 0xfb1a6516,
};

unsigned int m1[32] = {
0x6ca39a0a, 0x0b49ac46, 0x6a1b6742, 0xaeabf3fe,
0x4d3b0462, 0x82ffcb54, 0xe43b104d, 0x862307b6,
0x06352d55, 0xe4738c0a, 0x8d93003b, 0x14e18332,
0x362468e9, 0x8138d5b1, 0xf05dbbed, 0x7be8d9d7,
0xb4cfaea6, 0x4e1fb981, 0x0a919194, 0xe54b9263,
0x35a68ecf, 0xfd462a97, 0x75b1f942, 0xdf8d4bd2,
0x327bc6e5, 0x4c5f6fb7, 0x334f976a, 0x65515053,
0xab86fcd4, 0x55c79950, 0xa7c0fcbe, 0xfb1a6516,
};

Mais je vois pas trop comment utiliser ces données hexa pour trouver le mot de passe qui a généré la collision, faudra pe un peu lire le code tout de même :s
17/11/2005 @ 09:12:01: rfr: La collision de MD5 en code source s'il vous plait...
Le source windows ne marche pas chez moi, si vous essayez et que vous avez un problème, changez la fonction initRandom par celle-ci:


int initRandom(void)
{
#ifdef _MSC_VER

if (!CryptAcquireContext(&cryptHandle, "Container", NULL, PROV_RSA_FULL, 0))
{
if (GetLastError() == NTE_BAD_KEYSET)
{
if (!CryptAcquireContext(&cryptHandle, "Container", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
{
char buf[100];
StringCbPrintf(buf, sizeof(buf), "error getting crypto context: 0x%x", GetLastError());
MessageBox(0, buf, "error", MB_ICONERROR|MB_OK);
return 0;
}
}
}

// Or, acquire Context of container that is shared across the machine.
if (!CryptAcquireContext(&cryptHandle, "Container", NULL, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET))
{
if (GetLastError() == NTE_BAD_KEYSET)
{
if (!CryptAcquireContext(&cryptHandle, "Container", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET))
{
char buf[100];
StringCbPrintf(buf, sizeof(buf), "error getting crypto context: 0x%x", GetLastError());
MessageBox(0, buf, "error", MB_ICONERROR|MB_OK);
return 0;
}
}
}

/*
if(!CryptAcquireContext(&cryptHandle, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET ))
{
char buf[100];
StringCbPrintf(buf, sizeof(buf), "error getting crypto context: 0x%x", GetLastError());
MessageBox(0, buf, "error", MB_ICONERROR|MB_OK);
return 0;
}
*/
#else
srandom(time(NULL) ^ (getpid() << 16));
#endif
return 1;
}


C'est ma petite contribution au projet :grin:
17/11/2005 @ 12:07:21: thorgull: La collision de MD5 en code source s'il vous plait...
Ben il était temps, les gens vont p'tet enfin ce décider à utiliser d'autres algo. J'ose pas imaginer ce que l'on pourrait faire avec un fichier /etc/shadow mal protégé...

Il faut aussi noter qu'il n'y a pas que le problème des mots de passe. On utilise souvent le MD5 pour "signer" un fichier (car c plus rapide). "Si le md5 est le même c'est que le fichier n'est pas altéré ...", ... ben maintenant on sais que c'est plus vrai. Va faloir trouver autre chose ... on va rentrer dans l'aire du SHA ... ou du ou bien ils vont nous sortir un MD6 :tongue:
17/11/2005 @ 13:53:30: rfr: La collision de MD5 en code source s'il vous plait...
SHA-1 est déjà dans le colimateur et n'est plus recommandé ... note qu'IE 6.0 ne supporte toujours pas les certificats signé en utilisant "sha256WithRSA" :sad:
17/11/2005 @ 14:03:36: zion: La collision de MD5 en code source s'il vous plait...
MD5 était aussi utilisé sur les photos des radars automatiques en Australie pour en certifier l'authenticité... mais du coup les infractions ont été contestées :ddr555:
17/11/2005 @ 15:52:48: Ppxl: La collision de MD5 en code source s'il vous plait...
En france ils ont trouvé mieux avec les radars que un script :
- repeindre le radar
- lui tirer dessus à la chevrotine comme une cible
- le fracturer au marteau (au niveau des vitres)
- l'arracher à la peleteuse

...

Allez, allez, il en reste encore :wink:
17/11/2005 @ 17:38:14: cauet: La collision de MD5 en code source s'il vous plait...
C'est bien, vive la france :smile: