Glossario / Riferimento per sviluppatori
Firma SSL
- Che cos'è la firma SSL?
- La firma SSL è il nome che BIP70 ha dato ai byte che firmano un PaymentRequest con la chiave del certificato di un server web, e l'etichetta era già impropria quando fu scritta.
Specificato nel BIP-70.
Nella firma SSL non è coinvolto alcun protocollo SSL. I byte sono una normale firma X.509 su un messaggio serializzato, realizzata con la chiave privata di un certificato di server TLS, e il protocollo SSL 3.0 è stato formalmente vietato dalla RFC 7568 a giugno 2015. Chi legge vecchia documentazione su bitcoin dovrebbe intendere l'espressione come "firma del certificato" e proseguire.
Come funziona
Stato: la firma SSL è morta insieme a BIP70, il protocollo che la definiva. Bitcoin Core ha incluso BIP70 da marzo 2014 fino a quando la versione 0.20.0 lo ha eliminato, e oggi nessun software mantenuto produce o verifica una di queste firme. L'espressione sopravvive nella documentazione per sviluppatori di bitcoin.org, che è dove la maggior parte delle persone la incontra.
L'algoritmo era scelto da un campo affine, non annunciato dalla firma stessa. Una richiesta di pagamento dichiarava il proprio pki_type come none, x509+sha256 o x509+sha1. Quel valore indicava il formato del certificato e il digest, mentre l'algoritmo di firma derivava dalla chiave che il certificato del commerciante portava, in pratica RSA. Un verificatore ricostruiva i byte esatti firmati dal commerciante, ne calcolava l'hash con il digest indicato e confrontava il risultato con la chiave pubblica del primo certificato della catena allegata.
Due delle tre opzioni sono invecchiate male. L'impostazione x509+sha1 era debole già prima che BIP70 fosse pubblicato, dato che il NIST aveva vietato SHA-1 per generare firme digitali dopo il 31 dicembre 2013. Entro gennaio 2020 i ricercatori hanno dimostrato una collisione a prefisso scelto contro SHA-1 per circa 45.000 $ di tempo di GPU noleggiato, che è esattamente l'attacco che consente di sostituire un documento firmato con un altro. Da allora il NIST ha fissato il 31 dicembre 2030 come il momento in cui SHA-1 esce del tutto dai suoi algoritmi approvati.
Il punto più profondo è che questa firma e una firma bitcoin rispondono a domande diverse. Una firma dentro una transazione bitcoin è verificata da ogni nodo secondo le regole di consenso, sulla curva secp256k1, usando ECDSA o, da quando Taproot si è attivato al blocco 709.632 il 14 novembre 2021, Schnorr come specificato nel BIP340. Una firma SSL era verificata da un solo wallet contro un archivio di certificati mantenuto da un fornitore. Una autorizza il movimento del denaro e non può essere annullata da nessuno. L'altra era un'asserzione su chi lo stesse chiedendo.
Dove la vedi
Le firme dei certificati non sono scomparse, è scomparso solo il nome del campo di BIP70. Il tuo browser osserva ancora un server dimostrare il possesso della chiave del proprio certificato durante l'handshake TLS, e questa è la versione onesta di ciò che BIP70 cercava di prendere in prestito.
La versione che conta quando detieni bitcoin è la firma del codice. Il software dei wallet e il firmware dei wallet hardware sono firmati con chiavi di cui il produttore ha il controllo, e verificare quella firma prima di installare è il passo che intercetta un download manomesso. I dispositivi Trezor e Ledger verificano le firme del firmware sul dispositivo stesso e rifiutano o segnalano in modo evidente le build che non riescono ad autenticare. Questa è una firma che fa un lavoro reale, a differenza del campo di BIP70, perché difende le chiavi che custodiscono i tuoi bitcoin e non il nome stampato su una pagina di pagamento.
Firma SSL vs firma digitale
Una firma SSL non autorizzava nulla sulla blockchain. Una firma digitale in una transazione bitcoin sblocca un output specifico ed è verificata in modo indipendente da migliaia di nodi; il campo di BIP70 era verificato da un singolo programma client contro un elenco di autorità di certificazione. Anche le conseguenze della perdita della chiave differiscono altrettanto nettamente. Una chiave di certificato compromessa viene revocata e riemessa lo stesso pomeriggio. Una chiave bitcoin compromessa significa che i bitcoin sono già spariti.