¿Exclusividad de la cuenta garantizada?

Cuando creamos una cuenta en la red principal de Ethereum, ¿cómo garantiza el protocolo la dirección única de una cuenta? Dado que aunque no estemos conectados a la red podemos crear una cuenta, ¿existe la posibilidad de que dos cuentas obtengan la misma dirección? ¿Se guarda la información de la cuenta en la cadena de bloques?

Respuestas (3)

Citando a Chris613 en el foro ethereum sobre cpp ethereum :

  1. Una clave privada de 256 bits se inicializa con datos aleatorios

  2. El secreto se prueba para ser una clave aceptable, lo que simplemente significa que no es cero y es menor que "el orden de la curva", que creo que es un rango superior después del cual las claves son débiles (las correcciones son bienvenidas).

  3. Se genera una clave pública de 512 bits a partir de ese secreto y se prueba mediante secp256k1_ecdsa_pubkey_verify. No entiendo completamente esta verificación sin más investigación (tipos de clave), pero entiendo que cualquier número puede ser una clave secreta válida, y generar una clave pública a partir de ella siempre debe ser confiable (las correcciones son bienvenidas).

  4. La clave pública se codifica con SHA-3 [Keccak-256] para producir una salida de 256 bits. Los 96 bits superiores se descartan y los 160 bits inferiores se convierten en la dirección.

Entonces, dado que el algoritmo hash utilizado para la dirección tiene una gran cantidad de posibilidades y una tasa muy baja de colisiones, las direcciones finales deben ser únicas.

Como no puede adivinar un PK a partir de su dirección, crear un PK que coincida con la dirección requeriría probar muchas combinaciones de PK antes de encontrar una coincidencia. Entonces, no se trata de direcciones de fuerza bruta, sino de probar claves públicas y luego claves privadas para finalmente hacer coincidir una dirección.

Ninguno es conocido por tener éxito en hacerlo hoy.

Una computadora cuántica probablemente podría hacer eso, pero todavía no existe una capaz de hacer este tipo de cálculo. La próxima generación de dinero criptográfico tendrá que tener en cuenta la computadora cuántica con seguridad.

Editar: las claves privadas deben ser menores que el orden de la curva porque, de lo contrario, 'volverán' y serán iguales a las claves privadas de otras personas, debido a cómo funcionan los grupos de EC. Piensa en un reloj analógico: a las 13:00, el reloj marca el 1. Lo que sucede aquí es similar, pero usa un número mucho mayor (un poco menos de 2^256). En un reloj esto está bien porque sabemos si es por la mañana o por la tarde, pero aquí la misma clave privada => la misma clave pública => la misma dirección, lo que significa que si dos claves privadas son equivalentes, los propietarios de ambas podrían acceder y realizar transacciones válidas que se originen en la misma cuenta

La verificación de la clave pública verifica que sea un punto válido y racional de la curva. Esto es más o menos verificar que los dos números de 256 bits sean números enteros y satisfagan una fórmula necesaria para que toda la aritmética se mantenga correctamente.

Las funciones hash en realidad no se rompen por completo con la criptografía cuántica, por lo que la dirección -> etapa de clave pública aún podría ser bastante robusta. Sin embargo, calcular las claves privadas de las personas a partir de sus claves públicas sería trivial, por lo que las criptomonedas de la próxima generación tendrán que aceptar la criptografía cuántica.

Las direcciones de Ethereum son hashes de 160 bits, lo que significa que hay 2^160 hashes posibles. Según el problema del cumpleaños , la posibilidad de una colisión aumenta al 50 % cuando se crean alrededor de 2^80 cuentas.

Para darle una idea de lo improbable que es, si cada persona en la tierra pasara todo su tiempo haciendo nada más que generar cuentas de Ethereum, y generaran una por segundo, solo generarían alrededor de 2^57 de ellas. Para generar 2^80 y alcanzar una probabilidad del 50 % de encontrar una colisión, tendrían que seguir generando una por segundo durante unos 8 millones de años.

En resumen, la forma en que Ethereum garantiza la exclusividad de la cuenta es tener una cantidad tan alucinante de direcciones posibles que ningún proceso aleatorio concebible podría generar un duplicado. Así es como se garantiza la seguridad de la cuenta: si puede generar un hash de clave duplicado, ¡también puede robar el éter de alguien!

Otra comparación interesante: hay un estimado de 2^63 granos de arena en la Tierra. Mucho menos granos de arena que el total de cuentas posibles
Extendiendo el comentario anterior a otra forma de representar el tamaño total de este número: si restamos 2^63 de 2^160, entonces obtenemos aproximadamente... 2^160.
Una colisión hash parece ser posible: stackoverflow.com/questions/67002019/…

Esta es una ligera desviación de la pregunta, pero encontrar una clave privada en conflicto e intentar retirar los fondos puede ser motivo de intervención legal .

Hay esfuerzos distribuidos como LBC que intentan encontrar claves privadas y se muestran detalles de cómo lo hacen.