Tenía curiosidad por mí mismo, así que seguí adelante y escribí un program para probar esto. Necesitará Crypto++ para compilar el código.
Descargo de responsabilidad: Cuando se trata de criptografía, o incluso solo las matemáticas en general, sé lo suficiente como para dispararme en el pie. Por lo tanto, tome los siguientes resultados con un grano de sal y tenga en cuenta que solo tengo un conocimiento superficial de las herramientas que estoy usando.
Solo muestreé tres subcadenas: los primeros 8 bytes, los 8 bytes centrales y los 8 últimos bytes. Para resumir, son igualmente aleatorios.
Sin embargo, cuando se utiliza un espacio de muestra más pequeño, parece como si los últimos 8 bits fueran un poco más aleatorios. Cuanto mayor es el espacio de muestreo, más se acercan las tres subcadenas a la aleatoriedad completa.
1000 iteraciones:
First: 0.995914
Middle: 0.996546
Last: 0.998104
5000 iteraciones:
First: 0.998387
Middle: 0.998624
Last: 0.999501
10000 iteraciones:
First: 0.999614
Middle: 0.999457
Last: 1
30000 iteraciones:
First: 1
Middle: 1
Last: 1
"aleatoriedad" se mide por MaurerRandomnessTest clase Crypto ++ 's. Como referencia, el ejecutable compilado del código anterior tiene un valor de aleatoriedad de 0.632411
y una copia de Macbeth de Shakespeare descargada del Proyecto Gutenburg tiene un valor de aleatoriedad de 0.566991
.
En mi opinión, "al azar" no es la palabra correcta aquí. Las funciones hash son tan deterministas como pueden ser; no hay aleatoriedad involucrada en absoluto. Es probable que preguntes si una subcadena de hash tiene la misma resistencia de colusión que la original (teniendo en cuenta la longitud diferente, por supuesto). – Jens
Estaba a punto de hacer esta misma pregunta. – insaner