Sincronización de billetera Bitcoin

Hablemos de la sincronización de billeteras digitales con la red Bitcoin. Esbozamos los principales enfoques, los principios de su trabajo y complejidad. El material puede ser útil no solo para los desarrolladores, sino también para los usuarios comunes para familiarizarse con las características de las billeteras digitales y los aspectos del trabajo seguro con billeteras.

Según el material de este artículo, se grabó una de las conferencias del curso en línea de blockchain " Sincronizar billeteras con la red Bitcoin ".

Funciones básicas de billetera


Comencemos con la funcionalidad básica de una billetera digital:

  • copia de seguridad de claves privadas;
  • aceptación de pago;
  • pantalla de equilibrio;
  • mostrar el historial de transacciones;
  • enviando pagos.

Para hacer una copia de seguridad de las claves privadas, solo necesita el módulo responsable de almacenar y administrar las claves. Sin embargo, en el caso de las cuatro funciones restantes, definitivamente necesitará trabajar con la red Bitcoin. De hecho, para leer y escribir una base de datos de transacciones común, al menos debe convertirse en uno de los nodos de esta red y seguir las especificaciones para procesar e intercambiar datos en ella. Por lo tanto, es necesario tener datos sobre todas las transacciones en las que participaron las direcciones de una determinada billetera. También se necesitarán datos sobre el estado actual de la red para preparar una nueva transacción y realizar un pago.

Lo más importante que un usuario de billetera digital debe saber de manera confiable al aceptar y enviar pagos es el estado de sus transacciones. Obviamente, la transacción se considera incompleta si se envió, pero no recibió la confirmación completa. Como resultado, el destinatario no puede aceptar el pago para, por ejemplo, devolver los bienes o proporcionar el servicio.

Las dificultades de trabajar en una red distribuida.


Trabajar con una red distribuida es un tema bastante complicado, que generalmente encuentra los siguientes problemas. Uno de ellos consiste en el método de verificar los datos recibidos de una red distribuida, y el segundo es optimizar el almacenamiento de datos de estos datos. Estos requisitos están en conflicto, ya que una mayor cantidad de datos almacenados permite una verificación más completa de nuevas transacciones y bloques. No existe una solución ideal para estos problemas, es imposible procesar transacciones de manera confiable y con recursos mínimos, por lo que debe buscar un equilibrio, un compromiso de simplicidad y seguridad.

Otro problema es el siguiente. Para obtener el historial de transacciones en una dirección específica en un nodo de red completo, debe pasar por toda la cadena de bloques (desde la génesis hasta la última conocida), que es lo suficientemente larga, ya que esta es una gran cantidad de datos, y la fuerza bruta es un enfoque poco efectivo. Por lo tanto, puede usar ciertos enfoques para optimizar las consultas. Para esto, se usan complementos especiales en un nodo de red regular, que ayudan a indexar la cadena de bloques y almacenar en caché algunos datos para acelerar la búsqueda de métricas populares. Según este principio, cualquier explorador de blockchain funciona, por ejemplo, blockchain.info, que devuelve rápidamente datos sobre casi cualquier dirección, sobre cualquier transacción, etc.

Por lo tanto, hay varios enfoques fundamentalmente diferentes para la implementación de la interacción y sincronización de una billetera digital con una red distribuida. Miremos a ellos.

La sincronización de billetera se aproxima con una red de pago


Hay tres enfoques principales. El primero supone que la billetera en sí es un nodo completo de la red Bitcoin. El segundo enfoque utiliza el llamado nodo de confianza. De hecho, este es un host extraño, pero el usuario de la billetera confía en él. Y el tercer enfoque implica la interacción directa con otros nodos de la red, pero en una versión ligera, utilizando la metodología de Verificación de Pago Simplificado (SPV). Esta técnica le permite verificar la validez de la transacción con un alto grado de confiabilidad, pero no recurrir al lanzamiento de un nodo de red completo. Echemos un vistazo más de cerca a cada uno de estos enfoques de sincronización.

imagen

Trabaja con un anfitrión completo


En el primer caso, todo es bastante simple. Su billetera tiene un módulo que almacena toda la cadena de bloques y un módulo que se comunica con otros nodos de la red Bitcoin. Por lo tanto, siempre puede verificar una nueva transacción entrante: ¿cumple realmente con las reglas del protocolo, compromete gastos dobles, etc. Usted ejerce completamente el control sobre la verificación de datos.

La desventaja de este enfoque es la necesidad de asignar una gran cantidad de espacio en disco para almacenar la cadena de bloques completa, para mantener el nodo de red en funcionamiento ininterrumpido y actualizaciones de software oportunas.

Este método es utilizado por usuarios comunes que regularmente aceptan y envían pagos en grandes cantidades, lo que requiere un alto nivel de confiabilidad. Además, todos los servicios principales que brindan la posibilidad de almacenamiento centralizado de bitcoins y acceso en línea a la billetera necesariamente utilizan este enfoque. Porque hay altos requisitos de seguridad, así como para el trabajo independiente con Bitcoin.

Es importante comprender que el usuario de un almacenamiento centralizado de bitcoins depende completamente de este servicio y del correcto funcionamiento del nodo de red utilizado por este servicio. De hecho, si las monedas se almacenan en dicho servicio, entonces no pertenecen al usuario sino al servicio.

Tenga en cuenta que el uso de este enfoque es uno de los más simples y confiables, incluso para el usuario promedio. Para hacer esto, solo necesita tomar el código fuente o los binarios ya preparados, por ejemplo, Bitcoin Core y ejecutar el software. Un inconveniente significativo puede considerarse solo los requisitos para la computadora.

Trabaja con un host de confianza


La diferencia entre este enfoque y el anterior es la separación de la lógica de billetera y la lógica de verificación de transacciones. Hay un llamado nodo de red confiable de Bitcoin. En términos generales, este es el nodo de red de Bitcoin completo más común, al que el usuario le confía la verificación de sus transacciones. Por ejemplo, podría ser un host compatible con su amigo, y el usuario puede confiarle que verifique sus transacciones.

Muy a menudo, este enfoque se utiliza en billeteras digitales móviles. Supongamos que una empresa que desarrolla una billetera móvil admite sitios de confianza y promete que garantizará la verificación correcta de las transacciones. En este caso, los usuarios confían en la empresa al desarrollador de una billetera digital, de hecho, creen en las promesas. Pero al mismo tiempo, vale la pena entender que el usuario puede almacenar de forma independiente sus claves privadas y garantizar las transacciones en su dispositivo. Sin embargo, el usuario no verifica el estado de la confirmación de la transacción, sino que le pregunta al nodo de confianza.

¿Cuáles son las ventajas y desventajas de este enfoque? Como en el caso anterior, aunque indirectamente, puede influir en la verificación de transacciones en la red Bitcoin, porque el usuario todavía tiene un nodo de red confiable. La ventaja es que se libera de tener que almacenar una copia completa de la cadena de bloques en su dispositivo. Sin embargo, la dependencia de un nodo confiable es un inconveniente, porque en caso de falla, el usuario no siempre puede cambiar a otro nodo confiable. Dado que la verificación de las transacciones se lleva a cabo en un servidor remoto, debe asegurarse de la confiabilidad del canal de transferencia de datos entre la billetera y el servidor en el que se realiza la verificación. Con este enfoque, aparecen amenazas como "El hombre en el medio".

Cuando se utiliza un host de confianza, las claves privadas se almacenan por separado de las direcciones de billetera. En este caso, el nodo en sí no puede conocer de manera confiable los cambios en las direcciones que necesita rastrear. Esto significa que la billetera digital debe informar periódicamente al nodo de confianza de la lista de direcciones que le interesan.

La desventaja de este enfoque es la dependencia de la billetera digital del nodo de confianza, en particular en términos de acceso a los datos relevantes del sistema de pago. Tan pronto como el usuario pierde el acceso al nodo de confianza o el nodo niega el servicio, el usuario pierde la conexión con la red. En consecuencia, el usuario pierde la capacidad de recibir y enviar pagos. Para reducir el riesgo de perder el acceso a un sitio confiable, puede seleccionar varios sitios confiables. Esto significa que, en condiciones normales, el usuario se conecta y trabaja con un nodo confiable, pero si se pierde el acceso, la billetera digital se conecta automáticamente a otro nodo confiable. De hecho, con cada conexión, la billetera selecciona aleatoriamente un nodo de la lista de confiables.

Este método es utilizado principalmente por billeteras móviles, ya que le permite verificar las transacciones y simplificar el funcionamiento de la aplicación móvil. Ejemplos de tales billeteras móviles de Bitcoin son Mycelium y Coinomi. Distributed Lab también desarrolló y mantiene una billetera llamada Bitxfy, donde se aplica este enfoque.

Trabajar con un host SPV


El tercer enfoque común para sincronizar una billetera digital con una red Bitcoin es un nodo de red liviano. Esta es una verificación de pago simplificada (SPV). En este enfoque, es posible que no necesite ejecutar sus nodos completos o seleccionar los de confianza. Se supone que la billetera digital se comunica directamente con otros nodos de la red: de hecho, selecciona varias decenas de nodos completos de otras personas y mantiene una conexión con ellos. La diferencia es que el nodo ligero se comunica con otros nodos en igualdad de condiciones, intercambiando mensajes P2P con ellos, pero no almacena todo el historial de transacciones. Aquí, para verificar las transacciones entrantes, se utiliza la técnica SPV. De hecho, un nodo liviano realiza solo una parte de las comprobaciones más importantes de aquellos que realizan un nodo de red completo.

¿Cómo funciona el trabajo en este caso? En lugar de recibir bloques, como lo hace un nodo completo, un nodo SPV recibe solo encabezados de bloque, que son mucho más pequeños (80 bytes). El encabezado contiene los datos necesarios para verificar la confirmación de una transacción específica en este bloque. Más específicamente, en el encabezado del bloque hay un campo de raíz de Merkle donde se calcula el valor hash de todas las transacciones en el bloque, calculado de acuerdo con el esquema del árbol de Merkle.

imagen

El esquema de Merkle Tree le permite verificar si el valor hash de una transacción en particular está incluido en Merkle Root, sin tener todas las demás transacciones en el bloque. Por lo tanto, al tener una transacción, un encabezado de bloque y una rama de Merkle para esta transacción (puede solicitarla desde un nodo completo), una billetera digital puede asegurarse de que la transacción se haya confirmado en un bloque específico.

¿Por qué no se puede considerar esto una verificación completa de las transacciones? Por supuesto, el usuario se independiza de nodos de red específicos y puede comunicarse directamente con una red distribuida. Para hacer esto, no necesita almacenar toda la cadena de bloques. Pero la desventaja es que el cliente liviano no verifica completamente la transacción de manera independiente, porque no tiene todos los datos necesarios para esto (por ejemplo, monedas no gastadas). Comprueba solo el hecho de la validación de la transacción por parte de los validadores, es decir, se asegura de que esta transacción haya sido completamente verificada por otros nodos y propietarios de la mayoría de la potencia informática de la red (mineros). En este caso, la confiabilidad nuevamente se reduce a confiar en que la mayor parte de la potencia de procesamiento se utiliza para un funcionamiento justo. En otras palabras, no verifica la transacción usted mismo, pero confía en esto a la mayoría.

Una característica del uso de billeteras digitales que implementan el enfoque de nodo SPV es la necesidad de mantener una conexión de red con una gran cantidad de nodos de red completos independientes. Esto es necesario para minimizar la probabilidad de que el nodo se conecte y reciba datos solo de los nodos del atacante. Entonces el atacante puede imponer al usuario un estado alternativo (falso) del historial de transacciones. Como resultado, la víctima puede aceptar el pago de la transacción, que según la versión del atacante se confirma, aunque en realidad no. Para aumentar las posibilidades de recibir datos actuales sobre el estado real de la red, el usuario debe maximizar el número de nodos independientes para la comunicación. Cuantos más haya, menos probable es que todos conspiren contra el usuario.

Como ya entendió, los nodos SPV exigen un funcionamiento estable de la conexión de red, sin embargo, a menudo se utilizan incluso en aplicaciones móviles. Este enfoque de sincronización con la red de pago está bastante extendido y se usa en varias billeteras Bitcoin populares. Entre ellos están Bitcoin Wallet, Electrum, así como Bread Wallet.

Preguntas frecuentes


"¿Dónde puedo encontrar nodos completos en los que pueda confiar?"

Ya es bastante difícil responder en qué nodos puede confiar. Esto es una cuestión de preferencia personal. Hay servicios que proporcionan información confiable, como Blockchain.info, rara vez alguien confía en ellos, especialmente cuando se trata de grandes cantidades. Hay que tener mucho cuidado al elegir un nodo de confianza, ya que es un intermediario entre el usuario y la red de pago. Una vez que Blockchain.info se bloqueó durante dos días debido a problemas con el proveedor de DNS, las billeteras que usaban Blockchain.info como un nodo confiable no pudieron sincronizarse con la red de Bitcoin y al menos de alguna manera funcionaron.

- ¿Qué garantías ofrece el equipo de billetera y cuál es su responsabilidad?

Este problema es más legal que técnico. Cualquier software que se distribuya oficialmente tiene un "Términos de uso", que establece lo que puede presentar a los desarrolladores si hay ciertos problemas en su software. Los "Términos de uso" difieren en las diferentes aplicaciones. Como siempre, el usuario responde a la pregunta de si confía en los desarrolladores o no, antes de comenzar a usar su producto.

- ¿Quién decide si es un nodo confiable?

Solo el usuario propietario de la billetera. El valor de los sitios de confianza es simplificar enormemente la billetera. Selecciona un nodo específico en el que confía la verificación de transacciones. Asume toda la carga de realizar operaciones de verificación, y usted confía en los datos de estado de la red que le pasa. Esto es una cuestión de confianza personal y más.

- ¿Cuántos sitios de confianza pueden ser?

Puede seleccionar cualquier número de nodos de confianza para minimizar el riesgo de perder el acceso a la red. Por ejemplo, tres nodos. Si encuentra problemas con el acceso al primero, entonces se conecta al segundo y continúa trabajando con él exactamente de la misma manera.

- ¿Qué pasará con las monedas si los terremotos destruyen total o parcialmente los servidores en los que están almacenados?

Aquí es necesario decir no sobre monedas, sino sobre el almacenamiento de claves que se utilizan para acceder a estas monedas. Considere dos opciones para una situación. Si se destruye el servidor que proporcionó acceso a la red Bitcoin. Que no te afectará de ninguna manera. Perderá temporalmente el acceso a la base de datos distribuida, pero seguirá teniendo claves que le permitirán gastar estas monedas. Si el servidor en el que se almacenaron sus claves se destruye, mientras no tenga una copia de seguridad de estas claves, entonces no podrá acceder a sus monedas.

- ¿Es seguro poner una billetera, poner monedas, escribir una frase semilla en papel y eliminarla?

De hecho si. Debe guardar la frase semilla; este es un mínimo suficiente. La cadena de bloques almacena información sobre qué monedas se almacenan en qué direcciones. Debe guardar sus claves privadas para acceder a estas monedas. En su caso, esta es una frase semilla.

- ¿Es posible agregar algún complemento en la cadena de bloques localmente para poder analizar los datos en la cadena de bloques?

Puede agregar cualquier software que analizará la cadena de bloques. Este puede ser un software escrito por el propio usuario, o puede haber una solución llave en mano. Todo depende de tus objetivos. Si desea optimizar las consultas para buscar transacciones específicas vinculadas a direcciones específicas, como lo hace el explorador de blockchain, puede usar un software que indexará la cadena de bloques y almacenará en caché ciertos datos. Un ejemplo de dicho software es BitCore (compatible con BitPay). BitCore es de código abierto y simplemente puede usarlo junto con su sitio completo.

Source: https://habr.com/ru/post/es416469/


All Articles