Glossario / Riferimento per sviluppatori
PP pki data
- Che cos'è PP pki data?
- PP pki data era il campo di una richiesta di pagamento BIP70 che conteneva i certificati del commerciante, codificati in DER, con il certificato foglia per primo, gli eventuali intermedi dietro di esso e il certificato radice escluso.
Specificato nel BIP-70.
Una firma non vale nulla senza la chiave pubblica che la verifica, e BIP70 spediva quella chiave dentro un certificato invece che da sola. Il campo conteneva un piccolo wrapper protobuf attorno a un elenco di certificati DER grezzi, ordinati dal commerciante verso l'esterno. Il suo contenuto decideva se un wallet mostrava il nome di un'azienda o un semplice avviso.
Come funziona
Stato: storico. PP pki data era il campo 3 dei cinque di un messaggio PaymentRequest, e Bitcoin Core ha eliminato il codice che lo leggeva nella versione 0.20.0, pubblicata il 3 giugno 2020.
Dentro quei byte c'era un messaggio protobuf chiamato X509Certificates con esattamente un campo ripetuto, in cui ogni voce era un certificato completo in forma binaria. L'ordine era specificato invece che lasciato al gusto: veniva prima il certificato del commerciante stesso, poi gli intermedi necessari a raggiungere una radice pubblica.
La radice stessa era deliberatamente assente, e il ragionamento si estende ben oltre BIP70. Una radice ricevuta dalla parte che stai cercando di verificare non dimostra nulla, dato che chiunque può generarne una e firmarci sopra quello che vuole. La fiducia deve arrivare da un elenco che il tuo dispositivo possiede già.
DER, la codifica usata, è la forma binaria canonica di ASN.1: una struttura, esattamente una sequenza di byte valida. Il noto formato PEM con le sue righe BEGIN CERTIFICATE è quegli stessi byte in base64, che occupa circa un terzo di spazio in più, quindi il formato di rete è sempre quello grezzo.
I certificati dominavano la dimensione di una richiesta. Gli output, un timestamp e una nota potevano arrivare a un paio di centinaia di byte, mentre un solo certificato RSA-2048 porta un modulo di 256 byte e una firma di 256 byte prima di contare nomi o estensioni, e due in sequenza arrivano a migliaia di byte. Dove il pki type era "none" il campo era semplicemente vuoto e un wallet non aveva nulla da mostrare se non la destinazione.
Dove lo vedi
Lo stesso elenco di certificati, nello stesso ordine con la foglia per prima, arriva a ogni connessione HTTPS che fai.
Un server TLS invia prima il proprio certificato e poi gli intermedi, omettendo la radice per il motivo esposto sopra. Puoi leggere l'elenco esatto che invia qualsiasi sito con un solo comando, openssl s_client -showcerts -connect example.com:443, e quello che viene stampato è lo stesso identico materiale che trasportava BIP70, mostrato in PEM invece che in binario.
Per chi compra bitcoin, la lezione sta in ciò che quei byte non dicono. Una catena valida dimostra che un'autorità ha verificato il controllo di un nome di dominio al momento dell'emissione. Non dice nulla su chi possiede l'azienda, se la pagina è un clone di un exchange o se quell'exchange può far fronte ai prelievi. I siti di phishing hanno certificati del tutto validi, ottenuti gratis e in pochi secondi, e il lucchetto che producono è indistinguibile da quello autentico.
Quindi leggi il dominio, non il lucchetto. Raggiungi un exchange tramite un segnalibro che hai creato una volta invece che tramite un annuncio di ricerca, e tratta un avviso di certificato su un sito che custodisce i tuoi soldi come un punto fermo e non come un semplice invito.
PP pki data vs catena di certificati
PP pki data era un contenitore; la catena di certificati è ciò che ci finiva dentro. Parlare di pki data ha senso solo leggendo la documentazione di BIP70 o il codice sorgente archiviato di un wallet, perché nessun'altra cosa ha mai usato quel termine. Una catena, al contrario, è una cosa viva da cui dipendi ogni giorno, e la regola di ordinamento che BIP70 ha messo per iscritto, la foglia per prima con la radice omessa, è la regola che TLS segue ancora.