Publicação de texto e imagens em Bitcoin

Reading Time: 5 minutes

CoinFabrik specializes in auditing and developing Dapps.

  •  
  •  
  •  
  •  
  •  
  •  

20 de junho de 2019

Autor: Hartwig Mayer

Introdução

Diz-se que o Bitcoin bancará os sem-banco. Por quê? Em contraste com o sistema bancário tradicional, onde novos clientes devem fornecer informações pessoais para abrir uma conta, o único requisito para ingressar no sistema financeiro Bitcoin é de natureza técnica: um dispositivo para executar o software para se comunicar com a rede Bitcoin. Nenhuma entidade decide quem tem consentimento para participar da rede – um recurso interessante também útil para um aplicativo de imprensa livre de censura.

Blockchains já são usados ​​para armazenar dados não financeiros para diversos fins, por exemplo, para comprovar a autoria de ideias ou para comprovar a existência de um documento. Um dos maiores arquivos armazenados com sucesso na blockchain Bitcoin é uma imagem de Nelson Mandela. Um usuário conseguiu inserir esta foto de cerca de 14 KB. Em blockchain verdadeiramente descentralizado, uma transação válida – o formato padrão de transações definido em cada blockchain – quase sempre passa para o Ledger (O ledger é um registro compartilhado de informações, a exemplo um livro caixa de um banco). Conseqüentemente, não não há entidade que conceda permissão para entrar na rede, como também não há ninguém que possa filtrar o conteúdo.

O mecanismo de “chain” (encadear, sequenciar)) os blocos de transações impede a violação dos dados, uma vez que eles entram no blockchain. E, crucial para evitar um único ponto de falha, o blockchain é replicado, ou seja, os nodes executam uma cópia local dele. Portanto, os blockchains não são propensos a tempos de inatividade ou, nas palavras de um estudante chinês, “não há 404 no blockchain” (fonte). Tudo isso faz do blockchain um candidato promissor para jornalistas que buscam mídia livre de censura.

Soluções em Bitcoin

Visão Geral

As transações de Bitcoin devem fazer referência a moedas que foram enviadas anteriormente para um endereço de chave pública. Para autorizar uma nova transação, o dono da moeda deve fornecer uma prova de que essa moeda pertence ao seu endereço de chave pública usando sua chave privada para gerar uma assinatura criptográfica. As informações relevantes para permitir que os nodes restantes da rede provem a exatidão da assinatura são escritas nos scripts de entrada das transações Bitcoin. Além disso, as transações especificam os receptores da transferência, novamente especificados por endereços de chave pública que são gravados nos scripts de saída das transações.

As transações não financeiras devem parecer válidas para os mineradores de Bitcoin, para que eles não as descartem. As condições para uma transação válida são:

Valor mínimo de transferência: O valor mínimo de saída de uma transação é atualmente de cerca de 546 satoshis para não ser considerado dust (poeira) (em 7 de junho de 2019).

Taxas mínimas: As taxas são determinadas pelo tamanho do script de saída e de entrada. A taxa média atual por byte é de cerca de 39 Satoshi (cf. bitcoinfees.info, em 7 de junho de 2019)

Tamanho máximo dos dados: O limite superior total de uma transação Bitcoin padrão é 100 KB. Os scripts de entrada e saída podem conter dados específicos de tamanho limitado.

Moeda não gasta: O script de entrada deve fazer referência a um script de saída não gasto.

As transações que se desviam dessas regras são consideradas fora do padrão e não serão selecionadas pela maioria dos mineiros. Como veremos abaixo, as transações que contêm dados não financeiros podem ser diferentes das transações padrão. Transações fora do padrão podem passar para o blockchain de qualquer maneira, mas algumas com probabilidade menor e são mais críticas para futuras mudanças de protocolo.

Métodos de inserção de dados

Script de saída:

Em [1], [2], os autores identificam 5 tipos de script de saída que são compatíveis com o modelo que não envolvem o script de entrada. Como os mineiros não conseguem distinguir entre hashes de endereço de chave pública legítimos e dados binários arbitrários, os scripts de saída podem ser facilmente usados ​​para inserir dados indistinguíveis para os mineiros. Uma desvantagem do uso de scripts de saída é que os usuários devem queimar/gastar bitcoins à medida que substituem endereços de receptores válidos por dados arbitrários. Os seguintes scripts de saída podem ser usados ​​para inserir dados arbitrários:

Pay-to-Public-Key (P2PK) (A assinatura sempre corresponde ao scriptPubKey da transação anterior – é assim que você prova que pode gastá-la)

Dados armazenados em vez de uma saída de chave compactada de 33 bytes ou chave descompactada de 65 bytes juntamente com uma quantidade diferente de bitcoin para gastar / queimar.

(Pay-to-PublicKey-Hash (P2PKH) P2PKH (Hash de pagamento para chave pública)

Hash de chave pública de pagamento (P2PKH): Dados armazenados em vez de um hash de chave pública de saída junto com uma quantidade diferente de bitcoin para queimar. Isso permite armazenar 20 bytes por saída.

OP RETURN: Este é um local para armazenar 80 bytes por transação, que é um UTXO comprovadamente impossível de gastar que os mineiros não precisam rastrear.

Multi-assinatura: Por exemplo, no caso de 1 de 3 scripts de assinaturas múltiplas, os dados podem ser armazenados em vez de 3 hashes de chave pública, ou com 1 assinatura real e duas assinaturas irreais, caso em que a transação permanece utilizável (mais detalhes em [1]).

Transação Coinbase: Dados arbitrários de até 100 bytes podem ser armazenados em uma transação por bloco, mas esta opção está disponível apenas para mineradores.

Input Script / Script de entrada:

Isso requer uma técnica mais sofisticada. Os scripts de entrada permitem que dados de tamanho maior sejam inseridos, mas devem manter sua semântica válida. Para conseguir isso, o script de dead branch deve se referir a um script de saída válido, por exemplo usando um dead branch inserido anteriormente. Essas transações não são armazenadas na lista de conjuntos de saídas de transações não gastas. Conforme descrito em [1] (ver Loc. Cit. Para mais detalhes), existem duas maneiras especiais de fazer isso:

Pay-to-Script-Hash (P2SH): Esses dados referem-se à moeda não gasta. Os dados podem ser armazenados no script de resgate (limite de 520 bytes) e / ou na parte do script de entrada seguido pelo script de resgate (limitado pelo limite total de 1650 bytes do script de entrada). Métodos mais avançados para armazenar dados são mencionados em [1]:

• Data Drop Method: os dados são armazenados no script de resgate.

• Data Hash Transaction: usa o script após o script de resgate.

Reconstrução de dados:

Os scripts de saída no P2PKH com mais de 20 bytes devem ser inseridos em vários scripts de saída, seja em uma transação ou, se for maior que o tamanho máximo (consulte a tabela abaixo), em várias transações. Os dados precisam ser vinculados onchain ou offchain para permitir uma reconstrução dos conjuntos de dados armazenados no blockchain. Pode-se usar o script de saída para armazenar metadados, por exemplo, uma referência ao ID da transação do próximo bloco de dados armazenado em outra transação.

Os scripts de entrada podem armazenar dados usando os métodos Data Drop e / ou Data Hash. Conforme mostrado em [1], em uma única transação, o tamanho máximo do arquivo pode ser de 96.060 bytes. Arquivos maiores do que isso exigem novamente uma indexação dos dados divididos.

Serviço de inserção de conteúdo selecionado:

Apertus: Este serviço permite fragmentar o conteúdo em várias transações usando um número arbitrário de scripts de saída P2PKH. Além de outros recursos, Apertus também funciona para Litecoin, Dogecoin e outros.

Os autores de [1] descobriram que o P2FKH é o método mais amplamente difundido, embora crie o inchaço mais insustentável do UTXO, requeira a maior sobrecarga e seja o mais caro. Eles argumentam que sua popularidade pode ser explicada por sua simplicidade de implementação.

Referências

[1] A. Sward, I. Vecna, and F. Stonedahl. Data Insertion in Bitcoin’s Blockchain. Ledger Journal, 2018.

[2] R. Matzutt, J. Hiller, M. Henze, J. H. Ziegeldorf, D. Müllmann, O. Hohlfeld, and K. Wehrle. A Quantitative Analysis of the Impact of Arbitrary Blockchain Content on Bitcoin. In Proceedings of the 22nd International Confer-ence on Financial Cryptography and Data Security (FC). Springer, 2018.

Para nossa pesquisa completa sobre a publicação livre de censura no blockchain (em inglês), clique aqui.


  •  
  •  
  •  
  •  
  •  
  •