Glosario / Referencia para desarrolladores
Código QR de URI
- ¿Qué es un código QR de URI?
- Un código QR de URI es el patrón cuadrado en blanco y negro que codifica un URI bitcoin:, para que una cámara lea la dirección y el monto que de otro modo se teclearían.
Escanear elimina el tecleo, y es al teclear donde se cometen los errores. Una dirección bech32 escrita en mayúsculas encaja en el modo alfanumérico de los códigos QR, que según señala BIP173 es alrededor de un 45 % más compacto que el modo de bytes, así que los códigos en mayúsculas tienen menos módulos y se escanean con más fiabilidad. Lo que un código QR no puede hacer es decirle que la dirección que contiene pertenece a quien usted cree.
Cómo funciona
Un código QR es un contenedor de datos de uso general, estandarizado como ISO/IEC 18004, y bitcoin simplemente coloca un URI de texto dentro de uno.
El formato ofrece varios modos de codificación. El modo alfanumérico abarca un conjunto de 45 caracteres: los dígitos, las letras mayúsculas, el espacio y nueve signos de puntuación. Empaqueta dos caracteres en 11 bits. El modo de bytes acepta cualquier cosa, pero gasta 8 bits completos por carácter. Las letras minúsculas no forman parte del conjunto alfanumérico, y por eso las billeteras a menudo muestran toda la cadena de caracteres en mayúsculas, como BITCOIN:BC1Q.... Los esquemas de URI no distinguen mayúsculas de minúsculas, y las direcciones bech32 son válidas tanto en mayúsculas como en minúsculas siempre que no se mezclen, así que pasar a mayúsculas es seguro y reduce la cuadrícula.
Las direcciones Base58 que empiezan por 1 o por 3 no tienen esa opción, porque su conjunto de caracteres distingue mayúsculas de minúsculas y cambiar una letra cambia la dirección. Es una ventaja pequeña y concreta de bech32 que rara vez se menciona.
La corrección de errores se elige al generar el código. Los cuatro niveles recuperan aproximadamente el 7, el 15, el 25 y el 30 % de un código dañado. Un adhesivo impreso expuesto a la intemperie justifica el nivel más alto; una pantalla no. La capacidad nunca es el factor limitante aquí: la versión más grande de los códigos QR contiene 4.296 caracteres alfanuméricos, mientras que un URI de Bitcoin típico ocupa entre 50 y 120.
Dónde aparece
Cuatro superficies producen códigos QR de bitcoin a diario, y no todas son igual de fiables.
Las pantallas de depósito de los exchanges generan uno para la dirección a la que quieren que usted envíe fondos. La propia pantalla de una billetera de hardware genera uno para una dirección que la billetera derivó internamente, y es la única versión cuya procedencia usted puede comprobar. Las páginas de pago de los comerciantes muestran un código unificado que lleva a la vez una dirección on-chain y una factura Lightning. Los cajeros de bitcoin muestran uno en el momento de la compra, normalmente con una cuenta regresiva.
La diferencia entre la segunda superficie y las demás es todo el argumento de seguridad a favor de las billeteras de hardware. Un malware que controle su pantalla puede redibujar un código QR; no puede redibujar el de la pantalla de un Trezor o de un Ledger. Genere el código en el dispositivo y luego verifique los caracteres que el dispositivo también imprime debajo.
Los códigos físicos son el objetivo más fácil. El Internet Crime Complaint Center del FBI publicó un anuncio de servicio público el 18 de enero de 2022 sobre delincuentes que pegaban sus propios adhesivos QR sobre los legítimos, y la técnica no ha desaparecido. Trate cualquier código impreso en papel en un lugar público como no verificado hasta que la dirección de destino coincida con algo que usted esperaba por su cuenta.
Hay un uso benigno que conviene conocer. Los dispositivos de firma aislados de la red mueven transacciones parcialmente firmadas hacia dentro y hacia fuera mediante secuencias animadas de códigos QR, a razón de varios fotogramas por segundo, porque una cámara y una pantalla forman un canal de datos sin cable ni software USB que atacar.
Código QR de URI frente a dirección de bitcoin
Una dirección es texto; un código QR de URI es una imagen de un texto más largo que resulta contener una dirección. Escanear un código que solo contiene una dirección le da a su billetera un destino y nada más, así que usted sigue teniendo que teclear el monto. Escanear uno que contiene un URI completo rellena el monto, la etiqueta y a veces también una factura Lightning. A simple vista ambos parecen idénticos, y por eso una billetera que le muestra un total ya rellenado tras escanear le está diciendo algo útil sobre lo que realmente leyó.