Glossario / Riferimento per sviluppatori
Codice QR URI
- Che cos'è un codice QR URI?
- Un codice QR URI è il motivo quadrato in bianco e nero che codifica un URI bitcoin:, così una fotocamera può leggere l'indirizzo e l'importo che altrimenti andrebbero digitati.
Scansionare elimina la digitazione, ed è nella digitazione che si annidano gli errori. Un indirizzo bech32 scritto in maiuscolo rientra nel modo alfanumerico dei QR, che secondo BIP173 è circa il 45 per cento più compatto del modo byte, quindi i codici in maiuscolo portano meno moduli e si scansionano in modo più affidabile. Ciò che un codice QR non può fare è dirti che l'indirizzo al suo interno appartiene a chi pensi tu.
Come funziona
Un codice QR è un contenitore di dati di uso generale standardizzato come ISO/IEC 18004, e bitcoin si limita a inserirvi un URI testuale.
Il formato offre diversi modi di codifica. Il modo alfanumerico copre un set di 45 caratteri: le cifre, le lettere maiuscole, lo spazio e nove segni di punteggiatura. Codifica due caratteri in 11 bit. Il modo byte accetta qualsiasi cosa ma consuma 8 bit interi per carattere. Le lettere minuscole sono assenti dal set alfanumerico, ed è per questo che i wallet spesso mostrano l'intera stringa in maiuscolo come BITCOIN:BC1Q.... Gli schemi URI non distinguono maiuscole e minuscole, e gli indirizzi bech32 sono validi in entrambi i casi purché non siano misti, quindi passare al maiuscolo è sicuro e riduce la griglia.
Gli indirizzi Base58 che iniziano con 1 o 3 non hanno questa opzione, perché il loro set di caratteri distingue maiuscole e minuscole e cambiare una lettera cambia l'indirizzo. È un vantaggio piccolo e concreto di bech32 che raramente viene menzionato.
La correzione degli errori si sceglie al momento della generazione. I quattro livelli recuperano circa il 7, il 15, il 25 e il 30 per cento di un codice danneggiato. Un adesivo stampato ed esposto alle intemperie giustifica il livello più alto; uno schermo no. La capacità non è mai il vincolo limitante qui: la versione più grande di un QR contiene 4.296 caratteri alfanumerici, mentre un tipico URI bitcoin va da 50 a 120.
Dove lo vedi
Quattro superfici producono codici QR bitcoin ogni giorno, e non sono ugualmente affidabili.
Le schermate di deposito degli exchange ne generano uno per l'indirizzo che vogliono che tu ricarichi. Il display di un wallet hardware ne genera uno per un indirizzo che ha derivato internamente, ed è l'unica versione di cui puoi verificare la provenienza. Le casse dei commercianti stampano un codice unificato che porta sia un indirizzo on-chain sia una fattura Lightning. Gli ATM bitcoin ne mostrano uno al momento dell'acquisto, di solito con un conto alla rovescia.
La differenza tra la seconda superficie e le altre è l'intero ragionamento sulla sicurezza a favore dei wallet hardware. Un malware che prende il controllo del tuo schermo può ridisegnare un codice QR; non può ridisegnare quello sul display di Trezor o di Ledger. Genera il codice sul dispositivo, poi verifica i caratteri che il dispositivo stampa anche sotto di esso.
I codici fisici sono il bersaglio più facile. L'Internet Crime Complaint Center dell'FBI ha pubblicato un avviso pubblico il 18 gennaio 2022 sui criminali che incollano i propri adesivi QR sopra quelli legittimi, e la tecnica non è scomparsa. Tratta qualsiasi codice stampato su carta in un luogo pubblico come non verificato finché l'indirizzo di destinazione non corrisponde a qualcosa che ti aspettavi in modo indipendente.
C'è un uso innocuo che vale la pena conoscere. I dispositivi di firma air-gapped spostano transazioni parzialmente firmate dentro e fuori tramite sequenze animate di codici QR, che scorrono a diversi fotogrammi al secondo, perché una fotocamera e uno schermo formano un canale dati senza cavo e senza uno stack USB da attaccare.
Codice QR URI vs indirizzo
Un indirizzo è testo; un codice QR URI è l'immagine di un testo più lungo che contiene un indirizzo. Scansionare un codice che contiene un indirizzo semplice dà al tuo wallet una destinazione e nient'altro, quindi devi comunque digitare l'importo. Scansionare un codice che contiene un URI completo compila l'importo, l'etichetta e talvolta anche una fattura Lightning. Entrambi sembrano identici all'occhio, ed è per questo che un wallet che dopo la scansione ti mostra un totale già compilato ti sta dicendo qualcosa di utile su ciò che ha effettivamente letto.