Est-ce qu'un substrat de hash (md5, sha1) est plus "aléatoire" qu'un autre?
voici 3 exemples de hachures md5
$ md5 -s "1" && md5 -s "2" && md5 -s "3"
MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b
MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c
MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3
dire que je voulais prendre 8 caractères de n'importe quel hachage. Le début du hachage est-il particulièrement plus "aléatoire" que la fin? milieu? Ou est-ce que tous les substrats sont également "aléatoires"?
4 réponses
j'étais moi-même curieux, alors je suis allé de l'avant et ai écrit un pour tester cela. Vous aurez besoin Crypto++ pour compiler le code.
Avertissement: Quand il s'agit de cryptographie, ou même de mathématiques en général, je sais juste assez pour me tirer une balle dans le pied. Alors, prenez les résultats suivants avec un grain de sel et de garder à l'esprit que je n'ai qu'une connaissance superficielle des outils que j'utilise.
Je n'ai échantillonné que trois substrats: les 8 premiers octets, le moyen de 8 octets, et les 8 derniers octets. Pour faire court, ils sont tout aussi aléatoires.
cependant, lorsqu'on utilise un plus petit espace d'échantillonnage, il apparaît comme si les 8 derniers bits étaient un peu plus aléatoires. Plus l'espace d'échantillonnage est grand, plus les trois substrats se rapprochent de l'aléatoire complet.
1000 itérations:
First: 0.995914
Middle: 0.996546
Last: 0.998104
5000 itérations:
First: 0.998387
Middle: 0.998624
Last: 0.999501
10000 itérations:
First: 0.999614
Middle: 0.999457
Last: 1
30000 itérations:
First: 1
Middle: 1
Last: 1
"Aléatoire" est mesurée par Crypto++ Maurerrandomnessest classe. Pour référence, l'exécutable compilé à partir du code ci-dessus a une valeur de randomness 0.632411
et une copie de Macbeth de Shakespeare téléchargée du projet Gutenburg a une valeur aléatoire de 0.566991
.
tous les substrats d'un bon hash (et md5 est raisonnablement bon malgré être cryptographiquement dangereux) sont également aléatoires, donc oui, prenez n'importe quel bits que vous aimez de la chaîne, ils devraient être également distribués.
Nitpick: "aléatoire" est le mauvais mot à utiliser ici, puisque les fonctions de hachage sont déterministes.
comme pour répondre à ce que vous voulez dire:), une propriété souhaitable des fonctions de hachage est d'atteindre le effet D'Avalanche: fondamentalement, avoir chaque bit d'entrée provoque des changements drastiques à la sortie. Ainsi, pour un hash bien conçu, chaque substrat devrait être affecté également souvent ("être aussi aléatoire") comme tous les autres.
la mesure du caractère aléatoire de la sortie d'une fonction de hachage peut être effectuée en utilisant des tests statistiques effectués sur des générateurs de nombres pseudo-aléatoires. Selon l' Guide de la Cryptographie Appliquée §5.4.4 (chapitres échantillons disponibles gratuitement), il y a cinq tests de base:
- test de fréquence (test monobit)
- numéro de Série de test (deux bits de test)
- test de Poker
- test s'Exécute
- Autocorrélation test
puis, bien sûr, il y a le test statistique universel DE Maurer que kurige a déjà mentionné.