Glossário / Referência do desenvolvedor
Código QR de URI
- O que é um código QR de URI?
- Um código QR de URI é o padrão quadrado em preto e branco que codifica um URI bitcoin:, para que uma câmera leia o endereço e o valor que, de outro modo, seriam digitados.
Escanear elimina a digitação, e é na digitação que os erros aparecem. Um endereço bech32 escrito em maiúsculas se encaixa no modo alfanumérico do QR, que, conforme observa o BIP173, é cerca de 45% mais compacto que o modo de bytes, de modo que códigos em maiúsculas carregam menos módulos e são escaneados com mais confiabilidade. O que um código QR não pode fazer é dizer que o endereço dentro dele pertence a quem você pensa que pertence.
Como funciona
Um código QR é um contêiner de dados de uso geral, padronizado como ISO/IEC 18004, e o bitcoin simplesmente coloca um URI de texto dentro de um.
O formato oferece vários modos de codificação. O modo alfanumérico abrange um conjunto de 45 caracteres: os dígitos, as letras maiúsculas, o espaço e nove sinais de pontuação. Ele empacota dois caracteres em 11 bits. O modo de bytes aceita qualquer coisa, mas gasta 8 bits completos por caractere. As letras minúsculas estão ausentes do conjunto alfanumérico, e é por isso que as carteiras muitas vezes exibem toda a sequência em maiúsculas, como BITCOIN:BC1Q.... Os esquemas de URI não diferenciam maiúsculas de minúsculas, e endereços bech32 são válidos em qualquer das duas formas, desde que não sejam misturadas, então usar maiúsculas é seguro e reduz a grade.
Endereços Base58 que começam com 1 ou 3 não têm essa opção, porque seu conjunto de caracteres diferencia maiúsculas de minúsculas e mudar uma letra muda o endereço. É uma vantagem pequena e concreta do bech32 que raramente é mencionada.
A correção de erros é escolhida no momento da geração. Os quatro níveis recuperam aproximadamente 7, 15, 25 e 30% de um código danificado. Um adesivo impresso exposto ao tempo justifica o nível mais alto; uma tela não. A capacidade nunca é a restrição decisiva aqui: a maior versão de QR comporta 4.296 caracteres alfanuméricos, enquanto um URI de bitcoin típico ocupa algo entre 50 e 120.
Onde você o encontra
Quatro superfícies produzem códigos QR de bitcoin diariamente, e elas não são igualmente confiáveis.
As telas de depósito das corretoras geram um para um endereço no qual elas querem que você deposite. A própria tela de uma carteira de hardware gera um para um endereço que ela derivou internamente, que é a única versão cuja procedência você pode verificar. As páginas de pagamento de comerciantes imprimem um código unificado que carrega tanto um endereço on-chain quanto uma fatura Lightning. Os caixas eletrônicos de bitcoin exibem um no momento da compra, geralmente com uma contagem regressiva.
A diferença entre a segunda superfície e as demais é todo o argumento de segurança a favor das carteiras de hardware. Um malware que controla sua tela pode redesenhar um código QR; ele não pode redesenhar o da tela de uma Trezor ou de uma Ledger. Gere o código no dispositivo e depois verifique os caracteres que o dispositivo também imprime abaixo dele.
Os códigos físicos são o alvo mais fácil. O Internet Crime Complaint Center do FBI publicou um anúncio de serviço público em 18 de janeiro de 2022 sobre criminosos que colavam seus próprios adesivos de QR sobre os legítimos, e a técnica não desapareceu. Trate qualquer código impresso em papel em um local público como não verificado até que o endereço de destino corresponda a algo que você esperava de forma independente.
Há um uso benigno que vale a pena conhecer. Dispositivos de assinatura isolados da rede movem transações parcialmente assinadas para dentro e para fora por meio de sequências animadas de códigos QR, alternando vários quadros por segundo, porque uma câmera e uma tela formam um canal de dados sem cabo e sem pilha USB para atacar.
Código QR de URI vs endereço
Um endereço é texto; um código QR de URI é uma imagem de um texto mais longo que, por acaso, contém um endereço. Escanear um código que carrega um endereço simples dá à sua carteira um destino e nada mais, então você ainda digita o valor. Escanear um que carrega um URI completo preenche o valor, o rótulo e, às vezes, também uma fatura Lightning. Os dois parecem idênticos aos olhos, e é por isso que uma carteira que mostra um total já preenchido depois de uma leitura está lhe dizendo algo útil sobre o que ela realmente leu.