¿Qué es el algoritmo de minería CryptoNight?
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 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 que puedan romper la seguridad del algoritmo.