¿Qué pasa si tu cliente bitcoin genera una dirección idéntica a la de otra persona?

Aquí hay un escenario hipotético:

La persona A tiene una dirección de Bitcoin con 25BTC. La persona B abre su cliente Bitcoin:

  • que puede o no tener la cadena de bloques completa (esto último significaría que no hay copias de las transacciones de la Persona A)

La persona B presiona "Nueva dirección", y la dirección de la persona A se genera de alguna manera. Ahora, la cadena de bloques termina de sincronizarse.

¿Lo que sucede? ¿Es esta una posibilidad, sin la asombrosa improbabilidad? Después de todo, se puede influir en la generación de números aleatorios.

Podrían gastar las monedas de los demás.
¿Etiquetar la dirección no ayuda a resolver parte de ese problema?
@rponder No, las etiquetas que adjuntas a algunas direcciones solo están en tu propia computadora.
Bueno, ya ha pasado. Alguien ya ha recolectado $ 8,000 de btc que provienen de clientes de Android que no generaron correctamente números aleatorios. Ver arstechnica.com/security/2015/05/…
@SaintHill oh vaya, eso es malo
Generar el mismo hash de par de claves (colisión AKA) es igual a las posibilidades de que Chloë Grace Moretz sea mi novia, 1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976 de direcciones posibles, ¿cuántas posibilidades crees que tienes?

Respuestas (5)

Si esto sucede, la Persona B podrá gastar los bitcoins de la persona A. Sin embargo, solo hay dos formas en que esto puede suceder:

a) La persona B genera el mismo par de claves (clave privada) que la persona A

o b) la persona B genera un par de claves diferente, que (clave pública) genera un hash a la dirección de la persona A (una colisión de hash)

Eche un vistazo a la especificación de la dirección de bitcoin: https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses

Una dirección de Bitcoin es un hash de 160 bits de la parte pública de un par de claves ECDSA públicas/privadas

Para que suceda "a", la persona B necesitaría romper "secp256k1". No soy un experto en este campo, pero por lo que puedo encontrar en bitcointalk.org , la "fuerza" de esto es 2^128 bits. Y si te preguntas qué tan fuerte es eso, busca el video "Ataques de búsqueda exhaustiva" de Dan Boneh . 11 minutos en el video dice " cualquier cosa que sea más grande que 2 ^ 90 se considera suficientemente seguro " (se trata de atacar 3DES, que es un cifrado de bloque simétrico, por lo que no estoy seguro de que realmente se aplique a secp256k1, pero realmente no tengo mejor argumento de por qué 2^128 es " tan seguro que nunca, jamás, generará la misma clave que otra persona "

Y para que suceda "b", necesitaría encontrar una colisión en RIPEMD-160 (SHA-256 (pk)). Hasta donde yo sé, ni RIPEMD-160 ni SHA-256 tienen vulnerabilidades a los ataques de colisión de hash. Por lo tanto, es muy poco probable romper ambos o generar aleatoriamente una clave cuyo hash sea exactamente igual a otra dirección de bitcoin.

También existe la posibilidad de que su computadora se incendie, y algunos de los materiales se derritan en un cupón de lotería con números ganadores (y un código de barras válido), pero simplemente no sucederá porque la posibilidad es tan increíble pequeño (es lo mismo con " haga clic y genere la dirección de bitcoin de otra persona ").

EDIT Woops, una cosa importante: todo esto supone que todas las direcciones de bitcoin se generan correctamente usando "true random". Todas las direcciones cerebrales y las direcciones generadas con un PRG incorrecto pueden ser fáciles de encontrar utilizando un defecto en el PRG o explotando (los defectos en el) cerebro humano.

Su caso "b" es una segunda imagen previa (objetivo múltiple), no una colisión. Desea hacer coincidir el hash de un mensaje existente en el que no puede influir. Una colisión sería que la Persona B creara dos entradas distintas con el mismo hash.
Pero, ¿se verifican todas las direcciones para verificar si hay duplicados cuando su cliente generador de direcciones sincroniza la cadena de bloques? Si hay una colisión de direcciones, ¿no causaría una confusión seria y posiblemente una pérdida financiera sustancial (si los fondos se transfieren a la cuenta de la persona b porque tenían la ilusión de que la controlaban?) ¿Podemos evitar que la persona b pierda fondos alertándolos un dirección que generaron, ¿ha sido detectada desde entonces mientras se ponían al día con la cadena de bloques? Al menos, la persona b sabe que debe esperar la sincronización antes de solicitar pagos a esta dirección.
Diría que "colisión" es el concepto correcto aquí, porque cualquier dirección que se regenere (por cualquiera) ya es un problema. La alternativa sugerida implicaría que una sola persona intentaría activamente encontrar tal colisión, lo que supongo que podría describirse como algún tipo de ataque previo a la imagen ("¿segundo"?).
Creo que el caso A será mucho más común una vez que Bitcoin se convierta en la corriente principal. Mucha gente usará claves privadas débiles, y muchos de ellos usarán lo mismo que otro tipo al azar, lo que resultará en que ambos gasten las monedas del otro :(
¿Cómo puede calcular las probabilidades sin tener en cuenta la potencia de procesamiento y su aumento exponencial? Sí, bitcoin tiene cierta protección contra eso... pero es un factor importante. Una civilización alienígena con computadoras cuánticas densas como agujeros negros probablemente ya haya robado todas sus monedas en una infinidad de universos paralelos... bitcoin.stackexchange.com/questions/6062/…
También existe la posibilidad de que el software de su cliente bitcoin sea fubar. O que el servicio de red que utiliza para la semilla aleatoria falla. Como arstechnica.com/security/2015/05/… !!!
Aquí hay algunos casos de "a)" en mainnet :)) lbc.cryptoguru.org/trophies

Esta es la forma en que lo veo. El número total de bitcoins que alguna vez se extraerán es de 21 millones. La unidad de bitcoin más pequeña es un satoshi (0.00000001 BTC). Si colocamos todos los satoshis posibles en una billetera propia, obtendríamos la cantidad máxima de billeteras que podrían tener saldo (por lo que la cantidad real de billeteras con bitcoins es obviamente menor). Esto es 21x10^6(BTC) x 10^8 (satoshi/BTC) = 21x10^14 carteras. Es un número enorme, pero está eclipsado por 2^256 billeteras posibles. Entonces, en el peor de los casos, la probabilidad de adivinar una billetera con un satoshi es 21x10^14/(2^256)=1.813595x10^-62. Un número increíblemente pequeño.

Según el problema del cumpleaños, las probabilidades de que dos personas tengan la misma dirección en esa situación serían aproximadamente 1-e**(-((21*10 14)**2)/(2*(2 256))) . Eso es como 1 átomo en comparación con la cantidad de átomos en la Tierra. Bastante pequeño.
Esta respuesta no aborda la pregunta principal "¿Qué pasaría si dos usuarios generaran la misma dirección?", sino que solo evalúa la probabilidad de que la pregunta sea relevante, de lo que el autor de la pregunta parece haber sido consciente. Esta respuesta encajaría mejor, por ejemplo, ¿cuántas direcciones de Bitcoin hay? o ¿Es posible crear una dirección de bitcoin por fuerza bruta para robar dinero? .
+1 para obtener detalles sobre cuán improbable (no rentable) es la fuerza bruta en una dirección existente
En realidad, solo hay 2^160direcciones posibles. Más de una clave privada (de las cuales hay 2^256posibles) generaría hash en la misma dirección.

Una ligera adición a las respuestas existentes:

Si B no ha descargado suficiente de la cadena de bloques para ver la transacción de A, entonces la situación será como se describe anteriormente. Cuando un cliente de billetera descarga bloques, las transacciones en ellos se verifican para ver si alguno de ellos envía monedas a las direcciones que se encuentran en esta billetera. Si es así, esas monedas se agregan al saldo de la billetera. Entonces B verá aparecer 25 BTC adicionales en su billetera. Como se mencionó en las otras respuestas, podrá gastarlos como si fueran suyos. Así que es una carrera entre A y B para ver quién los gasta primero, cualquiera puede hacerlo.

Si B ya descargó las transacciones relevantes antes de generar la dirección en conflicto, la situación es un poco diferente. Hasta donde yo sé, la mayoría de los clientes de Bitcoin, al generar una nueva dirección aleatoria, no volverán a escanear la cadena de bloques para ver si contiene transacciones que envíen monedas a esa dirección. (Como se describió anteriormente, la probabilidad de que esto suceda es infinitesimalmente pequeña, por lo que para todos los propósitos prácticos, tal escaneo sería una pérdida de tiempo y recursos). Entonces, aunque B ahora tiene una clave privada que puede gastar los bitcoins de A, él no ser consciente de ello, a menos/hasta que él fuerce manualmente una nueva exploración de la cadena de bloques (por ejemplo, con la -rescanopción de Bitcoin Core), o verifique el saldo de su dirección usando un explorador de bloques en línea, o algo por el estilo.

Por supuesto, salvo fallas de RNG, esta pregunta es como preguntar "Si los 50 gobernadores estatales de EE. UU. fueran alcanzados por un rayo simultáneamente, ¿cómo se vería afectado el mercado de valores?" Se basa en una suposición tan improbable que es algo absurdo sacar alguna conclusión.

Sospecho que la respuesta simple es que la Persona B podría gastar los bitcoins de la Persona A, ya que aparecería en el libro mayor como su propietario. No muy diferente de simplemente darle a alguien su billetera.

No estoy seguro de que esto sea fundamentalmente diferente a la respuesta de Nicolai . Nicolai solo entra en más detalles. es decir, si fue solo un hash de clave pública lo que colisionó o un verdadero par de claves duplicadas. Así como detalles sobre la improbabilidad de que eso suceda.

Es curioso cómo las personas que afirman saber sobre criptografía no pueden calcular las probabilidades.

El espacio de direcciones de 2 128 no es la probabilidad o "fuerza" de nada (aparte de la probabilidad de elegir un valor en el espacio de direcciones).

La probabilidad de que 2 personas tengan la misma dirección de bitcoin es en realidad mucho más alta de lo que la gente puede sospechar por intuición (defectuosa).

De hecho, la probabilidad de colisión está relacionada con el problema del cumpleaños (lea sobre esto).

A medida que aumenta la cantidad de personas y direcciones generadas, la probabilidad de una colisión aumenta casi exponencialmente.

Dado que unos pocos millones de usuarios generan cada uno una nueva dirección por mes, la probabilidad de una colisión es tal que podría ocurrir varias veces en la vida, especialmente porque estamos tratando con hashes (o hashes de hashes).

Conviértalo en mil millones de usuarios y tendrá historias periódicas de colisiones que aparecen.

En realidad, la probabilidad de una colisión aumenta con el cuadrado (es decir, cuadráticamente) del número de direcciones de bitcoin utilizadas. No exponencialmente. Ahora, con esa corrección, la probabilidad de una colisión es aproximadamente cero en la vida útil del sistema solar.
Creo que estoy leyendo wikipedia, debe haber una ~2.2×10^19dirección de bitcoin hasta que haya un 50% de probabilidad de que haya habido al menos una colisión. Así que básicamente no te preocupes.
El problema de cumpleaños en direcciones de bitcoin de 160 bits no se aplica, ya que las colisiones son irrelevantes. Es un segundo ataque previo a la imagen que tiene un costo (2^160)/n donde n es el número de objetivos. Entonces, si los 21 millones de bitcoins ya se han extraído, debe calcular (2 ^ 160)/(21 * 10 ^ 6) = 7 * 10 ^ 40 = 2 ^ 135 hashes por bitcoin robado. Lo cual no es rentable (de lejos), incluso si asume que Bitcoin se usa para toda nuestra economía.
-1 por esta respuesta incorrecta. Aquí está mi intento de explicar el problema: hacer que los usuarios generen N direcciones (que podrían ser 1000 veces la cantidad de usuarios) conduce, por lo general, a aproximadamente una colisión de direcciones de bitcoin en todo el sistema de direcciones (sí, es bastante malo si dos coincidencia de direcciones) una vez N ^ 2 = 2 ^ 160 o N = 2 ^ 80. Entonces, hasta que no nos acerquemos a mil millones de mil millones de usuarios, no veremos una colisión. La única razón por la que no tenemos N ^ 2 = 2 ^ 256 o N = 2 ^ 128 es que la clave pública se debilita mediante el hash a una dirección pública de bitcoin de 160 bits.