El algoritmo de minería CryptoNight es un algoritmo de minería pensado para ser especialmente eficiente en CPU y resistente a ASIC. Esto con el objetivo de permitir una mayor descentralización de la minería de las criptomonedas que lo apliquen, pero también, permitir que dichas criptomonedas puedan ofrecer avanzadas opciones de privacidad y anonimato.
Uno de los algoritmos de minería más conocidos es CryptoNight. Este algoritmo de minería, es parte del conocido protocolo de consenso CryptoNote. CryptoNight usa el esquema de minería de Prueba de Trabajo (PoW) para su funcionamiento, y busca ofrecer una alta dependencia de las CPU, resistiendo a los ASIC, FPGA y GPU.
Su principal característica es que es un algoritmo de hash muy rápido. Además permite una buena escalabilidad y realiza una serie de pruebas criptográficas que son extremadamente dependientes de la memoria caché de los procesadores CPU. Pero no solo eso, su core o núcleo criptográfico trabaja alrededor del algoritmo de cifrado AES, un algoritmo muy seguro e incluso considerado, en algunas versiones, como cifrado de nivel militar.
Todo esto hace de CryptoNight un algoritmo de minería muy enfocado en la seguridad y ese ha sido su principal vehículo al éxito en el mundo cripto. De hecho, el hecho de que la criptomoneda Monero lo eligiese como algoritmo hash para la prueba de trabajo del consenso de su blockchain, potenció la visibilidad de CryptoNight y le abrió un espacio en el criptomundo.
Ahora bien ¿Cuál es la historia detrás de CryptoNight? ¿Cómo funciona este interesante algoritmo? Como siempre podrás obtener las respuestas a estas y otras preguntas a continuación.
Origen del algoritmo CryptoNight
El desarrollo de CryptoNight se puede rastrear hasta 12 de diciembre 2012, cuando el desarrollador Nicolas van Saberhagen presentó al mundo el protocolo de consenso CryptoNote. Nicolas van Saberhagen, es un nombre ficticio y la identidad del desarrollador es un completo enigma, hasta el punto que rivaliza con la de Satoshi Nakamoto. De hecho, muchos especialistas creen que Nicolas van Saberhagen y Satoshi Nakamoto son la misma persona. De allí que haya nacido el nombre de Satoshi van Saberhagen, en referencia a este posible hecho.
Pero lejos del campo de la especulación, CryptoNote es una realidad. El lanzamiento de este protocolo en una fecha tan llamativa (para ser precisos, el 12/12/12) llamó la atención de la criptocomunidad. Esto debido a que CryptoNote presentaba funciones avanzadas que prometían cosas como transacciones confidenciales. Además de transacciones no enlazables, firmas de anillos, transacciones de menor tamaño y una seguridad reforzada.
Más tarde en marzo de 2013, nacería la especificación completa de CryptoNight, el algoritmo de minería que permitiría hacer una realidad a CryptoNote. Detrás de este desarrollo están los desarrolladores Seigen, Max Jameson, Tuomo Nieminen, Neocortex y Antonio M. Juarez.
El proyecto de CryptoNote y su algoritmo de minería fue tomado inicialmente por Bytecoin (BCN) quienes lo aplicaron a su blockchain. Pero no fue hasta la creación de Monero (XMR) que este proyecto comenzó a ser conocido ampliamente en el criptomundo.
Funcionamiento de CryptoNight
El funcionamiento de CryptoNight se basa en una serie de propiedades que lo hacen muy amigable para la minería por GPU. Estas propiedades son:
- Utiliza cifrado AES nativo. Las CPU con capacidad de aceleración por hardware para cálculos AES pueden verse fuertemente beneficiadas por este hecho y tener un potencial de minería superior.
- Uso de funciones hash seguros, como Keccak y Blake-256.
- Utiliza un conjunto de multiplicadores rápidos de 64 bits. Debido a esto, las arquitecturas de CPU de 64 bits puras, son altamente eficientes. También es posible usarlo sobre CPUs del tipo VLIW de 128 a 512 bits, donde el algoritmo podría sacar provecho de conjuntos de minería paralelas aumentando el rendimiento.
- Utilización intensiva de memorias caché de la CPU. El algoritmo de CryptoNight ajusta su uso de cache para sacar el máximo provecho al mismo. De hecho, mientras más caché tenga el CPU mejor rendimiento tendrá.
Si observamos estos cuatro pilares, veremos que todos ellos están muy centrados en la CPU. De hecho, algunas de esas funciones son mucho más eficiente sobre un CPU que sobre cualquier otra estructura computacional, entre ellos los ASIC. Esto es lo que permite que CryptoNight sea resistente a los mismos.
Pero claro, esto son solo los pilares y no la forma en cómo funciona el algoritmo, eso lo explicaremos a continuación.
Iniciando el sistema de hash
El trabajo de CryptoNight comienza con la inicialización de su espacio de trabajo. Para ello CryptoNight hace uso de una serie de primitivas criptográficas que son:
- Cifrado AES
- Función hash Keccak, que es usada como vehículo principal de generación de hash dentro del algoritmo.
- Función hash SHA-3. SHA-3 es una función hash derivada de Keccak, y es utilizada junto a BLAKE-256, Groestl-256, JH-256 y Madeja-256 para fortalecer la generación de los hash del espacio de trabajo criptográfico de CryptoNight.
Creación de la clave AES y cifrado del hash Keccak
La parte más importante del proceso es la creación de la clave AES. Esto es posible durante la primera ronda de funcionamiento de las funciones hash. En primer lugar, CryptoNight toma una entrada de datos y lo lleva a la función Keccak. Para ello, prepara una función Keccak-1600 de 1600 bits de ancho. En comparación, Bitcoin y su función hash SHA-256 usa palabras de 256 bits o 64 caracteres. Mientras que Keccak-1600 produce hashes mucho más grandes, de 1600 bits o de 400 caracteres en su totalidad, con un tamaño de 200 bytes.
Luego toma los primeros 31 bytes de este hash Keccak-1600, y los transforma en la clave de cifrado para un algoritmo AES-256, el de mayor valor dentro de la familia AES. Para ello este pequeño fragmento de datos es cifrado en diez rondas. El resto del hash se cifra usando AES-256 y se somete también a una ronda de 10 ciclos de cifrados.
Posteriormente se toma el resto de información del hash Keccak y se cifra usando AES-256. Este proceso genera una enorme cantidad de datos que luego son enviados al espacio de trabajo o scratchpad de CryptoNight. Al terminar con este proceso, el espacio de trabajo de CryptoNight se ha preparado y comienza el ciclo de generación del hash.
Generación del hash final
Ahora bien los datos recogidos por estas acciones alimentan el core o núcleo de funciones hash. Como dijimos la principal es Keccak, a las que se les une BLAKE-256, Groestl-256, JH-256 y Madeja-256.
Lo que hace CryptoNight es tomar todo el conjunto de datos creado por las funciones AES-256 y Keccak en el paso anterior, y lo pasa por el resto de funciones hash. Al final se obtiene un hash final, que es el resultado de la prueba de trabajo de CryptoNight. Este hash tiene una extensión de 256 bits o un total de 64 caracteres.
Pros y contras del algoritmo
Pros
- Altamente personalizable. Datos como el target de minería y la dificultad pueden ser ajustados entre bloques sin que ellos signifique un peligro para la seguridad de la red.
- Se centra en la CPU. Esto hace que la minería usando ASIC sea compleja y costosa de realizar.
- Es extremadamente seguro a nivel criptográfico. El uso de AES-256 y la unión de técnicas de cifrado y funciones hash de forma determinas aseguran que siempre se obtendrá un alto nivel de seguridad.
- Es eficiente energética y computacionalmente hablando.
- Para el nivel de seguridad proporcionado, el tamaño de los resultados de las pruebas criptográficas de CryptoNight es pequeño. Esto permite maximizar el número de transacciones dentro de los bloques.
- Dada la forma en como CryptoNight maneja la información para minar bloques, existe la posibilidad de crear transacciones no rastreables de forma nativa. De hecho, Monero pudo construir estas transacciones gracias a CryptoNight.
Contras
- La capacidad de resistencia a ASIC ya no es factible. Esto es debido a que los ASIC pudieron adaptarse para lograr minar para este algoritmo con gran eficiencia.
- CryptoNight es un algoritmo extremadamente complejo y difícil de auditar. Por esta razón, los desarrolladores tienen una gran curva de complejidad para revisar los posibles errores de este algoritmo.
- El uso de instrucciones CPU específicas como AES, puede llevar a que el algoritmo pueda ser atacado lateralmente. Existe la posibilidad de explotar vulnerabilidades dentro del procesador (como el caso de TSX o fallas como Spectre/Meltdown) que puedan romper la seguridad del algoritmo y socavar así la seguridad de la blockchain que usa este algoritmo de minería.
¿Cuánto sabes, criptonauta?
¿El abandono del desarrollo de CryptoNight significa que dejara de ser un algoritmo seguro?¡CIERTO!
El abandono de CryptoNight en favor de RandomX por parte de Monero (la principal comunidad de desarrollo), hará que paulatinamente CryptoNight se convierta en un algoritmo poco seguro. Si alguna vulnerabilidad o fallo es descubierto, posiblemente no sea corregido y en su lugar, algunos proyectos que hagan uso del CryptoNight seguramente darán el salto de otros protocolos más seguros y con mantenimiento activo.
Evolución de CryptoNight
CryptoNight es de los pocos algoritmos criptográficos que ha sufrido grandes cantidades de modificaciones a lo largo de su historia. Desde la aparición de la versión 1, demostrada en su whitepaper, hasta la creación de CryptoNight-R, la última versión de CryptoNight desarrollada por Monero.
Pese a ello, los cambios y nuevas versiones de CryptoNight van dirigidas a evitar que la minería por ASIC echara por tierra el esfuerzo del algoritmo por ofrecerle resistencia. Pero cada nuevo cambio en la estructura con ese fin, agrega más complejidad y más puntos de fallos. Esta fue la principal razón por la que su desarrollo se detuvo (al menos por parte de Monero, su más importante miembro en la comunidad).
Así que por el momento podemos decir que CryptoNight es un algoritmo que ha llegado al punto máximo de su evolución para evitar que los ASIC puedan explotar este algoritmo de forma abierta.
Blockchains que usan el algoritmo
Bytecoin (BTN) es la primera blockchain en usar CryptoNight. La siguiente blockchain en usarlo fue Monero, y de hecho, es donde más se ha desarrollado este algoritmo. Sin embargo, Monero ha abandonado este algoritmo en favor de RandomX, una evolución completa de CryptoNight que es altamente resistente a ASIC, y que lo será por al menos un buen tiempo.
Otra blockchain que usa CryptoNight es Electroneum (ETN), la cual está pensada para que los dispositivos móviles puedan servir de nodos completos y nodos de minería.