Estás haciendo algunas buenas preguntas. Lo primero que debe saber es que la información, la entropía y las cadenas / matrices de bytes están relacionados. La entropía de un sistema es el Log (Información). En este caso, la información es una cadena (contraseña, codificada en base64 o de otro tipo). Sin embargo, para encontrar el contenido de información de una cadena, no lo medimos según la longitud y los caracteres que contiene. En su lugar, medimos la información según el rango de valores que puede contener.
Por lo tanto, un lanzamiento de moneda tiene dos estados: cabezas o colas. Por lo tanto, tiene un bit de información: Log2 (2) = 1.
¿Cuál es el contenido de entropía de una lista de 100,000 palabras únicas? No es cada combinación posible de letras alfabéticas (eso sería 26 ^ 6 para palabras de longitud 6 o 28 bits). Es, de hecho, menos de 17 bits. ¿Por qué? Porque no tenemos más de 2 ^ 17 palabras en la lista.
La clave para comprender la entropía es comprender el rango de posibles opciones para algo, luego, tome el Log (| RANGE |) para obtener la entropía.
Veamos algunos ejemplos y supongamos que está utilizando SHA-512 (no seleccionó una longitud para el algoritmo SHA-2, así que elegí 512 bits).
Esto significa que la entropía máxima para cualquier hash resultante está limitada a 512 bits. Esto no significa que el hash contenga 512 bits de entropía, especialmente si comenzó con una entrada menos entrópica. Además, estrictamente hablando, incluso el hash SHA-512 no contiene del todo 512 bits, estoy bastante seguro de que hay algunas salidas de hash que no son posibles, no cubren todo el rango de posibles 2 ^ 512 números. Sin embargo, es un límite superior razonable.
Aquí hay algunos ejemplos. Sin embargo, todas las salidas de hash tienen una longitud de 512 bits:
- Hash (the_result_of_a_coin_flip) = 1 bit de entropía MAX.
- Hash (1_rnd_byte) = 8 bits de entropía MAX.
- Hash (64_bytes_from_a_true_random_num_gen) = 512 MAX.
- Hash (64_bytes_from_a_pseudo_RNG) = 512 MAX, sin embargo será (mucho) menor si la semilla de PRNG es más pequeña.
- Hash (1024_bytes_from_a_true_RNG) = entropía MAX de 512 bits.
- Hash (32_rnd_bytes_base64_encoded) = 256 bits de entropía MAX.
- Hash (64_rnd_bytes_base64_encoded) = 512 bits de entropía MAX.
- Hash ('00000' + 64_rnd_bytes + '00000') = 512 bits de entropía MAX.
Si observa esos ejemplos, lo que encontrará es que el algoritmo Hash limita la entropía porque no puede colocar más entropía (medida en bits) en la salida del algoritmo. Además, no puede crear más entropía con un Hash: ejemplos 1 y amp; 2 muestran esto. Sin embargo, puede perder la entropía de una función Hash; el ejemplo 5 muestra esa pérdida (8192 bits hasta 512).
El ejemplo # 7 muestra lo que estabas preguntando, creo. Comenzamos con 512 bits de entropía (64 bytes), la base 64 los codifica y luego los procesa. Una función hash correctamente construida debería conservar la mayor parte de la entropía de la entrada hasta su tamaño máximo de salida.
El ejemplo # 8 muestra la respuesta a tu segunda pregunta. La suspensión y / o adición de un conjunto fijo de bytes a la entrada no cambia la entropía de la salida. Su parte de entrada fija tiene una entropía de CERO porque no tiene información, está fija (| Rango | = 1) y el Registro (1) = 0.
Espero que esto ayude.