• Nenhum resultado encontrado

FUNCIONAMENTO DO PROOF OF WORK

Um nodo da rede inicia uma transação como a transferência de uma quantia de dinheiro para outro nodo da rede, e assina essa transação utilizando o sistema de criptografía asimétrica (sistema que utiliza pares de chaves para cifrar e decifrar, possuindo uma chave privada que permanece somente com o proprietário e uma chave pública que é distribuída). No exemplo de transferência monetária, o cliente informa o valor a ser transferido, o endereço de quem deve receber, e utiliza sua chave privada para assinar a transação.

A transação criada é propagada para os outros nodos da rede, para ser validada. A validação ocorre quando um minerador (usuário realizando a validação), consegue obter uma certa quantidade de 0’s como saída, ao utilizar a função de hash SHA-256 no bloco contendo a transação. A quantidade de 0’s necessária varia conforme o poder computacional presente na rede. Para produzir um hash com a quantidade de 0’s necessária, os mineradores adicionam ao bloco um nonce. O nonce é número aleatório utilizado para gerar um hash válido, a validez é alcançada quando o hash do bloco contém a quantidade de 0’s definida pela dificuldade da rede (Han, 2017). Um processo de força bruta varia o valor do nonce até que o número de 0’s do hash seja atingido, quando um minerador encontra o valor do nonce correto antes que os outros mineradores, ele ganha o direito de adicionar o bloco na cadeia (Whittle,2018).

O processo de utilização de uma função de hash no bloco garante que a mesma entrada tenha sempre a mesma saída, assegurando que qualquer mudança feita no bloco gere uma saída completamente diferente (BINANCE - ACADEMY, 2019).

Uma vez validado o minerador propaga o bloco para os outros mineradores, eles realizam o mesmo processo de validação para garantir que o bloco é realmente válido, antes de adicioná-lo na cadeia. Para garantir a imutabilidade da cadeia de blocos os mineradores

adicionam o valor do hash do bloco anterior no bloco presente como demonstra a figura 9. Após a inclusão do hash do bloco anterior no bloco atual, cada minerador adiciona o bloco atual a cadeia de blocos e então a transação está completa. Cada minerador da rede possui a sua própria cópia do registro dos blocos, e a cada nova transação realizada o processo de validação e revalidação é realizado, atualizando todos os blockchains da rede garantindo a transparência dos dados.

Figura 9: Representação da cadeia de blocos

Fonte: Ronan Damasco (2017)

Como explicado anteriormente o blockchain surgiu a partir do lançamento da criptomoeda Bitcoin, servindo como base para o funcionamento da mesma. Com o passar do tempo, percebeu-se que os diversos benefícios como a descentralização, apresentados pela tecnologia poderiam ser usados em outros contextos além dos de criptomoedas. Assim iniciativas como a blockchain Ethereum surgiram.

Ethereum é uma plataforma global e de código aberto para aplicações descentralizadas que utiliza Proof-of-Work (Ethereum ORG, 2019). A plataforma possibilita que desenvolvedores desenvolvam aplicações como aplicações financeiras ou mercados descentralizados (Ethereum ORG, 2020), que uma vez na rede ethereum sempre funcionarão como programadas, utilizando o benefício da imutabilidade dos registros que a tecnologia blockchain oferece. Para possibilitar que diversos tipos de aplicações que necessitam de um acordo entre partes ou do compartilhamento de informações funcionem na rede, o ethereum utiliza uma linguagem menos restritiva do que a utilizada na rede bitcoin, que permite que os desenvolvedores criem smart contracts mais flexíveis para suas aplicações.

Smart contracts são programas de computador imutáveis que funcionam de maneira determinística no contexto de uma EVM como parte do protocolo de rede do ethereum,

podendo ser definidos como, programas digitais baseados no consenso do blockchain, que irão auto executar quando o acordo firmado entre as partes for cumprido (Lauslahti; Mattila; Seppälä, 2017). Assim como contratos convencionais, Smart contracts possuem termos e condições que constituem o acordo entre as partes, e além disso tem a capacidade de coletar dados de fontes externas e processá-las de acordo com os termos especificados no contrato (Lauslahti; Mattila; Seppälä, 2017).

Na rede ethereum a linguagem de programação Solidity é a mais utilizada para construir o código do programa. Após escrito, o programa é compilado, e por último é criada uma transação que desempenha o papel de implementar o programa (Pinna et al, 2019). Uma vez implementado na rede ethereum, o smart contract recebe um endereço, e qualquer nodo que possua o endereço pode interagir com o contrato, sendo que os nodos que interagem com ele devem cumprir o que o código do programa define.

4 ALTHEA

Althea é um sistema que permite que roteadores paguem uns aos outros por encaminhamento de tráfego. Isso permite que as pessoas montem provedores de serviços de Internet em suas comunidades. Em um rede Althea, ao invés de somente um provedor de Internet que está no topo da rede receber pagamentos mensais, diversas pessoas podem ganhar dinheiro por expandir e fortalecer a rede (Althea, 2019). O pagamento de um roteador para outro no Althea é feito utilizando criptomoedas.

Para que a rede funcione como proposto os nodos desempenham funções diferentes. Nodos de usuário são os nodos de pessoas que querem comprar acesso à Internet no Althea. Nodos de retransmissão (Relay nodes) são os nodos que querem ganhar dinheiro ao encaminhar o tráfego na internet. Nodos gateway, são nodos de retransmissão, que além de encaminhar o tráfego, também estão conectados a um provedor de Internet. Para que uma rede forneça acesso à Internet é necessário pelo menos um nodo gateway, conectado a um nodo de saída via túnel.

Nodos de saída, não necessitam estar fisicamente na rede local, mas podem estar em um datacenter alcançável utilizando a Internet, sendo conectados aos gateways utilizando VPN. Esses nodos têm como uma de suas responsabilidades a tradução de endereços da rede Althea para a Internet (Tremback et al., 2019), atuando como o provedor de serviços de Internet da rede, permitindo assim que os outros nodos da rede foquem apenas na conectividade. Esses nodos possuem IPs públicos que são utilizados para encaminhar o tráfego de clientes conectados para a Internet. Nodos podem desempenhar mais de uma função, como usuários que também encaminham o tráfego. A figura 10 ilustra como os dispositivos estariam dispostos em uma WMN Althea.

Figura 10: WMN Althea

Fonte: Caciano Machado (2019)

O roteamento é uma das partes mais importantes em uma rede wireless, pois a entrega de pacotes entre os nodos da rede deve acontecer de forma eficiente e confiável, mesmo em um cenário como o das redes mesh. Nessas redes, na qual os nodos estão conectados sem uma infraestrutura fixa, existe grande flexibilidade e dinamismo na comunicação, pois os nodos podem mudar de posição a qualquer momento ou até mesmo estar em constante movimento, como é possível com os smartphones.

Essas particularidades das redes mesh exigem a utilização de protocolos de roteamento específicos, que permitam a criação de novas rotas de comunicação para esses nodos que não estão fixamente em um local, além de garantir que os pacotes encaminhados de um nodo a outro cheguem no destino. Devido a limitação da abrangência do sinal wireless dos dispositivos, é necessário que os nodos se ajudem, encaminhando os pacotes que recebam e que não sejam os destinatários. A depender do tamanho da rede, antes de um pacote alcançar o seu destino, ele será encaminhado por diversos nodos, formando um caminho Multihop entre o remetente e o destinatário (Yih-Chun; Johnson; Perrig, 2002). O protocolo de roteamento deve ser capaz de permitir que os nodos aprendam esse caminho. No Althea é utilizado como protocolo de roteamento o Babel.

4.1 BABEL

Babel é um protocolo de roteamento de vetor de distância, esse tipo de protocolo é caracterizado por utilizar o algoritmo Bellman-Ford para determinar o caminho mais curto

para transmissão de pacotes entre nodos na rede (Atkinson;Klinker, 1999). O protocolo utiliza o formato TLV para guardar suas informações de roteamento e adiciona múltiplos TLVs dentro de um único pacote (Hauck; Sollberger, 2011). Como explicado anteriormente, devido a limitações de abrangência de sinal dos dispositivos, é necessário a ajuda de outros nodos da rede para o encaminhamento de pacotes, para tal primeiramente é realizado a descoberta dos nodos vizinhos a o nodo que está enviando o pacote.

O Babel utiliza a estratégia do envio de mensagens TLV de hello e de I heard you para realizar a descoberta (Neumann; López; Navarro, 2015). Mensagens Hello são enviadas por padrão a cada 4 segundos, para um endereço multicast, por todas as interfaces babel. Mensagens I heard you, são transmitidas também de maneira periódica de um nodo para todos os outros nodos que enviaram mensagens de hello para ele (Chroboczek, 2011). Com esse processo de envio de mensagens, é possível, além de descobrir os nodos vizinhos, também extrair das informações desses TLVs o custo de enviar e receber mensagens para aquele nodo. As informações dos vizinhos de um nodo e os seus respectivos custos são utilizadas posteriormente na seleção da melhor rota para transmissão de pacotes.

Após a descoberta dos vizinhos e o custo para alcançá-los, os nodos enviam mensagens de update para um endereço multicast, com os destinos que conseguem atingir e com qual custo. Quando um nodo recebe uma mensagem update, ele combina a informação recebida com o custo associado ao vizinho do qual recebeu a informação (Tremback et al., 2019). Essa soma de valores é conhecida como métrica da rota (route metric).

O sistema Althea utiliza uma versão modificada do protocolo Babel, devido ao fato de que protocolos de vetores de distância, recebem informações sobre o custo de um nodo e métricas de rotas para um destino de maneira determinística, sem verificar a informação recebida, o que geralmente não é um problema se a rede onde o protocolo está sendo utilizada for controlada por apenas uma entidade. Já em uma rede Althea, não existe essa central, os dispositivos que compõem a rede estão ativamente competindo para fornecer o melhor serviço, assim nada impediria um nodo de agir maliciosamente e se declarar como a melhor opção para uma determinada rota, mesmo se não for. No próximo parágrafo será mostrado o que o Althea faz para verificar a precisão da métrica.

4.1.1 Verificação da métrica de rota

Para verificar se a métrica recebida pelos nodos está correta, o sistema Althea adicionou no protocolo babel uma métrica verificável (Tremback et al., 2019). Essa métrica verificável é definida como uma métrica de vetor de distância que tem o mesmo valor quando vista do nodo y para o nodo x, e do nodo x para o nodo y ou quando observada por nodos individuais. Como exemplo a isso, uma métrica verificável de tempo teria o mesmo valor quando um nodo h soma a rota do nodo x para o nodo y, como quando computada pelos nodos envolvidos na operação.

A precisão da métrica verificável anunciada por um nodo é medida comparando o valor da mesma, com o valor da métrica geral anunciada pelo nodo que está atualmente encaminhando o pacote até o destino (Tremback et al., 2019). Em um cenário onde C é o nodo que atualmente encaminha pacotes que A envia para V, e B deseje ser o novo nodo a encaminhar esses pacotes, é esperado que o valor da métrica anunciada pelo nodo B esteja perto do valor da métrica que o C possui para alcançar V.

4.1.2 Métrica de preço

A métrica de preço no Althea também é obtida através do protocolo Babel. Um campo adicional de preço de 16 bit é adicionado para cada TLV de update e em cada rota que está na tabela de roteamento de um nodo (Tremback et al., 2019). Conforme os TLVs de update são propagados na rede, os nodos aumentam o preço da rota utilizando uma constante, diferentes algoritmos para ajuste do preço podem ser utilizados baseados em competição ou demanda.

O protocolo babel leva em consideração a métrica de preço calculada, em conjunto com a métrica de rota, na hora de escolher a melhor rota para encaminhar o pacote de um nodo. O cálculo é dado pela seguinte função, onde as rotas são escolhidas baseadas em m’:

m’ = n x log2(m) + log2(p)

n - Multiplicador constante m - Métrica de rota

p - Métrica de preço

O pagamento dos nodos na rede Althea é feito após o serviço ser prestado, ou seja os nodos realizam o pagamento após terem os seus pacotes encaminhados. Para prevenir que nodos utilizem o serviço e não paguem, o sistema Althea utiliza um sistema de VPN chamado WireGuard. O WireGuard permite que os nodos criem “túneis” entre si e os seus vizinhos,

possibilitando o bloqueio ou a permissão do envio dos pacotes, baseado no pagamento. Além do controle de quem recebe o serviço, os túneis também garantem a confidencialidade dos dados trafegados. Na rede Althea o nodo de saída é o responsável por prover os serviços de Internet, por essa razão, também existe um túnel entre ele e os nodos clientes, proporcionando um melhor controle dos clientes que estão pagando. Caso o sistema perceba que em certo túnel o pagamento parou, os pacotes são bloqueados e não mais encaminhados.

5 IMPLEMENTAÇÃO

Nesta seção será apresentado a implementação de um cenário mesh de rede incentivada, descrevendo os recursos utilizados, o escopo adotado e as configurações utilizadas. A implementação tem por objetivo exemplificar uma rede mesh por meio de sua da criação em um cenário virtual. Serão coletados dados do desempenho e configuração dessa rede, assim como da distribuição e acesso a internet pelos diferentes nodos. Esses dados serão expostos nesse trabalho a fim de representar visualmente como as diferentes configurações adotadas pelos nodos de retransmissão afetam o acesso a rede.

5.1 PROPOSTA

Como atividade prática, propõe-se a implementação de um cenário de rede mesh incentivada utilizando máquinas virtuais com o firmware openWRT modificado pelo Althea. O projeto tem como objetivo entender na prática a implementação do cenário, além de realizar medições como concorrência entre os nodos para encaminhar os pacotes, mecanismos de incentivo adotados e simulações de eventos. Para realização dos pagamentos utilizando criptomoedas, será utilizada a blockchain Ethereum em um rede ethereum de teste. A rede mesh terá a seguinte topologia:

Figura 11: Topologia da rede com máquinas virtuais

Fonte: Autor (2020)

máquinas virtuais, em conjunto com uma máquina representando o usuário sem o firmware Althea instalado. enquanto o nodo de saída será provido pelo sistema Althea para realização dos testes, criando um túnel entre ele e os nodos de retransmissão com o WireGuard.

5.2 SOFTWARES UTILIZADOS

Documentos relacionados