RandomX es el nombre del nuevo algoritmo de minería de Monero, la moneda de privacidad y cuyo objetivo es sostener a la red protegida de la minería ASIC, dejando solo la minería por CPU, y al tiempo brindando una gran seguridad a su protocolo y blockchain. 

El algoritmo de minería RandomX, es un algoritmo de Prueba de Trabajo (Proof of Work – PoW) que ha sido desarrollado para reemplazar al conocido CryptoNight de la criptomoneda de privacidad Monero (XMR).

Al igual que su precursor, RandomX se diseñó para ser seguro y ser el nuevo algoritmo por defecto de Monero. Exactamente el mismo ofrece un nivel alto de criptografía, y está centrado para sistemas con la privacidad y el anonimato en psique. Mas sobre todo, concebido para ser resistente a la minería por ASIC. Esta última, una capacidad que CryptoNight había perdido hace cierto tiempo, y que sostenía medio a flote con múltiples actualizaciones. No obstante, el equipo de Monero tomó la resolución de crear un nuevo algoritmo desde cero. Un algoritmo que va a tomar lo mejor de CryptoNight y de este modo crear una nueva base minera para Monero.

¿El resultado? Un algoritmo de minería como jamás se había visto y con una resistencia muy prometedora a ASIC. Eso aparte de una mejora en la capacidad de minería para las CPU, lo que ha llevado de nuevo a la moneda a una mejor descentralización de la minería.

Pero RandomX es más que eso, es un algoritmo probado, auditado y que tiene un potencial de desarrollo enorme. Es por tales razones, que dedicaremos un espacio para examinar RandomX y todas y cada una de las cosas nuevas que trae al criptomundo, y como Monero se ha favorecido de ello.

Origen de RandomX

Como hemos indicado, RandomX nace de la necesidad del proyecto Monero (XMR) de tener un nuevo algoritmo de minería capaz de resistir el avance de los ASIC.

Recordemos que en dos mil dieciocho, las compañías Baikal y Bitmain habían anunciado los primeros ASIC para CryptoNight, rompiendo la resistencia que dicho algoritmo había supuesto por múltiples años. Un logro para las dos empresas, singularmente si se tiene presente que CryptoNight era un algoritmo bastante complejo. En verdad, este se diseñó con el objetivo de eludir la minería ASIC desde un inicio.

Sin embargo, el logro de las compañías no fue bien recibido por la comunidad Monero y otras comunidades blockchains que empleaban el algoritmo CryptoNight. Y sobre todo, pues Monero es una criptomoneda donde los mineros ASIC no son bien recibidos.

El monopolio de fabricación de los ASIC y el acceso a ellos por entidades con grandes sumas no dejan ocasión a personas normales a beneficiarse del proceso de minado, quedando todo centralizado en pocas manos. Algo que por su parte representa punto único de fallo para toda la moneda.

En Monero la minería, generalmente, había sido llevada por CPU y GPU, con lo que los ASIC suponían un grave peligro de centralización y seguridad, por la posibilidad de un ataque de cincuenta y uno por ciento .

Para mitigar la situación, Monero empezó a desarrollar nuevas variaciones de CryptoNight que impactasen de forma negativa en el desempeño de los ASIC. Ciertas actualizaciones tuvieron un buen alcance, mas los ASIC todavía se sostenían. En este punto era obvio ya lo que pasaba, CryptoNight era deficiente y se precisaba de un nuevo algoritmo.

Esto hizo que naciese Monero Classic, impulsado por los mineros que deseaban el algoritmo minable con ASIC. Sin embargo este procuró apenas tuvo acogida.

Aun de esta manera prosiguieron mejorando los ASIC para Monero, y el treinta y uno de octubre de dos mil dieciocho empezó el desarrollo de RandomX. Este nuevo algoritmo supondría, conforme los desarrolladores de Monero, un cambio radical en los algoritmos de minería. El trabajo rindió sus frutos el cinco de mayo de dos mil diecinueve, cuando la primera versión de RandomX salió a la luz.

El algoritmo de RandomX fue desarrollado para Monero por los desarrolladores tevador, hyc, vielmetti, antanst y SChernykh y se activó de forma exitosa en internet Monero el treinta de noviembre de dos mil diecinueve.

¿De qué manera marcha RandomX?

El funcionamiento grosso modo de RandomX está escrito en su nombre: la aleatoriedad es su premisa principal. Mas ¿Qué es lo que significa esto? Puesto que bien, quiere decir que RandomX está desarrollado para crear una “zona de trabajo” o bien scratchpad absolutamente azaroso, con un alto consumo de memoria, y que usa técnicas avanzadas de virtualización para su funcionamiento. Estos 3 pilares son los que dejan que RandomX sea resistente a los ASIC.

De hecho, RandomX no solo es resistente a ASIC, sino asimismo lo es para las GPU, puesto que estos chips carecen de las instrucciones precisas para ejecutar en primera instancia las complejas operaciones de RandomX. Como resultado, RandomX busca ser un algoritmo de minería solo para CPU, ofertando la mayor resistencia posible a otro género de minería. Por otra parte, esto asimismo se dirige a eludir las llamadas botnets famosísimas en Monero, puesto que RandomX va a hacer que exactamente las mismas sean prácticamente imposible de poner en practica. De forma especial en dispositivos de baja potencia, como lo pueden ser Smart TV o bien dispositivos IoT (Internet of Things  o bien Internet de las Cosas).

Pero ¿De qué forma vuelve posible RandomX todo esto? Puesto que bien examinemos un tanto más a fondo este nuevo algoritmo.

Dos modalidades de minería, para 2 usos distintos

En primer sitio, RandomX tiene 2 modalidades de minería. Cada uno de ellos de ellos con requerimientos y rendimientos muy diferentes.  El modo perfecto más potente y más exigente de recursos es el Modo veloz, que precisa de por lo menos dos GB de memoria. Mas de forma adicional si el sistema operativo tiene soporte para NUMA (Acceso no Uniforme a Memoria), Huge Pages (paginación de memoria en bloques de importante tamaño), procesadores de gran cantidad de núcleos y por lo menos dos GB de RAM por núcleo de procesador, el desempeño final de RandomX mejora substancialmente. Esto es debido a que toda esta memoria se emplea para crear el scratchpad azaroso de RandomX.

En segundo sitio, tenemos el Modo ligero, un modo que solo precisa de doscientos cincuenta y seis MB de memoria RAM y ha sido desarrollado para ser utilizado en los nodos de validación de Monero. El desempeño de minería así es limitado, y es hasta seis veces inferior al Modo veloz, con lo que las ganancias por minería serían, más bien, escasas utilizando este modo.

Ya en este punto tenemos una primera barrera contra los ASIC. Aunque es verdad que los ASIC ahora pueden tener grandes cantidades de RAM (como los de Ethereum que acostumbran a tener entre cuatro a ocho GB de RAM), esto encarece bastante a estos equipos.

En segundo sitio, dado el alto consumo de potencia de cómputo, si un computador está inficionado con un cryptojacking para minar Monero, este va a ser sencillamente identificado por el usuario. Algo que reduce mucho las probabilidades de éxito de una botnet.

Criptografía utilizada

Si a algo nos tienen habituado el proyecto Monero (XMR) es al empleo de criptografía avanzada en sus desarrollos. En un caso así, RandomX no es la salvedad a la regla, sino más bien el cumplimiento racional de exactamente la misma. En RandomX hacen empleo intensivo de las funciones hash Blake2b, del generador de claves de acceso Argon2d y de criptografía simétrica AES. Como resultado, la calidad criptográfica de RandomX es inusual.

Sin embargo, en Monero no se han conformado solo con su trabajo, y han decidido ejecutar auditorías formales de seguridad criptográfica y de implementación sobre el algoritmo RandomX. En suma son 4 las auditorías efectuadas por las compañías Trail of Bits, X41 D-SEC, Kudelski Security y QuarksLab, todas y cada una manejadas por OSTIF, una organización de larga trayectoria en ciberseguridad y criptografía.

Todas las auditorías ya han sido efectuadas, y los resultados de exactamente las mismas son prometedores. Si quieres saber un tanto más sobre este punto, te recomendamos que examines los resultados en este enlace.

Su esquema de Prueba de Trabajo

El esquema de Prueba de Trabajo (PoW) de RandomX es el siguiente:

En primer sitio se produce una clave (llamada clave K) la que se elige para ser el hash de un bloque en la cadena de bloques (blockchain). Este bloque se llama “bloque de claves”. Para un desempeño perfecto de minería y verificación, la clave debe mudar cada dos mil cuarenta y ocho bloques (aprox. dos,8 días) y debe haber un retraso de sesenta y cuatro bloques (aprox. dos horas) entre el bloque de claves y el cambio de la clave K. Esto se puede conseguir mudando la clave cuando se cumpla lo siguiente blockHeight por ciento dos mil cuarenta y ocho == sesenta y cuatro (donde por ciento es el módulo de la división) y eligiendo el bloque de teclas de forma que keyBlockHeight por ciento dos mil cuarenta y ocho == 0.

En ese punto, la entrada H es el blob hash estándar con un valor nonce elegido.

Aunque todo esto parezca un tanto enigmático, lo que nos quiere decir el algoritmo de RandomX  es que su prueba de trabajo marcha bajo 2 premisas importantes:

  1. Necesita de una clave (llamada K) que debe mudar cada dos mil cuarenta y ocho bloques. Esta clave es esencial a fin de que RandomX pueda producir los hash y los bloques válidos para la red.
  2. La clave se produce con datos del blockchain y en último término con un sistema de generación de claves seguras.

Por otro lado, el algoritmo asimismo hace un tanto más compleja las cosas, al requerir de condiciones concretas de ejecución. Entre estas condiciones podemos incluir:

  1. Arquitectura de CPU de sesenta y cuatro-bit, lo que deja manejar grandes volúmenes de datos y memoria.
  2. Una unidad FPU (Unidad de Coma Flotante) compatible con el estándar IEEE setecientos cincuenta y cuatro. Si la unidad no es compatible, los datos generados por el algoritmo no se van a poder validar.
  3. Soporte para AES. Si el soporte es por hardware con extensiones como AES-NI, el desempeño del algoritmo es mucho mejor.
  4. Mucha memoria cache para cada hilo de ejecución del algoritmo. Cuando menos dieciseis Kilobytes de L1, doscientos cincuenta y seis Kb de L2 cache y dos MiB de L3.
  5. Un sistema operativo con soporte para manejo de páginas de memoria de importante tamaño. Recordemos que RandomX utiliza por lo menos dos GB de memoria RAM y la demanda puede acrecentar conforme la configuración.

La Máquina Virtual de RandomX

La funcionalidad que quizá mayor resistencia pondrá frente a los ASIC, y en verdad es una característica única de este algoritmo, es su máquina virtual o bien VM (Virtual Machine).

RandomX hace su trabajo de criptografía y minería en una fácil máquina virtual cuya finalidad es; aislar todo el proceso de minería en una serie de procesos que actúan bajo sus instrucciones y arquitectura virtualizada.

Con esto se busca acrecentar la dificultad de incorporar una solución ASIC a niveles jamás vistos. Al unísono que, la implementación CPU se facilita y deja ajustarse conforme a necesidades futuras. Esta máquina virtual puede efectuar sus diferentes labores merced a un set de instrucciones del tipo CISC adaptadas.Esta característica deja una comunicación sencillísima con las CPU que emplean un set de instrucciones del mismo tipo. En contraste a los chips ASIC, que emplean un set de instrucciones del tipo RISC, y la emulación CISC sobre RISC es costosa computacionalmente, añadiendo más dificultad a una solución ASIC para RandomX.

El objetivo de esta máquina virtual es crear el ambiente preciso a fin de que la prueba de trabajo de RandomX se lleve a cabo. Para conseguirlo, esta VM crea un espacio de trabajo azaroso (scratchpad en memoria), enormemente cifrado y lleno de entropía (datos azarosos que entonces servirán para la prueba de trabajo).

Creadas estas condiciones, la VM recibe las instrucciones para empezar los programas de minería. Cada uno de ellos de estos programas se crea utilizando los datos azarosos del espacio de trabajo y da como resultado un programa único.

Dicho programa va a aplicar todos y cada uno de los procesos tolerados por la VM para efectuar la minería, esto es, el programa solo puede ejecutar las instrucciones que le deje la VM (doscientos cincuenta y seis instrucciones y veinte registros), solamente. En este punto, lo que pase en la VM de RandomX es casi invisible para el resto del computador, debido al empleo de criptografía en todo ese proceso.

Este proceso de crear programas azarosos para efectuar minería se llama Dynamic Proof of Work, y es el esquema que exactamente emplea RandomX en este punto. Este sistema se puede acotar de la próxima forma:

  1. En primer sitio se produce el programa azaroso. Es lo que la VM hace al empezar el scratchpad y todo los elementos del programa en un primer ciclo de trabajo.
  2. Luego la VM se hace cargo de hacer de traductor entre el CPU y los programas azarosos. Los programas azarosos solo pueden emplear las instrucciones de la VM, mas la VM traduce dichas acciones en código máquina comprensible por el CPU. De esta manera, la CPU da contestación a las acciones y la VM recibe las contestaciones. Como las instrucciones usan criptografía la optimización es muy costosa.
  3. Finalmente la ejecución del programa, en este punto la VM deja acceso al CPU y sus capacidades sin perder la asociación con el programa azaroso. Este punto se da bajo condiciones muy concretas y singulares ya programadas en el algoritmo de RandomX. En verdad, cualquier alteración acaba por lanzar datos inválidos por el hecho de que este proceso es totalmente reproducible.

Sin dudas, la VM de RandomX es el factor más complejo y difícilmente replicable, siendo de este modo su mejor carta contra los ASIC.

¿Cuánto sabes, criptonauta?

¿La nueva implementación de RandomX en Monero mejora el desempeño de minería respecto a CryptoNight?

Pros y contras del algoritmo

Pros

  1. Es un algoritmo con un claro objetivo de seguridad. El empleo de AES, Blake2 y Argon2 hace de este algoritmo uno segurísimo.
  2. Dado a que está concebido para CPU y tiene estructuras resistentes a ASIC y GPU, este algoritmo puede explotar de mejor forma este hardware. Como consecuencia RandomX ofrece mejores rendimientos para los mineros CPU haciendo que estos pueden proseguir ganando más por minar Monero.
  3. La resistencia a ASIC deja que las blockchain que empleen RandomX sean más descentralizadas a nivel de minería.
  4. RandomX es un algoritmo que cuenta con 4 auditorías formales completas.

Contras

  1. Es complejo. El empleo de una VM y aleatoriedad de procesos hace que este algoritmo sea considerablemente más complejo de desarrollar y depurar.
  2. El empleo de VM abre las puertas a ataques laterales que pueden emplearse para romper el sistema y aprovecharse para prosperar el desempeño en determinadas condiciones. No obstante, el empleo de criptografía en el scratchpad complica enormemente este punto, con lo que muchos piensan que es imposible.
  3. Los dispositivos con CPU de treinta y dos bits no pueden explotar el algoritmo de manera correcta.