¿Cómo evitan las billeteras de Bitcoin la reutilización de direcciones?

Como sabemos, abordar la reutilización compromete tanto la privacidad como la seguridad.

Mi pregunta es ¿cómo las billeteras de Bitcoin evitan la reutilización de direcciones?

¿La billetera genera una dirección desde el índice 1 y escanea la cadena de bloques, ya sea que se use una dirección o no, hasta que la billetera encuentre una dirección no utilizada?

En caso de billeteras HD , siempre que el usuario solicite generar una nueva dirección para recibir la dirección. Wallet genera una dirección desde el primer índice y verifica si el índice se usa o no hasta que llega a la dirección que no se ha usado.

¿La billetera mantiene el estado de la dirección no utilizada?

Si la billetera no tiene estado, entonces determinar la dirección no utilizada generando la dirección desde el principio y buscando en blockchain la dirección no utilizada es costoso .

Traté de encontrar documentación de billeteras como Ledger, Airbitz, pero no la encontré.

Editar: tenga en cuenta que tengo conocimiento de cómo se generan las claves semilla, privadas y públicas, como se explica en detalle BIP 32.

Mi pregunta aquí es cuando un usuario solicita generar una nueva dirección, ¿cómo encuentra Wallet que la dirección no se usó anteriormente?

Si la billetera genera una dirección desde el primer índice, escanea blockchain si la dirección se gastó previamente o no. hasta que encuentre la nueva dirección indexada para recibir el pago.

Respuestas (1)

¿La billetera genera una dirección desde el índice 1 y escanea la cadena de bloques, ya sea que se use una dirección o no, hasta que la billetera encuentre una dirección no utilizada?

No. El software de la billetera genera una semilla (pseudoaleatoria). Con esa semilla, genera claves privadas. Con esas claves privadas genera claves públicas y con esas claves públicas genera direcciones. Y esta dirección está (casi) siempre sin usar.

y comprueba si el índice se utiliza o no hasta que llega a la dirección que no se ha utilizado. ---- y ---- Si la billetera no tiene estado, ¿entonces determinar la dirección no utilizada generando la dirección desde el principio y buscando en blockchain la dirección no utilizada es costoso?

Así no es cómo funciona. La probabilidad de acertar en una dirección que ya está en uso (por el método semilla->SK->PK->dirección) es casi 0 porque no conoce la semilla de otras personas. No necesita verificar eso porque es casi imposible (a menos que tenga mucha potencia de computadora y quiera desperdiciar electricidad).

¿La billetera mantiene el estado de la dirección no utilizada?

La billetera simplemente verifica los fondos de todas sus direcciones, reconoce que se usa su primera dirección (tiene fondos) y le proporciona una nueva (también creada por la misma semilla (seed->SK->PK->address).

Creo que no entendiste mi pregunta o no pude explicarla claramente. Tengo conocimiento de cómo se genera la clave privada a partir de la semilla, como se explica en detalle BIP 32.
Supongamos que quiero recibir el pago y solicito billetera para generar una nueva dirección. Ya supuse que recibí o gasté montos correspondientes a las primeras 50 direcciones. Ahora, esta vez, cuando solicito que la billetera genere una dirección, la billetera generará la dirección 1 y luego verificará a través de blockchain si se usa o no. Si se usa, genera la dirección 2 y luego verifica a través de blockchain si se usa o no. Hasta que genera la dirección 50, encuentra que la dirección no se usa.
En otras palabras, ¿cómo genera la billetera una dirección y encuentra si una dirección se usó previamente o no?
Hasta donde yo sé: una billetera HD almacena una identificación (entero) en el archivo de la billetera en su computadora. Al principio, es 0 => te muestra la dirección1. Luego, obtienes fondos en esa dirección => la billetera reconoce que si está sincronizada => Incrementa la ID => ID es 1 => te muestra una dirección2 para recibir monedas... Eso debería ser posible 2^32 veces. No verifica la cadena de bloques sincronizada cada vez porque sabe que usó las primeras 100 direcciones si la ID almacenada es 100. Pero si eliminaría los datos de la billetera y restauraría todo desde la semilla, entonces debe verificar las 100 direcciones nuevamente.
Significa que almacena el índice localmente, y cada vez que hace referencia a ese índice para generar la dirección. En caso de que pierda el índice, la billetera recorre todos los índices desde el principio para generar la dirección no utilizada.