La autocustodia en Bitcoin se apoya en un principio fundamental: quien posee la clave privada controla sus activos. Sin embargo, una reciente corrección en una librería de código abierto revela que este axioma no es absoluto. El software encargado de interpretar esa clave puede fallar, llevando a una billetera a no reconocer parte de sus propios saldos.
El mecanismo de búsqueda: una capa de software crítica
Las billeteras modernas, conocidas como deterministas jerárquicas (HD), generan todas sus direcciones a partir de una frase semilla. Para mostrar el saldo correcto, deben escanear la cadena de bloques y determinar qué transacciones no gastadas (UTXO) pertenecen a esa semilla. Este proceso se realiza mediante una ventana de búsqueda, un límite de direcciones consecutivas sin actividad que la billetera revisa antes de asumir que no hay más fondos. El estándar BIP-44 sugiere revisar veinte direcciones vacías, pero muchas aplicaciones amplían este rango a cientos o miles.
El problema radica en que esta ventana se ajusta dinámicamente. Si la billetera encuentra fondos en una dirección más allá del límite actual, extiende la búsqueda. Este ajuste, aunque práctico, traslada el control desde la clave privada hacia una lógica de software que el usuario promedio no puede auditar.
Un error de orden: cómo un fallo en BDK podía ocultar saldos
El pasado 2 de septiembre, los desarrolladores de Bitcoin Dev Kit (BDK), una biblioteca fundamental para varias billeteras, corrigieron un error que afectaba el reindexado. Este proceso ocurre, por ejemplo, al restaurar una billetera desde la semilla en un nuevo dispositivo. BDK realizaba el escaneo en una sola pasada, sin garantizar el orden de revisión de las direcciones.
Si la billetera encontraba primero un fondo en la dirección 900, extendía la ventana y podía detectar otro en la dirección 1850. Sin embargo, si el orden se invertía, al revisar primero la dirección 1850 (fuera de la ventana inicial), la descartaba y, aunque después encontrara la dirección 900 y ampliara la ventana, ya no volvía a examinar la dirección 1850. Como resultado, el saldo mostrado variaba entre sesiones, dependiendo del orden aleatorio del escaneo.
La solución implementada por BDK consiste en repetir el escaneo completo tantas veces como sea necesario hasta que la ventana de búsqueda deje de expandirse, eliminando la dependencia del orden de procesamiento.
Fondos seguros, pero invisibles: el riesgo en la restauración
Es crucial aclarar que los fondos nunca estuvieron en peligro. La red de Bitcoin los registraba correctamente y cualquier persona con la clave privada podía gastarlos. El error solo afectaba la capacidad de la billetera para mostrar el saldo completo, especialmente en situaciones críticas como la restauración de una billetera perdida, la configuración de billeteras multifirma o la recepción de pagos en direcciones distantes de la secuencia de derivación.
Billeteras como Bitkey, ProtonWallet y Bull Bitcoin, que dependen de BDK, podrían haber heredado este punto ciego. Aunque no hay evidencia de que hayan mostrado saldos incorrectos, todas comparten el mismo componente que acaba de ser corregido.
Lecciones para la autocustodia: más allá de la clave privada
El discurso sobre autocustodia suele centrarse en la protección de la semilla y la clave privada. Este incidente demuestra que la seguridad también depende del software que interpreta esos elementos. Un fallo en la lógica de reindexado, aunque no comprometa la blockchain, puede generar incertidumbre y, en el peor de los casos, llevar a un usuario a pensar que ha perdido sus fondos.
La naturaleza de código abierto de BDK permitió que el error fuera identificado y solucionado públicamente, pero también evidencia que incluso un código visible puede albergar fallos sutiles. La conclusión es clara: la autocustodia no es solo cuestión de tener la clave, sino de que el software que la utiliza sea confiable y esté auditado.