Si las direcciones de Bitcoin son realmente aleatorias, ¿por qué algunas son más difíciles de generar que otras?

En esta publicación , TierNolan explica por qué 'Bitpoint' es mucho más fácil de generar que 'bitpoint', y eso tiene que ver principalmente con la posición (primer carácter). Pero recuerdo que ciertos caracteres (creo que 'i' y 'o') son mucho más difíciles de generar, independientemente de su posición en la dirección. ¿Cómo es esto posible?

Respuestas (3)

El hash de 160 bits que está codificado en las direcciones se distribuye uniformemente ("verdaderamente aleatorio", como usted lo llama), pero la forma codificada en base58 no lo está. Es más probable que algunos caracteres aparezcan al principio, por ejemplo.

Para ilustrar, considere el conjunto de todos los números enteros entre 0 y 1999. Aunque cada uno de esos números tiene la misma probabilidad de ser elegido, esto no es cierto para su representación decimal. ¡Allí, la mitad de los números comienzan con un 1!

Buen ejemplo, y entiendo por qué el primer dígito no siempre es aleatorio. Pero entre 0 y 1999, el último dígito siempre tiene una distribución equitativa, y si 'o' o 'i' aumentan automáticamente la dificultad, incluso el último carácter no se distribuye por igual. Una vez vi al autor de vanity-gen explicar esto en bitcointalk, pero no pude encontrar su publicación.

Respuesta específica por qué 1Bitpoint es más fácil de generar que 1bitpoint:

La dirección es una representación en base 58 de un número entero de 192 bits (hash de 160 bits más una suma de comprobación de 32 bits). El valor más grande que puede representar es (2^160-1) con la suma de comprobación correspondiente: 0xfffffffffffffffffffffffffffffffffffffffffffa06820b, o la dirección de 34 caracteres "1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr".

En el alfabeto de base 58, 'B' < 'Q' < 'b'. Entonces, cualquier cadena de 34 caracteres que comience con '1Bitpoint' es válida siempre que la suma de verificación sea correcta. Pero las cadenas de caracteres de 34 caracteres que comienzan con '1 bitpoint' están todas fuera de rango. Todavía puede generar cadenas de 33 caracteres que comiencen con '1 bitpoint', pero obviamente hay muchas menos.

Los caracteres 'i' y 'o' solo son difíciles de generar en el sentido de mayúsculas y minúsculas, porque las mayúsculas 'I' y 'O' no son válidas en base-58.