Nouveau sujet Répondre Imprimer Syndication RSS 2.0

[Sécurité] - Se connecter - envoie de password

Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 14 Juin 2006, 13:40
A chaque fois, qu'on doit s'authentifié (cookie inexistant)sur le forum, nous sommes obligé d'envoyer notre mot de passe en clair.
Et à vrai dire, récupérer un mot de passe en clair sur un réseau c'est relativement un jeu d'enfant.

Ormis la solution d'utiliser un serveur web HTTPS qui impose des moyens plus importants et surtout pas à la portée de tous... ne serait il pas mieux d'intégrer un petit morceau de (javascript compatible tout navigateur) cryptant à l'avance le mot de passe en md5. On envoye alors au final un mot de passe crypté!

Voici un exemple de script:

[html]<script type='text/javascript' src='md5.js'></script><SCRIPT>
function cliquer()
{
document.auth_new.pwd.value = hex_md5(document.auth_new.pwd.value);
document.auth_new.submit();
}

</SCRIPT>[/html]

Le fichier md5.js:

[html]
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/

/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */

/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test()
{
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/
function core_md5(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;

var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;

for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;

a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);

a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);

}

/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
* Calculate the HMAC-MD5, of a key and some data
*/
function core_hmac_md5(key, data)
{
var bkey = str2binl(key);
if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}

var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}

/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
*/
function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}

/*
* Convert an array of little-endian words to a string
*/
function binl2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
return str;
}

/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
}
return str;
}

/*
* Convert an array of little-endian words to a base-64 string
*/
function binl2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
| ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}
[/html]

Si le navigateur ne gère pas le javascript alors on utilise la méthode classique.


e-Traker
 
Equipe des MODS
Avatar de Houram
  • Age : 19 ans
  • Messages : 1243
  • Inscrit : 15 Juin 2005
  Lien vers ce message 14 Juin 2006, 13:45
Tien, pendant qu'on y est, quelqu'un qui s'y conanit en javascript et qui est capable de lire ce code pourrait expliquer le principe de l'algorythme du md5 ? Ou simplement quelqu'un qui connait ce principe^^

Sinon, l'idée parait pas mauvaise, mais le risque existe t-il vraiment ?
 
Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 14 Juin 2006, 13:54
Ben,

1)c'est pas lourd à implémenter.
2)augmenter la sécurité n'a jamais été de refus ?

Le md5 en une phrase: c'est du hachage.
http://www.bibmath.net/crypto/moderne/md5.php3


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14507
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 14 Juin 2006, 19:13
Arf on a eu md5 à programmer cette année en examum machine avec une vielle doc en anglais ... une veritable horreur :froid:

Mais bon désolé mais une solution de cryptage en js ca me tente pas du tout burster, les vérifications coté client c'est pas du sécurisé :/


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Equipe des MODS
Avatar de Korko
  • Age : 22 ans
  • Messages : 2687
  • Inscrit : 06 Octobre 2004
  Lien vers ce message 15 Juin 2006, 8:37
faudrait encoder en md5 le mdp avant d'envoyer le formulaire :/
Mais je doute que sa soit faisable.

Sans utiliser le JS je parle.


Dieu vous aime. Offre soumise à conditions
Je suis une Brute
 
Volcan
Avatar de Eagle
  • Age : 31 ans
  • Messages : 1093
  • Inscrit : 22 Janvier 2005
  Lien vers ce message 15 Juin 2006, 9:54
Je pense que c'est pas une bonne solution. Tous les navigateurs ne supportent pas le javascript (il faut pas seulement penser aux navigateurs graphiques les plus courants). Donc pour une fonction aussi importante que le login il NE FAUT PAS utiliser de javascript.

Je pense en disant celà, entre autre aux personnes handicapées utilisant des navigateurs textes. Alors le javascript pour une fonction non-vitale mais utile au forum oui, pourquoi pas. Par contre il faut que les fonctions de base tournent sans javascript.


Dans les hauteurs des cieux, par delà les nuages et les sommets enneigés, l'aigle majestueux survole la terre...

Kosmos & Eagle homepage ^^
 
Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 15 Juin 2006, 10:22
Pour Genova: J'ai pas dis qu'on faisait la vérification côté CLIENT! Je sais très bien qu'on fait ce qu'on veut comme modification.

Pour Eagle: J'ai dis que si le navigateur ne supportait pas ce genre de chose, on pourrait basculer automatiquement vers la méthode tradionnelle.


e-Traker
 
Equipe des MODS
Avatar de Grummfy
  • Age : 23 ans
  • Messages : 5458
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 15 Juin 2006, 13:30
ben javascript coté client, sauf si tu as rhino et personnellement je connais aucun hébergeur qui à Rhino.....


"La gravité est le bonheur des imbéciles" Charles de Montesquieu > "T'as raison, L'apesanteur c'est plus rigolo" Hébus de Phalompe (Troll de Troy)
http://www.grummfy.com/download/crea/smileys/fsb2.gif Mods fsb1 - Mods fsb2 - Mon forum - Grummfy's project
 
Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 15 Juin 2006, 13:56
Pour dire que c'est tout à fait implémentable.


e-Traker
 
Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 16 Juin 2006, 12:31
Une fois authentifié, avons nous forcément un SID ?
Ou alors est ce que à chaque fois qu'on va sur une page, on fait un controle des valeurs dans le cookie du client pour savoir qui c'est?


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14507
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 16 Juin 2006, 12:47
Oui


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
VIP
Avatar de Dravick
  • Age : 19 ans
  • Messages : 523
  • Inscrit : 04 Mars 2005
  Lien vers ce message 22 Juin 2006, 21:07
Euh y'a un gros problème à ta méthode, c'est que le script PHP recoit direct un hash md5, et ne fait donc pas le traitement md5 dessus avant la vérification. Ça signifit qu'un type n'a plus besoin de savoir ton mot de passe pour prendre ton identité, seulement de récupérer le md5 de ton pass, désactiver javascript (ou faire un script js, whatever), et envoyer le hash au script PHP, qui n'y verra que du feu et authentifiera le mec comme étant toi. En gros, on perd toute l'utilité du hash, qui devient du coup le mot de passe de l'individu, stocké en clair dans la bdd (sauf que l'individu n'a pas à se souvenir du hash, puisque javascript le fait pour lui s'il fournit le mot de passe de base).


"Take thy beak from out my heart, and take thy form from off my door!"
[list]Quoth the Raven, "Nevermore."[/list]
 
Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 22 Juin 2006, 21:20
J'ai pas la tête au frais la pour réfléchir je regarderai ta remarque plus tard x)


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14507
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 22 Juin 2006, 22:06
Citation (burster)
J'ai pas la tête au frais la pour réfléchir je regarderai ta remarque plus tard x)

En gros tu t'es fait breaké :)


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de burster
  • Age : 2208 ans
  • Messages : 1682
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 8:21
De toute façon, qu'on récupère le mot de passe en clair ou le mot de passe en md5 ça change rien en soit puisque dans les 2 cas on peut avoir accès.

L'idée à cette époque était de protéger le mot de passe originale.
Une clé md5 est difficillement retenable non?

exit(-1);


e-Traker
 
Répondre


.