¿Qué tan seguro es bitcoin con respecto a un ataque de generación de direcciones aleatorias? [duplicar]

Imagine un atacante implementando algo como el siguiente pseudocódigo en el ASIC más rápido que el dinero de la granja puede comprar:

attack(blockchain, my_address)
    addresses = generate_tree_of_all_nonempty_addresses(blockchain)
    while true:
        private_key = generate_random_private_key()
        public_key = generate_public_key(private_key)
        address = ripemd160(sha256(public_key))
        if is_matched(address, addresses):
            steal_bitcoins(private_key, public_key, address, my_address)

Dado que RIPEMD-160 reduce las direcciones a un tamaño de 160 bits (en forma binaria), y que hay (IIRC) más de un millón de direcciones no vacías, ¿realmente toma mucho tiempo encontrar colisiones? Debería ser capaz de hacer los cálculos yo mismo, pero sé que algunos de ustedes son mejores que yo en ese tipo de cosas...

O para decirlo de otra manera, ¿es posible que la decisión de codificar las claves públicas de la forma en que lo hace bitcoin, podría resultar imprudente en el futuro dado el mayor riesgo de colisiones en comparación con simplemente usar la longitud completa de la clave pública ECDSA?

¿Por qué no pruebas las matemáticas y publicas tus cálculos aquí para que la gente los verifique? Preguntas como esta son mucho más satisfactorias para calcular usted mismo, en lugar de tener que confiar en la palabra de otra persona.

Respuestas (2)

Está bien, estoy estropeando la diversión de que lo resuelvas tú mismo, pero me divertí demasiado resolviéndolo yo mismo como para no publicarlo.

Para tener tantas direcciones de destino como sea posible, supongamos que todos los satoshi que existirán (21e6 * 100e6 = 2.1e15 o 2.1 cuatrillones) estaban en una dirección diferente. Y supongamos que alguien desarrolló un ASIC que, al mismo ritmo que los ASIC actuales calculan SHA256D, podría generar una clave privada, calcular la clave pública y la dirección correspondientes, y compararla con los 2,1 cuatrillones de esos objetivos. (Esto es absurdo: generar una clave pública ECDSA es muchos órdenes de magnitud más complejo que un hash SHA256). Supongamos que implementaron este ASIC en la misma escala que toda la red de minería de Bitcoin actual.

La dificultad actual de Bitcoin es de aproximadamente 4e10, lo que significa que la red en su conjunto calcula 4e10 * 2^32 = 1,7e20 hashes por segundo. Entonces, digamos que la red de nuestro atacante imaginario está generando 1.7e20 claves privadas por segundo. Cada clave privada tiene una probabilidad de 2.1e15 / 2^160 = 1.4e-33 de coincidir con una de las direcciones de destino. Entonces, el atacante encuentra una coincidencia a una velocidad de 1.7e20 * 1.4e-33 = 2.4e-13 por segundo. En promedio, toma 1/2.4e-13 = 4.0e12 segundos, o aproximadamente 130 000 años, para encontrar una coincidencia.

Entonces, este atacante altamente dedicado, que está gastando millones (si no miles de millones) de dólares en ASIC y electricidad, podrá robar un promedio de un satoshi cada 130,000 años.

Uno realmente tiene que aceptar lo asombrosamente rápido que crece una función exponencial. 160 bits parece una cantidad muy pequeña de datos, pero 2^160 es un número increíblemente grande.

Esta pregunta ha recibido excelentes citas de David Schwartz y otros en: https://bitcointalk.org/index.php?topic=24268.0

El espacio total de direcciones es 2^160

Para poner eso en perspectiva, solo hay 2^63 granos de arena en todas las playas de la Tierra ( http://www.hawaii.edu/suremath/jsand.html )


Hay poco menos de 2^256 claves privadas, poco menos de 2^256 claves públicas y 2^160 direcciones. Hay algunas direcciones que tienen más de una clave pública correspondiente y, por lo tanto, más de una clave privada correspondiente.


La forma más sensata de intentar el ataque (que sigue siendo una locura) es generar claves privadas aleatorias, calcular las direcciones correspondientes y luego ver si esa dirección tiene un saldo distinto de cero. Creo que hay 2^160 direcciones posibles. Entonces, incluso si hay 1,000,000,000 de direcciones con saldos distintos de cero, sus probabilidades de obtener un saldo distinto de cero en una sola clave son 1 en 2^128.

Por lo tanto, aplicar fuerza bruta a una única dirección de bitcoin con un saldo distinto de cero (suponiendo que haya mil millones, lo cual es generoso) es tan difícil como, por ejemplo, aplicar fuerza bruta a una clave AES de 128 bits determinada.


Con un promedio de 300,000,000 direcciones de bitcoin consumidas (utilizadas una sola vez) todos los días, el espacio de direcciones de 2^160 cumplirá su propósito durante, digamos, otros 2^131 días. La memoria de nosotros vivirá para siempre dentro de lo que entonces se llamará el ancient blockchain.