• Nenhum resultado encontrado

Nodos de Verificação Simplificada de Pagamento (VSP)

No documento Dominando Bitcoin (páginas 160-166)

Nem todos os nodos tem a habilidade de armazenar a blockchain completa. Muitos clientes bitcoin são projetados para serem executados em dispositivos com limitações de armazenamento e energia, como smartphones, tablets ou sistemas embutidos. Para esses dispositivos, um método de verificação

simplificada de pagamento é usado para permití-los que operem sem terem que armazenar a

blockchain completa. Esses tipos de clientes são chamados clientes VSP (em inglês, SPV) ou clientes leves. Conforme a adoação do bitcoin aumenta, o nodo VSP está se tornando a forma mais comum de nodo bitcoin, especialmente para carteiras bitcoin.

bloco. A cadeia de blocos resultante, sem as transações, é 1.000 vezes menor do que a blockchain completa. Os nodos VSP não podem construir um figura completa de todas as UTXOs que estão disponíveis para serem gastas porque eles não conhecem todas as transações da rede. Os nodos VSP verificam as transações usando uma metodologia levemente diferente, a qual se baseia nos pontos que fornecem, sob demanda, consultas de apenas algumas partes relevantes da blockchain.

Figure 6. Nodo sincronizando a blockchain ao adquirir blocos de um ponto

Como uma analogia, um nodo completo é como um turista em uma cidade estranha, equipado com um mapa detalhado de cada rua e cada endereço. Em comparação, um nodo de VSP é como um turista em uma cidade estranha perguntando a desconhecidos aleatórios na rua por orientações de como chegar a um lugar, enquanto ele sabe apenas o nome de uma avenida principal. Embora ambos os turistas possam verificar a existência de uma rua ao visitá-la, o turista sem o mapa não sabe o que se passa em cada rua colateral e não sabe quais outras ruas existem. Posicionado na frente da Rua da Igreja 23, o turista sem o mapa não tem como saber se existem uma dúzia de outros endereços "Rua da Igreja 23" na cidade e se ele está no endereço correto. A melhor chance de um turista sem mapa é perguntar para um número suficiente de pessoas e torcer para que alguns deles não estejam tentando lhe passar a perna.

A verificação simplificada de pagamento verifica as transações através de referências às suas

profundidades na blockchain, ao invés de sua altura. Enquanto um nodo com a blockchain completa irá

construir uma cadeia completamente verificada de milhares de blocos e transações que siga pela blockchain (retrospectivamente no tempo) até o bloco gênese, um nodo de VSP irá verificar a cadeia de todos os blocos (mas não todas as transações) e irá ligar essa cadeia à transação de interesse.

Por exemplo, ao examinar uma transação no bloco 300.000, um nodo completo segue todos os 300.000 blocos até o bloco gênese e constrói um banco de dados completo de UTXO, estabelecendo a validade da transação ao confirmar que a UTXO ainda não foi gasta. Um nodo de VSP não pode validar se a UTXO ainda não foi gasta. Ao invés disso, o nodo de VSP irá estabelecer uma conexão entre a transação e o bloco que a contém, usando um caminho de Merkle (veja [merkle_trees]). Então, o nodo de VSP aguarda até ver os seis blocos do 300.0001 até o 300.006 empilhados sobre o topo do bloco ontendo a transação e verifica-a ao estabelecer sua profundidade sob os blocos 300.006 a 300.001. O fato de que outros nodos na rede aceitaram o bloco 300.000 e então fizeram o trabalho necessário para produzir mais seis blocos no seu topo é a prova, através de proxy, que a transação não foi um gasto duplo.

Um nodo de VSP não pode ser convencido de que uma transação existe em um bloco quando a transação de fato não existe. O nodo de VSP estebelece que uma transação existe em um bloco ao solicitar um caminho de merkle como prova e ao validar a prova de trabalho na cadeia de blocos. Entretanto, a existência de uma transação pode ser "escondida" de um nodo de VSP. Um nodo de VSP pode provar definitivamente que uma transação existe, mas não pode verificar que uma transação, como um gasto duplo de uma mesma UTXO, não existe porque ele não tem um registro de todas as transações. Essa vulnerabilidade pode ser usada em um ataque de negação de serviço (DOS) ou para um ataque de gasto duplo contra os nodos de VSP. Para defender-se contra isso, um nodo de VSP precisa se conectar aleatoriamente a vários nodos, para aumentar a probabilidade de que ele esteja em contato com pelo menos um nodo honesto. Essa necessidade de se conectar aleatoriamente significa que os nodos de VSP também são vulneráveis a ataques de particionamento de rede ou ataques Sybil, onde eles são conectados a nodos ou redes fakes e não tem acesso a nodos honestos ou à rede bitcoin verdadeira.

Para a maioria das funções práticas, os nodos VPS bem-conectados são seguros o suficiente, demonstrando um equilíbrio ideal entre necessidade de recursos, praticidade e segurança. Para segurança infalívil, no entanto, nada é superior do que executar um nodo com a blockchain completa.

TIP

Um nodo que tem a blockchain completa verifica a transação ao fazer uma pesquisa em sua cadeia inteira de milhares de blocos, para se certificar de que a UTXO já não foi gasta previamente, enquanto um nodo VSP verifica ao pesquisar quão profundo o bloco está "enterrado" sob os vários blocos acima dele.

Para receber os cabeçalhos dos blocos, os nodos de VSP usam uma mensagem getheaders ao invés de getblocks. O ponto que responder irá enviar até 2.000 cabeçalhos de blocos usando uma mensagem headers única. O processo é o mesmo que o utilizado por um nodo completo receber os blocos completos. Os nodos de VSP também definem um filtro na conexão com os pontos, para filtrar a transmissão de blocos futuros e transações enviadas pelos pontos. Quaisquer transações de interesse são recebidas usando uma requisição getdata. Em resposta, os pontos geram uma mensagem tx contendo as transações. Nodo SPV sincronizando os cabeçalhos dos blocos mostra a sincronização dos cabeçalhos dos blocos.

Figure 7. Nodo SPV sincronizando os cabeçalhos dos blocos

Como os nodos de VSP precisam baixar transações específicas para verificá-las seletivamente, eles também criam um risco de privacidade. Ao contrário dos nodos com a blockchain completa, que baixam todas as transações no interior de cada bloco, as solicitações por dados específicos que são feitas pelos nodos de VSP podem inadvertidamente revelar os endereços em suas carteiras. Por exemplo, um terceiro monitorando uma rede poderia monitorar todas as transações solicitadas por

uma carteira em um nodo de VSP e usá-las para associar endereços bitcoins com o usuário dessa carteira, destruindo a privacidade do usuário.

Logo após a introdução dos nodos VSP/peso leve, os desenvolvedores bitcoin adicionaram uma funcionalidade chamada filtros bloom para resolver os riscos de privacidade dos nodos VSP. Os filtros bloom permitem que os nodos VSP recebam um conjunto de transações sem que revelem precisamente quais endereços eles estão interessados, através de um mecanismo de filtros que utiliza probabilidades ao invés de padrões fixos.

No documento Dominando Bitcoin (páginas 160-166)