Retención de bloques: el ataque que no se ve en un share
Un minero envía shares reales y esconde el que habría sido un bloque. Descubre lo que cuesta, quién lo paga, por qué alguien lo hace y cómo se detecta.
¿Qué es un ataque de retención de bloques?
Es un minero que envía todos los shares normales pero esconde el que habría sido un bloque. El pool paga por los shares. El bloque nunca llega.
Cada share que envías a un pool es una solución real que no alcanzó el objetivo del bloque. El objetivo del bloque es el listón más difícil que tiene que superar un hash para formar un bloque. De vez en cuando una solución también lo supera, y ese share es un bloque entero.
Un share así parece igual que cualquier otro hasta que el pool lo comprueba.
Un atacante hace el trabajo honradamente y envía todos los shares normales. En silencio descarta el que habría sido un bloque. El pool cuenta los shares y paga por ellos. El bloque que debería haber recibido nunca llega.
¿Por qué un solo share no lo delata?
Nada en el atacante parece incorrecto en ningún share individual. El hardware es real, y el hashrate también. Los shares son válidos y llegan al ritmo correcto. El pool puede examinar un share y no ver absolutamente nada.
Lo que falta es una ausencia, y una ausencia solo se ve con el tiempo. Un minero con una determinada parte del hashrate del pool debería encontrar más o menos esa misma parte de sus bloques.
En una hora, eso no dice nada. Encontrar bloques es aleatorio, y los periodos sin bloques son normales. En una ventana lo bastante larga, dice muchísimo.
¿Cuánto cuesta y quién lo paga?
El pool pierde la recompensa de bloque que debería haber recibido. Pero la pérdida no cae realmente sobre el pool. Esta es la parte que conviene entender en cualquier pool.
- Con un esquema proporcional, la ronda sigue hasta que otro encuentra un bloque. Todos los de la ronda trabajaron en una ronda que duró más de lo que debía. Así que todos ganan un poco menos por unidad de trabajo. El coste se reparte entre los mineros honrados.
- Con un esquema de pago por share, es peor para el operador. El pool ya ha pagado cada share de su propio bolsillo y cuenta con que lleguen los bloques. Un ataque sostenido es una sangría directa para el operador. Históricamente, este es el caso que más ha preocupado.
¿Por qué alguien haría esto?
El atacante también tira la recompensa de bloque. A primera vista es puro daño propio. Solo tiene sentido si el atacante gana en algún sitio que el pool no puede ver.
El motivo habitual es la competencia. Alguien que gestiona su propio pool puede alquilar o apuntar hashrate a un rival y suprimir sus resultados. Su propio pool parece entonces tener más suerte en comparación. Los shares que el atacante sigue cobrando pagan el sabotaje.
En una variante más sutil, el atacante se guarda el bloque en lugar de descartarlo. Sigue minando encima de él en privado y lo envía más tarde, en el momento que le conviene. Es más difícil de llevar a cabo. Necesita una gran parte del hashrate para que valga la pena intentarlo.
¿Cómo se detecta?
La detección es estadística, porque no hay ninguna otra señal. Compara los bloques que ha encontrado un participante con los bloques que, según su número de shares, debería haber encontrado. Hazlo en una ventana lo bastante larga para que la suerte se compense.
La ventana es la parte difícil.
- Si es corta, la mala suerte normal parece un ataque. Se acusaría constantemente a mineros honrados.
- Si es larga, un atacante real opera durante un tiempo antes de que los números hablen.
No hay ninguna forma ingeniosa de evitar esta disyuntiva. Viene del azar, no del software.
Por eso un detector serio plantea la cuestión a una persona en lugar de actuar por su cuenta. Un baneo automático guiado por una estadística acabará baneando algún día a alguien que solo tuvo mala suerte. Dejar fuera a un minero legítimo es peor que el propio ataque.
¿Qué significa para un minero honrado?
Casi nada, y conviene decirlo claramente.
Tus shares se cuentan y se pagan igual en cualquier caso. Tener mala suerte no es una infracción y no puede serlo. En cualquier ventana corta, la mayoría de los mineros tiene mala suerte.
Una racha de rondas en las que aportaste mucho y el pool no encontró nada es varianza normal. La cifra de suerte en las estadísticas del pool te muestra lo normal que es.
Este ataque es una razón por la que a los pools les importa quién les apunta hashrate. También es la razón por la que un pool que publica sus bloques y su suerte con honestidad inspira más confianza. Todo lo que necesitas para comprobar el pool está en la página de bloques.