Casa > Q > Qual É O Novo Bug Do Google Assistant 'Hey Google' No Android?

Qual é o novo bug do Google Assistant 'Hey Google' no Android?

No risco de parecer estranho para responder a minha própria pergunta, um exemplo que me vem à mente é um bug no Bitcoin Script, a linguagem de script por trás do Bitcoin que é usada para verificar transações.

Bitcoin Script é uma linguagem baseada em pilha, por isso você pode empurrar e colocar dados dentro e fora da pilha e usar vários operadores para manipular os valores no topo. For example, if you have the script

  1. OP_1 
  2. OP_2 
  3. OP_ADD 

OP_1 and OP_2 would push the values 1 and 2 onto the stack respectively, then OP_ADD would pop the top 2 values onto the stack, add them together, then push the result onto the stack. Este exemplo é trabalhado no seguinte link.

Bitcoin script 101 Neste tutorial nós estaremos olhando para a linguagem de scripting usada por bitcoin. Bitcoin script is a simple forth-like stack based language, basically meaning that it operates using a first-in-last-out principle (FILO) upon a stack based data structure.https://bitcoindev.network/bitcoin-script-101/

So where’s the bug?

There’s a particular opcode called OP_CHECKMULTISIG which is used in multi-signature transactions on the blockchain. With this type of transaction, N public keys and M cryptographic signatures using these keys must be provided to successfully redeem the Bitcoins in that transaction. Specifically, a program using OP_CHECKMULTISIG would look like:

  1.  
  2.  
  3. ... 
  4.  
  5.  
  6.  
  7.  
  8. ... 
  9.  
  10.  
  11.  
  12. OP_CHECKMULTISIG 

In this notation, I use to indicate that we are pushing the value “Foo” onto the stack. Passando pelo programa, parece fazer sentido.

<
  1. Li>Lê o valor N da pilha para saber que há N chaves públicas.
  2. Li>Lê as N chaves públicas da pilha.
  3. Lê o valor M da pilha para saber que há M assinaturas para ler.
  4. procede à leitura das assinaturas M da pilha.

>Então, deve usar algum jumbo criptográfico para verificar se as assinaturas fornecidas provêm das chaves públicas e também fazer as verificações padrão como 0 < M <= N. Onde está o problema?

Nota como há um aleatório no topo do programa. Qual é o problema com isso? Acontece que houve um erro na implementação original do OP_CHECKMULTISIG, o qual mostra um valor extra fora da pilha. Este valor extra X não é usado para nada, e em vez disso é ignorado. Entretanto, para que o programa não falhe, ele tem que ser incluído!

O resultado disto é que toda transação usando este operador deve incluir um valor extra na pilha, adicionando bytes extras à cópia de todos da blockchain e aumentando muito ligeiramente a quantidade de dados transmitidos através da rede e o uso da CPU do mineiro para cada nova transação usando este operador.

Se você quiser inspecionar o código que introduziu este erro off-by-one, eu o localizei no Github. Tanto quanto posso dizer, é o mesmo código da versão mais antiga do Bitcoin que Satoshi Nakamoto introduziu.

bitcoin/script.cpp na v0.1.5 - bitcoin/bitcoinBitcoin Core integration/staging tree. Contribua para o desenvolvimento do bitcoin/bitcoin criando uma conta no GitHub.https://github.com/bitcoin/bitcoin/blob/v0.1.5/script.cpp#L727

Por que este bug não pode ser corrigido?

Bitcoin depende do consenso entre a maioria dos nós da rede para determinar qual versão da cadeia de bloqueios está correta. Os nós verificam a validade da cadeia de bloqueios executando o programa Bitcoin Script associado a cada transação da cadeia. Como já existem transações na cadeia de bloqueio que utilizam esse operador de buggy e adicionam esse valor extra aleatório na pilha, a correção do bug quebraria a compatibilidade com essas transações anteriores e invalidaria todas as transações subseqüentes! Isto causaria um garfo duro, uma vez que a maioria dos nós provavelmente não atualizariam para esta mudança. Como eles continuariam validando as transações OP_CHECKMULTISIG com o valor extra na pilha, suas cadeias divergiriam dos nós que corrigem o bug, causando duas cadeias concorrentes. O benefício de corrigir este bug relativamente inconsequente definitivamente não compensa os custos de um fork.

Na prática, a comunidade Bitcoin padronizou um conjunto de formatos fixos para o tipo de transações que eles permitirão. Em particular, o tipo de transação usando OP_CHECKMULTISIG deve usar OP_0 como o valor extra na pilha para ser validado. Isto limita o cálculo extra e o espaço necessário do valor extra a 1 byte. Além disso, parece haver um esforço para substituir OP_CHECKMULTISIG por um novo operador, o que causaria um garfo macio. Eu não acompanho o que está acontecendo na comunidade Bitcoin, então não posso comentar muito sobre se esta mudança será aceita.

bips/bip-0342.mediawiki no master - bitcoin/bipsBitcoin Improvement Proposals. Contribua para o desenvolvimento do bitcoin/bips criando uma conta no GitHub.https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki

Este bug destaca que até eles o mítico Satoshi Nakamoto é um humano como nós e propenso a erros. Enquanto a cadeia de bloqueio do Bitcoin continuar a existir, vestígios deste bug estarão presentes.

De Maison Tejedor

Porque é que as telas telefónicas têm uma resolução tão alta? :: Como fazer minha própria ação no Google Assistant