TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas

TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas

Desde hace dos semanas Runet hace ruido sobre Telegram y la situación con su bloqueo insensato y despiadado por parte de Roskomnadzor. El rebote ofendió a mucha gente, pero todos estos son temas para publicaciones en Geektimes. Me sorprendió algo más: todavía no he visto ni un solo análisis sobre Habré de la red TON cuyo lanzamiento está previsto sobre la base de Telegram - Telegram Open Network. Quería compensar esta deficiencia, porque allí hay algo que estudiar, incluso a pesar de la falta de declaraciones oficiales al respecto.

Permítanme recordarles que hay rumores de que Telegram ha lanzado una ICO cerrada a gran escala, habiendo ya recaudado cantidades increíbles de dinero. Se espera que este año se lance la propia criptomoneda de Gram, y cada usuario de Telegram tendrá automáticamente una billetera, lo que en sí mismo crea una ventaja significativa sobre otras criptomonedas.

Desgraciadamente, como no hay declaraciones oficiales, sólo puedo proceder más allá de documento de origen desconocido, sobre lo cual les advierto de inmediato. Por supuesto, puede resultar una falsificación muy hábil, pero también es posible que se trate de un documento técnico real del futuro sistema, escrito por Nikolai Durov (y filtrado, probablemente, por uno de los inversores). Pero incluso si es falso, nadie nos prohibirá estudiarlo y discutirlo, ¿verdad?

¿Qué dice este documento? Intentaré volver a contarlo con mis propias palabras, cerca del texto, pero en ruso y un poco más humanamente (que Nikolai me perdone por su tendencia a dedicarse a las matemáticas formales). Tenga en cuenta que incluso si esto es genuino, se trata de una descripción preliminar del sistema y es muy probable que cambie en el momento del lanzamiento público.

Aprendemos que además de las criptomonedas, se espera mucho más. Veámoslo en orden.

  • TON Blockchain. Esta es la base de todo el sistema. Si no sabes lo que es блокчейн — Recomiendo averiguarlo, porque aquí habrá muchas blockchains. Cadenas de bloques anidadas unas dentro de otras, prácticamente fragmentadas e incluso “verticales” dentro de bloques de otras cadenas de bloques. También habrá algunos términos que suenan interesantes como Enrutamiento instantáneo de hipercubo и Paradigma de fragmentación infinita, pero hablaremos de eso más adelante. Y, por supuesto, prueba de participación y contratos inteligentes.
  • Red TON P2P. Red peer-to-peer sobre cuya base se construirá el sistema. Se hablará de ella primero en esta parte de la historia.
  • TON Almacenamiento. Almacenamiento de archivos que, independientemente de la cadena de bloques, se construirá en la red peer-to-peer antes mencionada. Se puede comparar con torrents.
  • Proxy de tonelada. Este es un servicio cuyo propósito es aumentar el anonimato de los participantes de la red. Cualquier paquete puede enviarse no directamente, sino a través de túneles intermediarios con cifrado adicional, como I2P o TOR.
  • TONELADA DHT. Tabla hash distribuida para almacenar valores arbitrarios. También está construido encima red tonelada (pero al mismo tiempo lo usa él) y ayuda TON Almacenamiento encontrar nodos de “distribución”, y Proxy de tonelada — repetidores intermedios. Pero cabe señalar que, a diferencia de blockchain, esta tabla hash no es un almacenamiento seguro: no se puede almacenar información importante en ella.
  • TON Servicios. Plataforma de servicios personalizados. En esencia, se trata de una nueva Internet que se suma a todo lo descrito anteriormente. Intercambio de datos - vía red tonelada/Proxy de tonelada, y la lógica está en los contratos inteligentes del TON Blockchain. Y una interfaz con URL bastante familiares.
  • tonelada de DNS. Dado que estamos hablando de URL familiares, también necesitamos un convertidor de ellas a direcciones de 256 bits: cuentas, contratos, servicios y nodos.
  • TON pagos. Y aquí es donde entra en juego la cuestión del dinero. Y no sólo será gram — al igual que con el éter, cualquier “token” será posible; Los gramos serán simplemente la moneda "predeterminada" aquí.

Esta es la primera parte que describe la capa "conectada a tierra" de TON: su parte de red, construida sobre protocolos tradicionales. En la siguiente parte hablaremos sobre la cadena de bloques "suave", que será compatible con el sistema que se describe a continuación. Por lo tanto, mi orden de recuento es algo diferente del utilizado en el documento mencionado anteriormente (que comienza inmediatamente en el nivel abstracto).

Conceptos basicos

TL (Idioma de tipo). Es un formato binario abstracto para estructuras de datos arbitrarias. Se utiliza en el protocolo Telegram y se utilizará activamente en TON. Si quieres conocerlo en detalle... aquí está su descripción.

Picadillo (hachís). Función que realiza una transformación irreversible de una estructura de datos arbitraria en un único número de longitud fija. A lo largo de la documentación hablamos de la función. SHA-256.

Nodo de red (nodo). Un nodo es el software que garantizará el funcionamiento del sistema. En particular, se supone que cada aplicación cliente de Telegram incluirá un nodo TON. En un nivel bajo, los nodos tienen direcciones IPv4/IPv6 y se comunican mediante el protocolo UDP; en un nivel superior, tienen direcciones abstractas e implementar el protocolo ADNL (sobre direcciones abstractas y ADNL - ver más abajo). Cuando se trata de que algunas partes del sistema hagan algo o almacenen algunos datos, se entiende que esto lo hacen los nodos de la red.

dirección abstracta (o simplemente dirección, dirección). La dirección de un nodo está determinada por su clave pública. Más estrictamente, es un hash de 256 bits (SHA256) de la estructura de datos que contiene la clave pública (no se especifica el algoritmo criptográfico específico; se dan como ejemplos curvas elípticas y RSA-2048). Para que un nodo se comunique con otro, necesita conocer no sólo la dirección de ese, sino también esta estructura de datos. En teoría, un nodo físico puede crear cualquier número de direcciones (correspondientes a diferentes claves).

Además, a menudo se utiliza un enlace de este tipo: un "prototipo" en forma de estructura TL (que contiene casi cualquier dato) y un hash de 256 bits utilizado para el direccionamiento.

Bloccain (blockchain). Blockchain es una estructura de datos, elementos (bloques) que están ordenados en una "cadena", y cada bloque posterior de la cadena contiene el hash del anterior. De esta manera se logra la integridad: solo se pueden realizar cambios agregando nuevos bloques.

Servicio (de coches). Los servicios dentro de TON pueden ser de varios tipos, dependiendo de si utilizan blockchain o no. Por ejemplo, uno (o varios) nodos de red pueden procesar determinadas solicitudes RPC utilizando el protocolo ADNL que se describe a continuación, sin crear ningún registro en la cadena de bloques, como los servidores web tradicionales. Incluyendo la posibilidad de implementar HTTP sobre ADNL, así como la transición del propio mensajero a este protocolo. Por analogía con TOR o I2P, esto lo hará más resistente a diversos bloqueos.

Al mismo tiempo, una serie de servicios implican tanto la interacción con la cadena de bloques como el procesamiento de solicitudes fuera de ella. Por ejemplo, para TON Storage (almacenamiento de archivos), no es muy razonable almacenar los archivos en la cadena de bloques. Contendrá sólo hashes de archivos (junto con cierta metainformación sobre ellos), y los nodos de red especializados actuarán como "servidores de archivos", listos para enviarlos a otros nodos a través de ADNL.

Servicio de niebla (servicio de niebla). Estamos hablando de algunos servicios que implican descentralización y participación abierta en los mismos. Por ejemplo, TON Proxy es un servicio que puede ser compatible con cualquier participante que quiera proporcionar su nodo como intermediario (proxy) para reenviar paquetes entre otros nodos. Si lo desea, puede cobrar una tarifa que él mismo establezca, utilizando el sistema TON Payments para micropagos (que, a su vez, también es un servicio niebla).

ADNL: capa de red de datagramas abstractos

En el nivel más bajo, la comunicación entre nodos se realizará mediante el protocolo UDP (aunque se aceptan otras opciones).

Como se mencionó anteriormente, para que un nodo envíe un paquete a otro, debe conocer una de sus claves públicas (y por lo tanto la dirección que define). Cifra el paquete con esta clave y agrega la dirección de destino de 256 bits al comienzo del paquete; dado que un nodo puede tener varias de estas direcciones, esto le permitirá determinar qué clave usar para descifrar.

TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas

Además, en lugar de la dirección del destinatario, el comienzo del paquete de datos puede contener el llamado. identificador el canal. En este caso, el procesamiento del paquete ya depende de acuerdos específicos entre nodos; por ejemplo, los datos enviados a un determinado canal pueden estar destinados a otro nodo y deben reenviarse a él (este es el servicio Proxy de tonelada). Otro caso especial puede ser la interacción directa entre nodos, pero con cifrado utilizando un par de claves individuales para este canal (pregenerado mediante el protocolo Diffie-Hellman).

Finalmente, un caso especial es el canal "nulo": si un nodo aún no conoce las claves públicas de sus "vecinos", puede enviarles paquetes sin ningún cifrado. Esto está destinado únicamente a la inicialización: una vez que los nodos envían información sobre sus claves, deben usarse para comunicaciones posteriores.

El protocolo descrito anteriormente (256 bits de identificador de canal + contenido del paquete) se llama ADNL. La documentación menciona la posibilidad de implementar un análogo de TCP encima o su propio complemento: RLDP (Reliable Large Datagram Protocol), pero no entra en detalles sobre su implementación.

TON DHT: tabla hash distribuida

Como es el caso con otros sistemas distribuidos, TON implica la implementación de DHT - tabla hash distribuida. Más específicamente, la tabla es Como Kademlia. Si no estás familiarizado con este tipo de tabla hash, no te preocupes, a continuación describiré a grandes rasgos cómo funcionan.

TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas

En un sentido abstracto, DHT asigna claves de 256 bits a valores binarios de longitud arbitraria. En este caso, las claves de la tabla son hashes de una determinada estructura TL (las estructuras en sí también se almacenan junto con el DHT). Esto es muy similar a la formación de direcciones de nodo, y de hecho pueden estar presentes en el DHT (por ejemplo, usando dicha clave, la dirección IP de un nodo correspondiente a un determinado dirección abstracta, si no lo esconde). Pero en el caso general, los “prototipos de claves” (su descripciones, descripciones clave) son metadatos que indican el "propietario" de una entrada en una tabla hash (es decir, la clave pública de algún nodo), el tipo de valor almacenado y las reglas mediante las cuales esta entrada se puede cambiar posteriormente. Por ejemplo, una regla puede permitir que solo el propietario cambie el valor o prohibir cambiar el valor hacia abajo (para proteger contra ataques de repetición).

Además de las claves de 256 bits, se introduce el concepto de direcciones DHT. La diferencia con las direcciones de host habituales es que la dirección DHT está necesariamente vinculada a una dirección IP. Si un nodo no oculta su IP, puede usar una dirección normal para DHT. Pero lo más frecuente es que se cree una dirección separada “semipermanente” para las necesidades de DHT.
TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas
El concepto de distancia se introduce arriba de las claves y direcciones DHT; en esto todo coincide con las tablas. kademlia — la distancia entre las claves es igual al XOR (OR exclusivo bit a bit) de ellas. Al igual que en las tablas de Kademlia, el valor correspondiente a una determinada clave debe almacenarse en s nodos que tienen la distancia más corta a esta clave (s aquí hay un número relativamente pequeño).

Para que un nodo DHT se comunique con otros nodos similares, mantiene en la memoria tabla de enrutamiento DHT — Direcciones DHT e IP de nodos con los que interactuó anteriormente, agrupadas por distancia a ellos. Hay 256 grupos de este tipo (corresponden al bit más significativo establecido en el valor de distancia, es decir, los nodos a una distancia de 0 a 255 caerán en un grupo, de 256 a 65535, en el siguiente, etc.). Dentro de cada grupo, se almacena un número limitado de "mejores" nodos (en términos de ping a ellos).

TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas

Cada nodo debe soportar varias operaciones: almacenar un valor para una clave, búsqueda de nodos и buscar valores. La búsqueda de nodos implica emitir, en función de una clave determinada, los nodos más cercanos a ella desde la tabla de enrutamiento; Buscar valores es lo mismo, excepto cuando el nodo conoce el valor de la clave (luego simplemente lo devuelve). En consecuencia, si un nodo quiere encontrar un valor por clave en el DHT, envía solicitudes a una pequeña cantidad de nodos más cercanos a esta clave desde su tabla de enrutamiento. Si el valor requerido no está entre sus respuestas, pero hay otras direcciones de nodo, entonces se les repite la solicitud.

TON DHT se puede utilizar para diversos fines, por ejemplo, para implementar un almacenamiento de archivos tipo torrent (ver. TON Almacenamiento); determinar las direcciones de nodos que implementan ciertos servicios; para almacenar información sobre los propietarios de cuentas en blockchain. Pero la aplicación más importante es el descubrimiento de nodos por sus direcciones abstractas. Para hacer esto, la dirección se utiliza como clave cuyo valor debe encontrarse. Como resultado de la solicitud, se encontrará el nodo en sí (si la dirección buscada era su dirección DHT semipermanente), o el valor será la dirección IP y el puerto para la conexión, u otra dirección que deba usarse como túnel intermedio.

Redes superpuestas en TON

El protocolo ADNL descrito anteriormente implica la capacidad de cualquier nodo de intercambiar información entre sí, aunque no necesariamente de manera óptima. Podemos decir que gracias a ADNL, todos los nodos forman un gráfico TON global (idealmente conectado). Pero también es posible crear redes superpuestas: subgrafos dentro de este gráfico.
TON: Red abierta de Telegram. Parte 1: Introducción, capa de red, ADNL, DHT, redes superpuestas

Dentro de dicha red, la interacción se lleva a cabo solo directamente, a través de conexiones preformadas entre los nodos que participan en la red (a través de los canales ADNL descritos anteriormente). La formación de tales conexiones entre vecinos, la búsqueda de los propios vecinos, es un proceso automático que busca mantener la conectividad de la red superpuesta y minimizar los retrasos en el intercambio de datos en la misma.

Además, existe una manera de distribuir rápidamente grandes actualizaciones de transmisión dentro de la red: se dividen en pedazos, se complementan con un código de corrección de errores y todos estos pedazos se envían de un participante a otro. Por lo tanto, el participante no tiene que obtener todas las piezas antes de enviarlas a lo largo de la red.

Las redes superpuestas pueden ser públicas o privadas. Convertirse en miembro de una red pública no es difícil: necesita encontrar una estructura TL que la describa (puede ser pública o accesible mediante una determinada clave en DHT). En el caso de una red privada, el nodo debe conocer esta estructura de antemano.

To be continued

Decidí dividir la reseña de TON en varios artículos. Aquí termina esta parte y en el proximo Paso a considerar la estructura de la cadena de bloques (más precisamente, cadenas de bloques) en la que estará compuesto TON.

Fuente: habr.com

Añadir un comentario