Unicode
Unicode
Difficoltà: avanzato
Argomento: tecnologia
DEFINIZIONE
Unicode è uno standard internazionale di codifica dei caratteri che assegna un numero a ogni carattere, indipendentemente dalla piattaforma, dal programma o dalla lingua. Nato con l'obiettivo di fornire un sistema unificato per rappresentare testi di tutte le lingue scritte del mondo, Unicode supporta più di 150 sistemi di scrittura, inclusi alfabeti, ideogrammi, simboli matematici e pittogrammi moderni.
Lo standard Unicode fornisce una base per la rappresentazione di caratteri mediante diversi schemi di codifica, tra cui UTF-8, UTF-16 e UTF-32, che si differenziano per lunghezza e modalità di rappresentazione binaria dei caratteri. UTF-8 è la codifica più comunemente usata in applicazioni web e software, grazie alla sua compatibilità con ASCII e alla sua efficienza nel gestire testi prevalentemente in inglese.
Unicode e la codifica delle passphrase Bitcoin
Nel contesto delle passphrase Bitcoin, in particolare nel sistema BIP-39, Unicode svolge un ruolo fondamentale nella generazione e gestione di mnemonic phrases (frasi mnemoniche). Queste frasi sono sequenze di parole leggibili dall'uomo che rappresentano una chiave privata in modo sicuro e recuperabile.
L'uso di Unicode garantisce che le frasi mnemoniche possano includere caratteri di lingue diverse e che le passphrase personalizzate siano rappresentate in modo standardizzato. Tuttavia, per evitare ambiguità nella codifica, è essenziale normalizzare i caratteri Unicode in una forma standard, che garantisca consistenza tra piattaforme e sistemi.
Varianti di normalizzazione Unicode: NFKD e NFC
Le varianti di normalizzazione Unicode determinano come i caratteri composti e decomposizioni siano rappresentati in modo coerente. Queste forme sono critiche per applicazioni come la generazione di passphrase Bitcoin, dove anche la minima differenza nella rappresentazione può compromettere l'accesso ai fondi crittografici.
NFC (Normalization Form C)
Questa è la forma utilizzata da (BIP 38)[bip-38-passphrase-protected-private-key.html].
Questa forma combina caratteri che possono essere rappresentati sia come carattere base più segni diacritici separati, sia come carattere unico precomposto. Ad esempio, la lettera "é" (U+00E9) in NFC è rappresentata come un unico carattere precomposto.
NFKD (Normalization Form KD)
Questa è la forma utilizzata da BIP-39.
In questa forma, i caratteri sono decomposti in caratteri base e segni diacritici separati. Ad esempio, "é" viene scomposto in "e" (U+0065) più il segno diacritico acuto (U+0301). Inoltre, NFKD considera anche l'equivalenza di compatibilità, trasformando simboli o legature in rappresentazioni canoniche equivalenti.
Implicazioni nella codifica Bitcoin
L'uso improprio della normalizzazione Unicode nelle passphrase Bitcoin può portare a problemi di compatibilità tra wallet o, nei casi peggiori, all'impossibilità di recuperare i fondi.
Questo perchè caratteri che possono essere rappresentati visivamente identici, se sono codificati diversamente non vengono riconosciuti.
Esempio concreto:
Supponiamo che una passphrase contenga la lettera "é". Questa lettera può essere rappresentata in Unicode in due modi:
Come un singolo carattere "é" (U+00E9)
Come la combinazione di "e" (U+0065) e accento acuto "`" (U+0301)
Se la passphrase viene generata con la prima rappresentazione e il wallet utilizzato per il recupero si aspetta la seconda, la passphrase non verrà riconosciuta, nonostante appaia identica all'utente.
Per mitigare questo rischio è fortemente sconsigliato usare caratteri accentati o caratteri speciali nelle pass phrase.
- Link utili:
- Unicode su Wikipedia
- Vedi anche
- BIP 38 (Passphrase-protected private key)
- BIP 39 (Mnemonic Phrases)
- NFC Unicode (Normalization Form C) Forma di normalizzazione C di Unicode
- NFKD (Normalization Form Compatibility Decomposition) Forma di Normalizzazione con Decomposizione di Compatibilità Unicode
- UTF-8
aggiornato il 2025-01-22