La taille est-elle importante lors du choix du bon algorithme à utiliser pour un hachage de session?Le hash de session est-il important?
J'ai récemment lu ceci article et il a suggéré d'utiliser whirlpool pour créer un hachage pour l'identifiant de session. Whirlpool génère une chaîne de hachage de 128 caractères, est-ce trop grand?
Le plan est de stocker le hachage de session dans un db. Y a-t-il une grande différence entre utiliser un champ de 64 caractères (sha256), un champ de 96 caractères (sha384) ou un champ de 128 caractères (whirlpool)? L'un des arguments initiaux avancés pour whirlpool était la vitesse par rapport à d'autres algorithmes, mais en regardant les résultats de vitesse, sha384 ne va pas trop mal.
Il y a l'option tronquer le hachage pour le rendre plus petit que 128 caractères.
J'ai modifié l'extrait de code original, pour permettre le changement de l'algorithme en fonction des besoins.
Mise à jour: Il y a eu une discussion à propos de la chaîne en cours de hachage, donc j'ai inclus le code.
function generateUniqueId($maxLength = null) {
$entropy = '';
// try ssl first
if (function_exists('openssl_random_pseudo_bytes')) {
$entropy = openssl_random_pseudo_bytes(64, $strong);
// skip ssl since it wasn't using the strong algo
if($strong !== true) {
$entropy = '';
}
}
// add some basic mt_rand/uniqid combo
$entropy .= uniqid(mt_rand(), true);
// try to read from the windows RNG
if (class_exists('COM')) {
try {
$com = new COM('CAPICOM.Utilities.1');
$entropy .= base64_decode($com->GetRandom(64, 0));
} catch (Exception $ex) {
}
}
// try to read from the unix RNG
if (is_readable('/dev/urandom')) {
$h = fopen('/dev/urandom', 'rb');
$entropy .= fread($h, 64);
fclose($h);
}
// create hash
$hash = hash('whirlpool', $entropy);
// truncate hash if max length imposed
if ($maxLength) {
return substr($hash, 0, $maxLength);
}
return $hash;
}
Peu importe ce qu'elle vous a dit, la taille compte! Sérieusement, tous ces éléments sont * très * petits comparés aux supports de stockage dans lesquels ils se trouvent aujourd'hui, si vous avez un nombre énorme de sessions (millions), un hachage plus long rend la collision * moins * probable, mais c'est déjà très, * très *, ** très ** peu probable de toute façon. –
Je pensais qu'elle essayait juste de me remonter le moral, mais oui je ne m'attends pas à gérer des millions de sessions. Ma principale préoccupation concerne l'indexation et la façon dont le SGBD gère les champs de caractères de cette taille. – Andre