Pseudo-Node se discute aquí en /r/Bitcoin de Reddit
Esencialmente, funciona para retransmitir llamadas desde nodos conectados de forma aleatoria.
Este fue un experimento sobre la facilidad con la que se pueden "falsificar" los nodos completos. En conclusión: muy fácilmente.
Una implementación de prueba de concepto (y documentación) está disponible aquí:
https://github.com/basil00/PseudoNodo
Para la red, PseudoNode parece ser un nodo completo normal. Retransmite inversiones, txs, bloques, etc. como un nodo completo. En realidad, PseudoNode es un tipo de servidor proxy p2p. Simplemente reenvía cualquier solicitud que no puede manejar (getdata, getheaders, etc.) a los nodos vecinos. Para obtener más información, consulte los enlaces anteriores.
PseudoNode no usa disco (no requiere descarga de blockchain), usa poca CPU/RAM y usa menos recursos de red (ancho de banda) que un nodo completo normal. Un PseudoNodo puede "sincronizarse" con la red en cuestión de segundos.
PseudoNode demuestra algunos de los problemas con los nodos completos incentivados (incluido el "Programa de incentivos de Bitnodes"). Es difícil probar que un nodo completo es realmente un nodo completo.
La implementación tiene principalmente valor de novedad/prueba de concepto. No pretende ser un software de "producción".
Y las preguntas frecuentes :
¿PseudoNode daña la red?
Respuesta corta: no.
Respuesta larga: no, a menos que la cantidad de pseudonodos supere significativamente la cantidad de nodos completos normales. De lo contrario, si PseudoNode puede conectarse al menos a algunos buenos nodos (predeterminado 2), entonces PseudoNode actuará como un nodo normal y contribuirá con el ancho de banda de la red.
¿Puede PseudoNode hacer que la red se bifurque?
No, PseudoNode simplemente sigue lo que hacen otros nodos.
¿Puede PseudoNode robar monedas?
No.
¿Se pueden prohibir los pseudonodos de la red?
No es fácil. Las solicitudes que PseudoNode no puede manejar directamente siempre se pueden reenviar a otros nodos completos (cooperativos).
Esto me parece increíblemente imprudente en términos de vectores de ataque. Obviamente, es necesario evaluar un equilibrio entre los pros y los contras, y dado que su valor es "novedad" (autodescrito por el desarrollador), varios contras parecen evidentes de inmediato:
new latency = original latency * performance decrease %
throttled latency
~> cutoff latency
)2 preguntas relacionadas:
Una gran cantidad de pseudonodos interconectados hace que lanzar un ataque de agotamiento del ancho de banda sea mucho más fácil. Bitcoin Core valida la mayor parte de la información antes de transmitirla, pero los psuedo-nodos no validan, por lo que si puede conectar algunos psuedo-nodos, probablemente sea fácil hacer que desperdicien toneladas de ancho de banda al transmitirse datos basura entre sí. y luego a sus compañeros.
Por ejemplo, si hay 101 psuedo-nodos (PN) conectados entre sí, puede enviar a PN1 un inv
paquete de aspecto válido que anuncie una sola transacción falsa (alrededor de 61 bytes más la sobrecarga del paquete TCP). Cada PN transmite eso inv
por un mínimo de 6100 bytes de carga desperdiciados.
Pero esas PN también están conectadas a nodos reales. Digamos 500 nodos reales, por lo que ahora el ancho de banda de carga de PN desperdiciado es de 36 600 bytes (más la sobrecarga de TCP), todo porque un atacante creó un único archivo inv
. Peor aún, los nodos reales solicitarán la transacción utilizando un getdata
paquete de 61 bytes , desperdiciando 30 500 bytes de ancho de banda de carga de nodos reales.
Si el atacante envía 1 MB de datos falsos por segundo durante todo un día, usará 86 gigabytes de su propio ancho de banda, pero desperdiciará 52 terabytes de ancho de banda de carga de PN agregado y potencialmente 43 terabytes de ancho de banda de carga de nodo real.
(Dependiendo de cómo se escriban las PN, pueden desperdiciar aún más ancho de banda al retransmitir el getdata
paquete).
Compare esto con el costo de ejecutar el ataque contra un solo nodo real. Por cada paquete de 61 bytes inv
que carga el atacante, el nodo real responde cargando un único paquete de 61 bytes getdata
. Por lo tanto, un ataque de agotamiento del ancho de banda contra un nodo real requiere aproximadamente 1:1 de ancho de banda desperdiciado. El nodo real no transmite más inv
hasta que recibe y valida la transacción a la que se refiere, por lo que ningún otro nodo tiene ancho de banda desperdiciado.
¿Hay contingencias factibles en el protocolo para delinear entre un PN y un nodo? Por ejemplo, ¿diferentes versiones de Bitcoincore identificarían PN (o una simple modificación del protocolo)?
El protocolo ya tiene la noción de una puntuación de prohibición DoS, en la que cada nodo de Bitcoin Core asigna una puntuación privada a cada uno de sus pares por cualquier mal comportamiento que realicen. Una vez que la puntuación de prohibición de DoS para un par en particular alcanza un umbral (100 de forma predeterminada), el nodo se desconecta del par y rechaza más conexiones desde su dirección IP durante un tiempo (un día de forma predeterminada). El mal comportamiento incluye el envío de transacciones y bloques no válidos.
Debido a que las PN no validan los datos, felizmente transmitirán datos no válidos. Si se vuelven comunes, alguien que quiera dañar las PN podría simplemente conectarse a cualquier nodo anunciado y enviarle un montón de datos no válidos. Si fuera un nodo completo real, se desconectará (prohibición de DoS). Si fuera un PN, transmitiría esos datos a los nodos completos reales, lo que provocaría que los nodos completos reales lo prohibieran. Esto haría que la PN fuera inútil y permitiría que el afligido detectara qué nodos son PN; entonces, el afligido podría publicar una base de datos (no autenticable) de direcciones IP de PN.
Este método funciona mejor contra las NP a largo plazo. Para dificultar la ejecución de ataques Sybil a corto plazo desde muchas PN livianas, se podría usar algo como la prueba de almacenamiento de Greg Maxwell para hacer que el consumo de recursos distribuidos sea costoso .
inv
( tx
la forma en que BitcoinJ envía transacciones en modo SPV), y luego esperando a ver si el nodo se desconecta.
Nick ODell
This seems incredibly reckless in terms of attack vectors
¿quiere decir que los pseudonodos serían vulnerables a ataques que el cliente de Bitcoin no es, o que el autor no ha pensado en todos los ataques que podrían llevarse a cabo?mago de ozzie
Albahaca