🇪🇸 La criptografía detrás de los bloques Cardano

:cuba::es: raducción de The cryptography behind Cardano blocks publicado por el operador de Pooles Cardanians - CRDNS.

Palabras y frases claves del artículo relacionadas con el ecosistema Cardano que serán respetadas en el idioma inglés, dado su continuo uso en el foro, artículos de sitios web, y redes sociales.

Stake Pool: Entidad de la red que, entre otras cosas, se encarga de producir y validar bloques. Puede actuar individualmente, o como tercero en nombre de varios usuarios de la red que lo elijan para ello.

Slot Leader: Stake Pool que se le ha asignado la posibilidad de crear un bloque para un Slot en particular.

Epoch: Época. Unidad de tiempo dentro de la red Cardano que dura 5 días.

Slot: Unidad de tiempo de la red Cardano que dura un segundo, dentro de cada Slot puede existir la posibilidad de crear un bloque.

Stake: Cantidad de ADA delegada a un Stake Pool que controla un usuario, o cantidad de ADA que controla un Stake Pool.

Staking: Participar: Proceso en el cual se delegan los recursos ADA.

Proof of Work (PoW): Prueba de Trabajo. Protocolo de consenso utilizado en varias Blockchain, como Bitcoin o Ethereum.

Proof of Stake (PoS): Prueba de Participación. Protocolo de consenso utilizado en varias Blockchain, como Polkadot, ETH2 y el propio Cardano.

Key Evolving Signature (KES): Llave de Firma Evolutiva. Se explica en el propio artículo

Verifiable Random Function (VRF): Función Aleatoria Verificable. Se explica en el propio artículo.

Number Only Used Once (Nonce): Número usado solo una vez. Se explica en el propio artículo.


Las criptomonedas pudieron inventarse debido a los muchos logros importantes en criptografía. No es una sorpresa que la criptografía se utilice no solo para firmar transacciones, sino que también se utilice para la creación de nuevos bloques. En el artículo, veremos cómo se crea un nuevo bloque en la red Cardano desde el punto de vista de la criptografía.

o.031cff2e31f03783be5742908b61f92d

Los bloques son creados por los Pools

En la red Cardano, los nodos de los operadores de Stake Pools son responsables de la producción de nuevos bloques. Cada operador de Pool necesita generar algunos pares de claves y registrarse como productor de bloques para poder convertirse en Slot Leader. El tiempo se divide en Epochs y cada Epoch se divide en Slots. Un Slot dura un segundo. Hay 432.000 Slots en cada Epoch, por lo que cada uno dura 5 días. Es posible configurar la frecuencia con la que se creará un nuevo bloque mediante el parámetro “D”. Actualmente, se establece en un valor que permite a la red crear un nuevo bloque aproximadamente cada 20 segundos. Significa que aproximadamente cada 20 segundos algún nodo se convierte en Slot Leader y puede producir un nuevo bloque. En cada época se crean aproximadamente 21.600 bloques. Debido a la aleatoriedad que se implementa en el protocolo, en realidad se pueden crear más o menos bloques.

En la red Cardano, cada Pool registrado verifica cada segundo si es Slot Leader para un Slot determinado. En caso afirmativo, puede producir un nuevo bloque y proporcionar una prueba determinada, que es validada por otros nodos de la red. Cuanto mayor sea el Stake de un Pool, más a menudo se convertirá en un Slot Leader. La selección de un Slot Leader se basa en la aleatoriedad. En el caso ideal, solo se selecciona un Slot Leader en una ranura determinada. Obviamente, no debe ser posible que se creen muchos nuevos bloques válidos en un solo Slot.

En las redes PoW, se debe consumir potencia de cálculo para producir un nuevo bloque. Todos los Pools compiten entre sí para resolver el complejo acertijo y es muy probable que solo un Pool tenga éxito en un ciclo determinado. En redes PoW puede suceder que se puedan producir dos bloques válidos en un ciclo. Llamémoslos bloque A y bloque B. En el próximo ciclo, los pooles deben decidir cuál bloque desean agregar a la cadena. En la mayoría de los casos, un Pool comienza a trabajar en un nuevo bloque una vez que se produzca un bloque válido. Puede suceder que algunos Pools deseen construir el bloque A ya que lo recibieron antes del bloque B. Lo contrario puede suceder con otros Pools y construyen el bloque B. A medida que se agregan algunos bloques nuevos con el tiempo, la cadena más larga ganará. y permanecerá en la cadena de bloques. El resto de los bloques (después de la bifurcación) quedarán huérfanos (los bloques no forman parte de la cadena de bloques, incluidas todas las transacciones). Observe que, de esta forma, el consenso de PoW protege la red contra la creación de muchos bloques válidos en un ciclo dado. Es económicamente caro crear un bloque, ya que durante aproximadamente 10 minutos se gasta mucha electricidad para resolver el acertijo.

En la red Cardano, la protección contra la inundación de la red por un grupo de bloques válidos se basa en la criptografía. Solo un Slot Leader seleccionado puede producir un bloque válido en un Slot determinado. El Pool que produjo el bloque debe proporcionar pruebas criptográficas que otros nodos puedan verificar fácilmente. Es imposible adivinar de antemano cómo es dicha prueba, por lo que es imposible tratar de engañar. Cardano permite crear un bloque de forma económica, pero solo un Slot Leader puede crear uno en un Slot determinado.

La seguridad de Cardano se basa en las llaves.

Probablemente has escuchado que necesitas usar una llave criptográfica para poder enviar una transacción. Para ser más precisos, en Cardano una pareja de llaves asimétricas criptográficas son generadas para ese propósito. Una pareja de llaves consiste de una llave privada y una pública. La llave privada debe quedar en secreto, y el dueño debe guardarla bien e idealmente en un sitio sin acceso a Internet. La llave pública puede ser publicada y todo el mundo puede saber cual es. Cuando un usuario firma una transacción con la llave privada, está dando una prueba de que él es dueño de dichas monedas. Es posible firmar más transacciones con la misma llave privada ya que la seguridad de dicha llave no se compromete al ser utilizada para firmar. La contraparte necesita conocer la llave pública correspondiente para validar dicha firma, y así el resto de la red puede validar esto fácilmente. Firmar un certificado de Staking es un proceso muy similar. Solamente el dueño de las monedas ADA puede realizar decisiones en cuanto al Staking, el principio es el mismo. Las llaves privadas son usadas por sus dueños para firmar, y las públicas para que sea verificadas por otros usuarios. Los certificados de Staking son enviados a la red y guardados en la Blockchain. Por tanto, todo el mundo puede verificarlo.

Los operadores de los Stake Pools necesitan generar unos pocos juegos de llaves:

  1. Un par de llaves frías operacionales. Dan el derecho de firmar bloques a la llave KES
  2. Un par de llaves KES: Son usadas para firmar nuevos bloques, expiran periódicamente y unas nuevas son computadas.
  3. Un par de llaves VRF. Son usadas para averiguar si un nodo es elegido Slot Leader para un Slot determinado, el nodo realiza esta verificación a cada segundo.

Las llaves son usadas para la creación de un certificado operacional y además para comprobar si un nodo es Slot Leader para un Slot dado, y para firmar bloques. El par de llaves frías deben ser almacenadas en un lugar sin conexión a Internet, estas llaves frías permiten a los operadores generar nuevos certificados operacionales para cada período de KES. El par de llaves caliente KES son llaves operacionales que autentican el nodo.

Un nuevo certificado operacional es enviado a la red y es almacenado en la blockchain. Todos los Pooles son registrados y cada nodo conoce los otros Pooles registrados. El certificado operacional es usado para la verificar si el Pool tiene la autoridad de ejecutarlo. Los certificados contienen información pública de los Pooles, tales como: direcciones, llaves, y firmas del operador. Los operadores necesitan resguardar bien los secretos criptográficos que les permiten convertirse en Slot Leaders y firmar nuevos bloques. El certificado operacional representa el vínculo entre las llaves frías y las llaves operacionales.

Como dijimos, un certificado operacional debe estar firmado por la llave fuera de línea (fría). Que otorga el derecho de firmar bloques a la llave KES que expira regularmente después de algunos epochs y que se basa en los parámetros génesis. Se utiliza un mecanismo similar al esquema de firma segura. Este mecanismo se basa en la idea de que un adversario no puede falsificar las firmas que se han realizado en el pasado, ya que permite mantener la misma clave pública, pero se crean unas nuevas llaves privadas una y otra vez. Por lo tanto, la clave privada se puede borrar inmediatamente que se haya utilizado. La clave de firma KES expira regularmente (período KES) y se debe calcular una nueva para el período siguiente. La antigua clave KES se borra. Por lo tanto, nadie puede volver a firmar un bloque con la llave KES borrada. Si un pirata informático compromete la llave y obtiene acceso a la llave de firma, solo puede usarla para firmar bloques a partir de ahora, pero no bloques que hayan sido firmados en el pasado. Este proceso hace que sea imposible para el hacker reescribir el historial.

Cuando un nodo genera el certificado operacional, se incluye un contador. Un contador es un número que se incrementa siempre que un nodo crea y publica un nuevo certificado. Cuando el nodo se convierte en un Slot Leader y acuña un nuevo bloque, se incluye el contador en el encabezado del nuevo bloque. Otros nodos de la red validan los bloques y pueden comprobar si un certificado es el actual o si ha sido reemplazado por uno más nuevo. El contador es un mecanismo simple de cómo anular un certificado cuando la llave KES está comprometida, por ejemplo, robada por un hacker. Los operadores deben mantener sus llaves frías fuera de línea. Por lo tanto, solo los operadores pueden generar un certificado más nuevo e incrementar el contador. Los nodos validadores pueden recibir dos bloques para un mismo Slot. Uno está firmado por el hacker y el otro por el operador cuya llave KES ha sido comprometida. Los nodos que van a validar, tienen un trabajo fácil en este ejemplo. Pueden ver que hay dos bloques que afirman ser producidos por el mismo nodo (nodo correspondiente a una llave fría determinada) pero que incluyen diferentes llaves KES. Como los certificados se almacenan en la Blockchain para que los nodos de validación sepan qué certificados son los más recientes. Finalmente el bloque que contenga un contador más alto ganará y se agregará a la blockchain por los nodos de validación. El bloque del hacker será desechado.

¿Cuándo un nuevo bloque es creado?

Como dijimos, una lotería decide si un nodo registrado se convierte en Slot Leader y por tanto se le asigna el derecho de producir un nuevo bloque. Todos los nodos registrados en la red Cardano utilizan VRF para averiguar de forma autónoma si pueden crear un nuevo bloque en un Slot determinado. Más de un nodo puede convertirse en Slot Leader para cierto Slot, pero esto no es un problema y más adelante te mostraremos cómo se resuelve dicho conflicto. Puede suceder que se puedan crear más de un bloque en 20 segundos, ya que la lotería es un proceso aleatorio y los nodos usan VRF de forma independiente entre sí. Una nueva fase de la lotería ocurre cada segundo y se puede crear un nuevo bloque, por ejemplo, en el quinto Slot siguiente después de que se haya agregado el último. Sin embargo, también puede tomar más tiempo la selección de un nuevo Slot Leader, puede suceder que un bloque sea creado 30 Slots luego de que se creó el último. Aproximadamente 21.600 bloques deben crearse en cada Epoch, pero pueden ser más o pueden ser menos. Se puede usar un parámetro especial de la red para disminuir o aumentar la tasa de selección de los Slot Leaders.

VRF es un tipo de función que toma algunas entradas y produce una salida. La función VRF toma el ID del Slot en cuestión, la llave de firma VRF (única para cada nodo) y el nonce. El Nonce es un hash que se crea utilizando los primeros 2/3 de las salidas de VRF de los bloques que se han producido en el Epoch anterior. Estas entradas son procesadas por la función VRF y se produce un número aleatorio. Entonces, en función del Stake Total de un Pool, se calcula un umbral. Cuando el número aleatorio es menor que dicho umbral, entonces el nodo se convierte en un Slot Leader. Tenga en cuenta que el tamaño del Stake Pool influye en el índice usado para que un nodo sea elegido Slot Leader. Cuanto mayor sea el Stake, mayor será el índice.

Cuando un nodo se convierte en Slot Leader, inserta las transacciones que están esperando por ser procesadas en el nuevo bloque creado. También inserta una salida VRF calculada y la prueba VRF de que el nodo obtuvo el derecho de producir ese nuevo bloque. El nuevo bloque está firmado por la llave KES y se transmite a la red.

Los otros nodos de la red recibirán el nuevo bloque y lo validarán. Además de la validación de transacciones en el bloque, también se verifica la prueba VRF utilizando la llave pública del Pool que ha producido el bloque. Todos los certificados del Pool se almacenan en la Blockchain, por tanto, es fácil para los validadores validar la firma del bloque. El bloque debe estar firmado por la llave privada que corresponde a la llave pública que se puede encontrar en el certificado correspondiente del pool. Si el bloque es válido, los validadores honestos lo insertan en sus versiones de la blockchain.

Este mecanismo protege la red del problema llamado “Nada en Stake”. El calendario de los Slot Leaders no se conoce de antemano y no se puede deducir. Los Pools determinan el liderazgo de los Slots de forma independiente y los otros nodos de la red descubrirán los ganadores de la lotería de Slot Leaders en el momento en que reciban los nuevos bloques. Solo los propietarios de los Pools conocen sus llaves privadas VRF, que se necesitan para determinar si son elegidos Slot Leaders.

Cuando un adversario roba las llaves VRF y KES, el operador puede usar la llave fría operacional y crear un nuevo certificado. Por supuesto, después de solucionar el problema de seguridad y evitar otro pirateo del nodo. Incluso si el operador no hace esto, la clave KES eventualmente caducará en algún momento. Los operadores deben mantener la llave operacional fuera de línea de manera similar a como los usuarios guardan sus semillas en una hoja de papel. No te preocupes, la mayoría de los operadores son profesionales y saben bien cómo proteger sus secretos criptográficos.

Un adversario no puede generar al azar una nueva cadena aleatoria a partir del mismo bloque génesis. El conjunto de Slot Leaders es siempre el mismo, desde el principio hasta el final de la Blockchain, y evoluciona de forma dinámica. Se puede calcular un nuevo conjunto de Slot Leaders para el siguiente Epoch una vez se conozca el Nonce. Un nuevo Nonce se conoce en primer lugar, en el momento en que termina el Epoch actual y se pueden usar los primeros 2/3 de los bloques de ese Epoch para calcularlo. Se pueden crear muchos bloques falsos para intentar inundar la red, pero solo los bloques que hayan sido creados por los Slot Leaders y firmados por ellos, pasarán el proceso de validación.

Tenga en cuenta que también en la red PoW es posible crear muchos bloques falsos e inundar la red, ya que el proceso de validación es muy similar. Solo los bloques que contienen la prueba sobre el trabajo computacional complejo resuelto, se agregarán a la Blockchain. La diferencia es que en el caso de Cardano, el consumo de electricidad es muy bajo. La criptografía se usa de manera diferente para crear pruebas que permitan a los validadores aceptar un bloque recién creado. En las redes PoW, la electricidad debe consumirse para crear pruebas.

Como hemos dicho anteriormente, puede suceder que dos nodos se conviertan en Slot Leaders en un mismo Slot y ambos produzcan bloques válidos. Pero solo uno de ellos se puede agregar a la Blockchain. Así, cuando los validadores reciben dos bloques válidos y necesitan elegir uno de ellos, existe una regla muy simple que determina qué bloque ganará. Los validadores añaden el bloque que tiene una prueba de VRF más baja, puedes imaginarlo como una comparación de dos números. El bloque con la prueba de VRF más alta queda huérfano. Significa que se desecha junto con todas las transacciones.

La Blockchain es una secuencia de bloques. Siempre se agrega un nuevo bloque al final. Cuando un nodo es Slot Leader, crea un nuevo bloque que se agregará al final. Cada bloque contiene un número que lo identifica, un ID. Ese ID, se incrementa con cada bloque recién agregado.

Supongamos que el Pool de Alice es Slot Leader para el Slot X y produce un nuevo bloque válido. El Pool de Bob, se convierte en Slot Leader para el Slot X + 1 y también produce un nuevo bloque válido. Ambos bloques se han producido en un momento muy similar y tienen el mismo número de bloque o ID. El Pool de Alice no conocía el bloque de Bob en el momento de producir su propio bloque y viceversa. Ahora, el Pool de Carol es Slot Leader para el Slot X + 20 (No hubo Slot Leader para ninguno de los Slots desde X + 2 hasta X + 19). El Pool de Carol validará el bloque de Bob ya que es más nuevo con respecto al Slot. De nuevo hay una regla simple que determina al ganador. Cuando hay más de un bloque válido disponible con el mismo ID de bloque, entonces el nodo que producirá el próximo bloque valida el bloque con el mayor Slot. En otras palabras, el bloque más reciente. El otro bloque queda huérfano.

En el caso de que el bloque de Bob no se propague a tiempo y el Pool de Carol reciba solo el bloque de Alice, el bloque de Bob entonces quedará huérfano, a pesar de que pertenezca a un Slot mayor. Hipotéticamente, esto podría suceder en nuestro escenario suponiendo que, el Pool de Carol descubra que es Slot Leader para el Slot X + 3 y el Pool de Alice está geográficamente más cerca que el Pool de Bob. Por tanto, el bloque de Bob no ha llegado a tiempo al Pool de Carol y por tanto considera el bloque de Alice como el más reciente. El bloque de Alice se agregaría a la Blockchain y sería seguido por el bloque de Carol. Observe que el bloque de Carol incrementa el número de bloque o ID. El bloque de Bob llegará al Pool de Carol más tarde y será descartado. A medida que el bloque de Carol se propaga a través de la red, el bloque de Bob también es descartado por otros nodos. Los operadores de Pooles deben asegurarse de que sus bloques se propaguen lo más rápido posible para evitar la situación de que sus bloques queden huérfanos.

Conclusión

Del mismo modo, como el propietario de una llave privada puede firmar una transacción para gastar sus monedas, un Pool puede firmar un nuevo bloque. En ambos casos, la firma se puede verificar de forma rápida y sencilla. Los nodos Stake Pools necesitan almacenar claves en línea y estas claves pueden ser robadas. Puede suceder, pero como puede ver, existen mecanismos que evitan que los piratas informáticos dañen la red o reescriban el historial de blockchain. Además, veremos algunas mejoras en el futuro que harán que Ouroboros PoS sea aún más seguro.

Muchas Gracias