RandomX é o nome do novo algoritmo de mineração para Monero, a moeda de privacidade cujo objetivo é manter a rede protegida contra mineração ASIC, permitindo apenas mineração por CPU, e ao mesmo tempo fornecendo enorme segurança ao seu protocolo e blockchain . 

EO algoritmo de mineração RandomX, é um algoritmo de Prova de Trabalho (PoW) que foi projetado para substituir o conhecido CryptoNight privacidade criptomoeda Monero (XMR).

Como seu predecessor, RandomX foi projetado para ser seguro e para ser o novo algoritmo padrão do Monero. Ele oferece um alto nível de criptografia, e está focado em sistemas com privacidade e anonimato em mente. Mas, acima de tudo, considerado resistente à mineração por ASIC. Este último, uma capacidade que o CryptoNight havia perdido há algum tempo, e que manteve à tona com várias atualizações. No entanto, a equipe Monero tomou a decisão de criar um novo algoritmo do zero. Um algoritmo que aproveitará o melhor do CryptoNight e, assim, criará uma nova base de mineração para Monero.

O resultado? Um algoritmo de mineração como nunca visto antes e com uma resistência muito promissora ao ASIC. Isso além de uma melhoria na capacidade de mineração para CPU, o que mais uma vez levou a moeda a uma melhor descentralização da mineração.

Mas o RandomX é muito mais do que isso, é um algoritmo comprovado e auditado com enorme potencial de crescimento. É por essas razões que vamos dedicar um espaço para analisar RandomX e todas as novidades que ela traz para o mundo da criptografia, e como Monero tem se beneficiado dela.

Origem de RandomX

Como indicamos, a RandomX nasceu da necessidade do projeto Monero (XMR) de ter um novo algoritmo de mineração capaz de resistir ao avanço dos ASICs.

Vamos lembrar que em 2018, as empresas Baikal y Bitmain eles anunciaram os primeiros ASICs para o CryptoNight, quebrando a resistência que o referido algoritmo representava por vários anos. Uma grande conquista para ambas as empresas, especialmente considerando que o CryptoNight era um algoritmo bastante complexo. Na verdade, isso foi projetado para evitar a mineração ASIC desde o início.

No entanto, a conquista das empresas não foi bem recebida pela comunidade Monero e outras comunidades de blockchain que usam o algoritmo CryptoNight. E, acima de tudo, porque Monero é uma criptomoeda onde os mineiros ASIC não são bem recebidos.

O monopólio de fabricação dos ASICs e o acesso a eles por entidades com grandes somas de dinheiro não dá oportunidade para que pessoas normais se beneficiem do processo de mineração, deixando tudo centralizado em poucas mãos. Algo que, por sua vez, representa um único ponto de falha para toda a moeda.

Em Monero, a mineração, em geral, vinha sendo realizada por CPU e GPU, de modo que os ASICs representavam um sério risco de centralização e segurança, devido à possibilidade de um Ataque de 51%.

Para aliviar a situação, Monero começou a desenvolver novas variantes do CryptoNight que afetaram negativamente o desempenho dos ASICs. Algumas atualizações tiveram um bom escopo, mas os ASICs ainda se sustentaram. Neste ponto era óbvio e o que estava acontecendo, CryptoNight era insuficiente e um novo algoritmo era necessário.

Isso deu origem ao Monero Classic, desenvolvido por mineiros que queriam o algoritmo de mineração ASIC. No entanto, essa tentativa dificilmente foi recebida.

Mesmo assim, eles continuaram a melhorar os ASICs para Monero e, em 31 de outubro de 2018, o desenvolvimento do RandomX começou. Este novo algoritmo representaria, de acordo com os desenvolvedores do Monero, uma mudança radical nos algoritmos de mineração. A obra foi recompensada em 5 de maio de 2019, quando o primeira versão RandomX foi lançado.

O algoritmo RandomX foi desenvolvido para Monero pelos desenvolvedores tevador, Hyc, Vielmetti, antanst y SChernykh e foi ativado com sucesso na rede Monero em 30 de novembro de 2019.

Como funciona o RandomX?

A operação aproximada de RandomX é escrita em seu nome: aleatoriedade é sua premissa principal. Mas o que isso significa? Bem, isso significa que RandomX é projetado para criar uma "zona de trabalho" ou bloco de notas completamente aleatório, com alto consumo de memória, e que usa técnicas de virtualização avançadas para seu funcionamento. Esses três pilares permitem que o RandomX seja resistente ao ASIC.

Na verdade, RandomX não é apenas resistente a ASIC, mas também resistente a GPU, já que esses chips não têm as instruções necessárias para executar as operações RandomX complicadas em primeiro lugar. Como resultado, o RandomX busca ser um algoritmo de mineração apenas de CPU, oferecendo a maior resistência possível a outros tipos de mineração. Por outro lado, também visa evitar os famosos botnets chamados no Monero, já que o RandomX os tornará quase impossíveis de implementar. Especialmente em dispositivos de baixa energia, como Smart TV ou dispositivos IoT (Internet of Things ou Internet of Things).

Mas como RandomX torna tudo isso possível? Bem, vamos examinar este novo algoritmo um pouco mais profundamente.

Dois tipos de mineração, para dois usos diferentes

Em primeiro lugar, RandomX tem dois modos de mineração. Cada um deles com requisitos e desempenhos muito diferentes. O modo mais poderoso e que consome muitos recursos é o Modo rápido, que requer pelo menos 2 GB de memória. Além disso, se o sistema operacional tiver suporte para NUMA (Acesso não uniforme à memória), Páginas enormes (paginação de memória em grandes blocos), processadores de alto núcleo e pelo menos 2 GB de RAM por núcleo de processador, o desempenho final do RandomX melhora substancialmente. Isso ocorre porque toda essa memória é usada para criar o scratchpad aleatório da RandomX.

Em segundo lugar, temos o Modo Leve, um modo que requer apenas 256 MB de RAM e foi projetado para ser usado nos nós de validação do Monero. O desempenho de mineração neste modo é limitado e é até 6 vezes menor do que o modo Rápido, portanto, os lucros por mineração seriam bastante escassos usando este modo.

Neste ponto, temos uma primeira barreira contra ASICs. Embora seja verdade que os ASICs agora podem ter grandes quantidades de RAM (como o Ethereum, que geralmente tem entre 4 a 8 GB de RAM), isso torna esses computadores muito caros.

Em segundo lugar, dado o alto consumo de poder de computação, se um computador for infectado com um cryptojacking Para minerar Monero, ele será facilmente identificado pelo usuário. Algo que reduz muito as chances de sucesso de um botnet.

Criptografia usada

Se o projeto Monero (XMR) nos habituou a algo, é ao uso de criptografia avançada em seus desenvolvimentos. Nesse caso, RandomX não é a exceção à regra, mas o cumprimento total dela. No RandomX, eles usam intensamente as funções de hash Blake2b, o gerador de senha Argon2d e a criptografia simétrica AES. Como resultado, a qualidade criptográfica do RandomX é excepcional.

No entanto, em Monero, eles não se contentaram com seu trabalho sozinhos e decidiram executar segurança criptográfica formal e auditorias de implementação no algoritmo RandomX. No total, são quatro auditorias realizadas pelas empresas Trilha dos Bits, X41 D-SEC, Kudelski Security y QuarksLab, todos eles gerenciados por OSTIF, uma organização com uma longa história em segurança cibernética e criptografia.

Todas as auditorias já foram realizadas e os resultados delas são promissores. Se você quiser saber um pouco mais sobre este ponto, nós o convidamos a revisar os resultados neste link.

Seu esquema de prova de trabalho

O esquema de Prova de Trabalho RandomX (PoW) é o seguinte:

Primeiro, uma chave é gerada (chamada de chave K) que é selecionada para ser o hash de um bloco no blockchain. Este bloco é chamado "Bloco de teclas". Para um desempenho ideal de mineração e verificação, a chave deve mudar a cada 2048 blocos (aproximadamente 2,8 dias) e deve haver um atraso de 64 blocos (aproximadamente 2 horas) entre o bloco chave e a mudança da chave K Isso pode ser conseguido alterando a chave quando o seguinte for true blockHeight% 2048 == 64 (onde% é o módulo da divisão) e selecionando o bloco de chave de forma que keyBlockHeight% 2048 == 0.

Nesse ponto, a entrada H é o hash blob padrão com um valor núncio selecionado.

Embora tudo isso pareça um pouco enigmático, o que o algoritmo RandomX quer nos dizer é que sua prova de trabalho funciona sob duas premissas importantes:

  1. Você precisa de uma chave (chamada K) que deve mudar a cada 2048 blocos. Essa chave é vital para que RandomX seja capaz de gerar hashes e blocos válidos para a rede.
  2. A chave é gerada com dados do blockchain e, finalmente, com um sistema seguro de geração de chaves.

Por outro lado, o algoritmo também torna as coisas um pouco mais complexas, exigindo condições de execução específicas. Entre essas condições, podemos incluir:

  1. Arquitetura de CPU de 64 bits, permitindo lidar com grandes volumes de dados e memória.
  2. Uma unidade FPU (Floating Point Unit) compatível com o padrão IEEE 754. Se a unidade não for compatível, os dados gerados pelo algoritmo não podem ser validados.
  3. Suporte para AES. Se o suporte for por hardware com extensões como AES-NI, o desempenho do algoritmo é muito melhor.
  4. Muita memória cache para cada thread do algoritmo. Pelo menos 16 KB de L1, 256 KB de cache L2 e 2 MiB de L3.
  5. Um sistema operacional com suporte para lidar com grandes páginas de memória. Lembre-se de que RandomX usa pelo menos 2 GB de RAM e a demanda pode aumentar dependendo da configuração.

A máquina virtual RandomX

A funcionalidade que talvez seja a maior resistência aos ASICs, e na verdade é uma característica única desse algoritmo, é sua máquina virtual ou VM (Virtual Machine).

RandomX faz todo o seu trabalho de criptografia e mineração em uma máquina virtual simples cujo propósito é; isolar todo o processo de mineração em uma série de processos que agem sob suas próprias instruções e arquitetura virtualizada.

Isso visa aumentar a complexidade da implementação de uma solução ASIC para níveis nunca vistos antes. Ao mesmo tempo, a implementação da CPU é simplificada e pode ser ajustada de acordo com as necessidades futuras. Esta máquina virtual pode realizar suas várias tarefas graças a um conjunto de instruções personalizadas do tipo CISC. Este recurso permite uma comunicação muito simples com CPUs que utilizam um conjunto de instruções do mesmo tipo. Ao contrário dos chips ASIC, que usam um conjunto de instruções do tipo RISC, e a emulação CISC sobre RISC é computacionalmente cara, adicionando mais complexidade a uma solução ASIC para RandomX.

O objetivo desta máquina virtual é criar o ambiente necessário para que a prova de trabalho RandomX seja realizada. Para isso, esta VM cria um espaço de trabalho aleatório (scratchpad na memória), altamente criptografado e cheio de entropia (dados aleatórios que posteriormente serão usados ​​para a prova de trabalho).

Depois que essas condições são criadas, a VM recebe as instruções para iniciar os programas de mineração. Cada um desses programas é criado usando os dados aleatórios da área de trabalho e resulta em um programa exclusivo.

Este programa irá aplicar todos os processos permitidos pela VM para realizar a mineração, ou seja, o programa só pode executar as instruções permitidas pela VM (256 instruções e 20 registros), nada mais. Nesse ponto, o que acontece no RandomX VM fica praticamente invisível para o resto do computador, devido ao uso de criptografia em todo esse processo.

Este processo de criação de programas aleatórios para realizar mineração é chamado Prova de trabalho dinâmica, e é o esquema que RandomX usa precisamente neste ponto. Este sistema pode ser definido da seguinte forma:

  1. O programa aleatório é gerado primeiro. É o que a VM faz ao iniciar o scratchpad e todos os elementos do programa em um primeiro ciclo de trabalho.
  2. Em seguida, o VM se encarrega de atuar como um tradutor entre a CPU e os programas aleatórios. Programas aleatórios só podem usar instruções da VM, mas a VM traduz essas ações em código de máquina compreensível pela CPU. Dessa forma, a CPU responde às ações e a VM recebe as respostas. Como as instruções fazem uso de criptografia, a otimização é muito cara.
  3. Finalmente a execução do programa, neste ponto a VM permite o acesso à CPU e suas capacidades sem perder a associação com o programa aleatório. Este ponto ocorre sob condições muito específicas e especiais já programadas no algoritmo RandomX. Na verdade, qualquer variação acaba gerando dados inválidos porque esse processo é totalmente reproduzível.

Sem dúvida, o RandomX VM é o elemento mais complexo e difícil de replicar, sendo assim sua melhor placa contra ASICs.

Quanto você sabe, cryptonuta?

A nova implementação RandomX no Monero melhora o desempenho de mineração em relação ao CryptoNight?

VERDADEIRO!

Um dos grandes problemas do CryptoNight é que cada nova iteração ou melhoria exigia mais poder computacional para funcionar, o que reduzia a capacidade de mineração das CPUs e apenas retardava ligeiramente o surgimento de um ASIC capaz de executá-lo. Contra isso, RandomX deixa para trás o impacto no desempenho e oferece melhor segurança; na verdade, o desempenho de RandomX contra CryptoNight é de até 20 vezes no mesmo hardware e, no momento, nenhum ASIC pode implementar um sistema de mineração viável.

Prós e contras do algoritmo

Prós

  1. É um algoritmo com um objetivo claro de segurança. O uso de AES, Blake2 e Argon2 torna este algoritmo muito seguro.
  2. Por ser projetado para CPUs e ter estruturas resistentes a ASIC e GPU, esse algoritmo pode explorar melhor esse hardware. Como consequência, a RandomX oferece melhores retornos para mineradores de CPU para que eles possam continuar a ganhar mais pela mineração de Monero.
  3. A resistência ao ASIC permite que os blockchains que usam RandomX sejam mais descentralizados no nível de mineração.
  4. RandomX é um algoritmo que possui quatro auditorias formais completas.

Contras

  1. É complexo. O uso de uma VM e aleatoriedade do processo torna este algoritmo muito mais complexo de desenvolver e depurar.
  2. O uso de VM abre a porta para ataques laterais que podem ser usados ​​para quebrar o sistema e explorados para melhorar o desempenho sob certas condições. No entanto, o uso de criptografia no scratchpad torna este ponto muito difícil, razão pela qual muitos acreditam ser impossível.
  3. Dispositivos com CPU de 32 bits não podem explorar o algoritmo corretamente.