Por qué las estadísticas de los nodos de Bitcoin no son confiables

Veo muchas estadísticas sobre cómo el X% de los nodos de Bitcoin ejecutan el cliente Y y cómo eso significa que los usuarios admiten Y. Tenga en cuenta que esto no se trata de lo que los mineros están señalando en bloques, sino de qué nodos de software en la red de Bitcoin se informa que se están ejecutando. Quiero dejar de lado este argumento de que estas estadísticas realmente significan algo.

Cómo funciona la red Bitcoin

Para comprender cómo se recopilan típicamente estas s estadísticas, debe comprender un poco sobre la red de Bitcoin. Cada nodo de la red se comunica con otros nodos que se denominan pares para formar la red real. La red de Bitcoin es lo que llamaría una red de chismes . Es decir, la red difunde información de forma descentralizada. La información en este caso son nuevas transacciones de mempool, nuevos bloques que se encontraron y la ubicación de otros nodos en la red. Las especificaciones de esta comunicación de red se pueden encontrar aquí.

Cada nodo, cuando se conecta a otro nodo, envía información de versión sobre sí mismo como se define en BIP0014. El valor user_agent de la información de versión es lo que identifica qué software está ejecutando. Si está ejecutando el cliente de referencia, puede ver el software que ejecutan sus pares a través del comando bitcoin-cli getpeerinfo y observe el valor de subver para cada par. Este valor, para el cliente de referencia, se parece a /Satoshi:0.13.2/ . La parte Satoshi es el software que se está ejecutando, la 0.13.2 es la versión del cliente de referencia y / y : se utilizan como separadores en la especificación BIP0014. Para Bitcoin Unlimited, la cadena de identificación del software es BitcoinUnlimited y para btcd, la cadena de identificación del software es btcwire y así sucesivamente.

Cómo cuentan los contadores de nodos

Para contar cuántos nodos ejecutan cada software de nodo, lo que suele hacer un contador es primero, entrar en la red como un nodo y luego derivar qué software está ejecutando cada par al observar la información de la versión que recibió. Se cuentan la dirección IP y la versión de software de cada par.

Luego, el contador de nodos pregunta a cada par qué pares tiene y se conecta a esos nodos. Al conectarse a los pares de pares, una vez más, el contador de nodos puede averiguar qué software está ejecutando cada nodo. Una vez más, se cuentan la dirección IP y la versión del software de cada uno de estos nodos si aún no se han contado.

El contador de nodos luego se conecta a los pares de pares de pares y obtiene su información de versión. Esto continúa hasta que no se encuentran nuevos nodos y listo, tenemos un recuento de cuántos nodos ejecutan qué software.

Suplantación de identidad

Esto presenta un problema, ya que los nodos se autoinforman. Un nodo puede informar que está ejecutando otro software del que está ejecutando actualmente.

De hecho, un nodo no tiene que ejecutar ningún software de nodo completo. Cuando otros nodos solicitan bloques o transacciones, un nodo falso puede simplemente pedirle a un nodo real o un explorador de bloques la información y transmitirla. Desde la perspectiva de los otros nodos, no habría forma de saber si el nodo falso es real o no, ya que el comportamiento es esencialmente el mismo.

Un ataque obvio de Sybil

Estadísticas de conteo de nodos, luego Sybil Attack es bastante fácil. Un adversario puede activar una tonelada de nodos que informan sobre la ejecución de cualquier software arbitrario e inflar las estadísticas hacia cualquier fin. Los únicos recursos que se necesitan son direcciones IP y un servidor para atender un montón de instancias. Sospecho que esto ya sucedió.

Conclusión

Mientras más importancia le demos a las estadísticas de conteo de nodos, más incentivo hay para manipular estas estadísticas. Por lo tanto, es de interés colectivo para la comunidad de Bitcoin dejar de prestar atención a estas estadísticas y centrarse en otros asuntos importantes.