[>a2302.html>] [<a2300.html<] [^a2.html^]
Il «certificato» è un file contenente alcuni dati identificativi di una persona, in un contesto determinato, abbinati alla chiave pubblica della stessa, firmato da una o più autorità di certificazione. In pratica le firme di queste autorità servono a garantire la veridicità di questi dati, confermando che la chiave pubblica abbinata appartiene effettivamente a quella persona.
Volendo vedere le cose da un altro punto di vista, la chiave pubblica che è stata controfirmata da altre persone, è un certificato della veridicità della chiave pubblica stessa, che è tanto più valido, quanto più credibili sono le persone che hanno aggiunto la loro firma.
Dal momento che la crittografia a chiave pubblica serve per cifrare, ma soprattutto per firmare i documenti in forma elettronica, si tratta di uno strumento strettamente personale. Per questa ragione, un certificato dovrebbe essere sempre riferito a una persona particolare, anche se questa lo deve utilizzare nell'ambito del proprio lavoro, per lo svolgimento dei suoi incarichi. |
Nel momento in cui la crittografia a chiave pubblica viene usata professionalmente, come nel caso del commercio elettronico, è indispensabile la presenza delle autorità di certificazione, ovvero di enti (privati o pubblici) specializzati nella certificazione.
Ogni autorità di certificazione stabilisce e impone la propria procedura per ottenere la propria certificazione; questo significa che ogni autorità definisce il proprio ambito di competenza, quali tipi di certificazione elettronica è in grado di fornire (si fa riferimento al formato del certificato elettronico) e quali siano le informazioni che devono essere fornite in modo preciso. Sarà poi compito dell'autorità la verifica della veridicità di tali informazioni.
La certificazione da parte di queste autorità, ovvero la loro firma sui certificati elettronici, vale solo se questa è verificabile, per cui è necessario disporre della chiave pubblica di queste autorità. Anche la chiave pubblica di un'autorità di certificazione viene diffusa attraverso un certificato.
Un'autorità di certificazione potrebbe funzionare in modo autonomo, oppure potrebbe appartenere a una struttura più o meno articolata. Infatti, ci potrebbe essere la necessità di suddividere il carico di lavoro in più organizzazioni. La figura 233.1 mostra una struttura gerarchica ad albero, dove si parte da un'autorità principale, che si autocertifica, che demanda e organizza il compito di certificazione a strutture inferiori, firmando il loro certificato (con la propria chiave privata). Queste autorità inferiori possono avere a loro volta la responsabilità sulla certificazione di altre autorità di livello inferiore, ecc.
.----------------------------. | Autorità di certificazione | | principale (root) | `----------------------------' | .--------------------------|--------------------------. | | | .----------------------. .----------------------. .----------------------. | Autorità subordinata | | Autorità subordinata | | Autorità subordinata | | Alfa | | Beta | | Gamma | `----------------------' `----------------------' `----------------------' | | - - - *------------*-------------* - - - | | | | .----------------------. .----------------------. | Autorità subordinata | | Autorità subordinata | | Bianco | | Nero | `----------------------' `----------------------' Figura 233.1. Gerarchia tra più autorità di certificazione. |
La presenza di una scomposizione gerarchica tra le autorità di certificazione, più o meno articolata, genera una catena di certificati, ovvero un «percorso di fiducia». Di fronte a questa situazione, sarebbe bene che il tipo di certificato elettronico che si utilizza permettesse di annotare questa catena, in maniera tale che sia possibile il recupero dei certificati mancanti. In pratica, chi ottiene un certificato di Tizio, firmato dall'autorità Bianco, per verificare l'autenticità del certificato di questo signore, deve disporre della chiave pubblica di quell'autorità, o in altri termini, deve avere il certificato dell'autorità stessa (che contiene anche la sua chiave pubblica). Senza questa informazione non potrebbe verificare la firma di questa autorità. Tuttavia, se nel certificato di Tizio è annotato che l'autorità Beta è garante per l'autorità Bianco e inoltre è annotato in che modo procurarsi il certificato di Bianco rilasciato da Beta, se si dispone già del certificato dell'autorità Beta, dopo che è stato prelevato il certificato di Bianco, questo lo si può controllare attraverso quello di Beta. Questi passaggi si possono rivedere descritti nell'elenco seguente:
Tizio si presenta con il proprio certificato, contenente la firma di garanzia dell'autorità Bianco;
l'autorità Bianco è sconosciuta, di conseguenza non si dispone del suo stesso certificato, dal quale sarebbe necessario estrarre la chiave pubblica per verificarne la firma sul certificato di Tizio;
nel certificato di Tizio c'è scritto in che modo ottenere il certificato dell'autorità Bianco, che così viene prelevato attraverso la rete;
nel certificato di Tizio c'è scritto che l'autorità Bianco è garantita dall'autorità Beta, della quale, per fortuna, si dispone del certificato;
con la chiave pubblica di Beta si verifica la firma nel certificato di Bianco;
disponendo del certificato di Bianco e avendo verificato la sua autenticità, si può verificare l'autenticità del certificato di Tizio.
Se non si disponesse del certificato di Beta occorrerebbe ripetere la ricerca per l'autorità garante superiore, nel modo già visto.
Un certificato non può essere valido per sempre, così come accade con un documento di riconoscimento: una carta di identità o un passaporto. Un'informazione fondamentale che deve avere un certificato elettronico è la scadenza, e si tratta sempre dell'informazione che viene controllata per prima, chiunque sia il titolare del certificato.
Tuttavia, anche nel periodo di validità di un certificato possono cambiare tante cose, per cui deve essere previsto un meccanismo di revoca: sia su richiesta del titolare; sia a seguito di una decisione dell'autorità di certificazione che lo ha firmato. Infatti, il titolare del certificato potrebbe trovarsi in una condizione diversa rispetto a quella in cui si trovava nel momento del rilascio del certificato, e i dati in esso contenuti potrebbero non corrispondere più; dall'altra parte, l'autorità di certificazione potrebbe avere verificato un utilizzo irregolare del certificato e di conseguenza potrebbe decidere il suo ritiro.
Evidentemente, per ottenere questo risultato, occorre che l'autorità che ha rilasciato dei certificati, gestisca anche una base di dati in cui siano indicati quelli che sono stati revocati, identificabili attraverso il loro numero di serie, che quindi è un altro elemento indispensabile di un certificato. A questo punto, quando si vuole verificare un certificato, oltre a controllare la scadenza e la validità della firma dell'autorità di certificazione, occorre controllare presso la base di dati di questa che il certificato non sia già stato revocato.
Il meccanismo della revoca o del non-rinnovo dei certificati, serve anche a dare credibilità a una catena di autorità di certificazione: un anello debole della catena -- debole in quanto poco serio -- metterebbe in dubbio tutto il sistema, e sarebbe nell'interesse di tutte le altre autorità la sua eliminazione. Si intende che l'azione necessaria per ottenere questo risultato è la semplice pubblicazione della revoca del certificato da parte dell'autorità di livello superiore, oppure il suo mancato rinnovo.
Un tipo di certificato importante è quello definito dallo standard X.509. Questo certificato serve ad abbinare un nome distintivo (conosciuto come Distinguished Name, ovvero l'acronimo DN) a una chiave pubblica. Questo nome distintivo è in pratica una raccolta di informazioni su una certa persona in un certo contesto. Gli elementi di queste informazioni sono visti come l'assegnamento di valori ad altrettante variabili; anche se non sono utilizzate sempre tutte, è importante tenere conto di questo fatto, ricordando le più importanti, per poter interpretare correttamente le richieste dei programmi che utilizzano questo standard.
Campo | Descrizione |
UID | Nominativo. |
CN | Nome comune, o Common Name. |
O | Organizzazione. |
OU | Dipartimento all'interno dell'organizzazione. |
C | Sigla del paese (nazione). |
ST | Regione o provincia. |
L | Località. |
Tabella 233.1. Alcuni campi tipici di un nome distintivo nei certificati X.509.
Le regole per stabilire esattamente quali campi devono essere usati e cosa devono contenere, dipende dalla politica dell'autorità che deve firmare il certificato. In particolare, il campo CN, a cui corrisponde la definizione Common Name, è l'elemento più vago. Spesso, quando il certificato riguarda la gestione di un servizio, contiene il nome di dominio completo dell'elaboratore dal quale questo viene offerto.
Le informazioni di un certificato X.509 tipico sono organizzate in due parti: la sezione dati e la sezione della firma elettronica. La sezione dati contiene in particolare:
la versione dello standard X.509 a cui fa riferimento il certificato;
il numero di serie assegnato dall'autorità di certificazione;
il periodo di validità del certificato;
il nome distintivo (DN) del titolare della certificato (subject);
la chiave pubblica del titolare del certificato;
altre informazioni che rappresentano un'estensione dello standard.
La sezione della firma elettronica contiene in pratica la firma fatta dall'autorità di certificazione, ed è in questa parte che potrebbero apparire le informazioni necessarie ad acquisire il certificato dell'autorità stessa. A titolo di esempio si può vedere come può apparire un certificato del genere, quando questo viene tradotto in forma leggibile (la chiave pubblica e la firma sono abbreviate):
Certificate: Data: Version: 1 (0x0) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=IT, ST=Italia, L=Milano, O=SuperCA, CN=super.ca.dg... Validity Not Before: Dec 11 19:39:32 1999 GMT Not After : Jan 10 19:39:32 2000 GMT Subject: C=IT, ST=Italia, L=Tiziopoli, O=Dinkel, CN=dinkel.brot.dg... Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:f2:c2:7a:4b:11:c0:64:b8:63:9d:fd:7f:b1:b7: 1f:55:c1:b7:1a:9b:dc:5f:bc:d8:a8:ad:cb:90:17: ... a2:7c:f9:be:92:be:1f:7e:9e:27:0e:87:d0:74:22: fd:cd:7e:47:4a:b3:12:56:fd Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 71:88:37:bb:f0:5e:6e:82:fa:90:87:4f:bb:b6:06:a3:da:6a: 86:b7:78:8d:a6:49:c2:e1:24:2d:37:ae:70:92:b7:68:49:14: ... 39:22:3b:41:46:d9:36:3a:85:d0:b2:d3:0d:d0:82:54:00:8e: 38:b7:fa:52:09:d3:14:ea:18:c2:d5:5b:88:ef:05:18:1e:bd: c1:4e
È interessante osservare le righe che descrivono l'autorità garante che emette il certificato (Issuer) e il titolare (Subject). Ognuna di queste due righe rappresenta rispettivamente il nome distintivo dell'autorità e del titolare; si può vedere in che modo sono indicati i vari elementi di questa informazione (i puntini di sospensione finali sono stati aggiunti perché la riga sarebbe più lunga, con altre informazioni):
C=IT, ST=Italia, L=Tiziopoli, O=Dinkel-Brot, CN=dinkel.brot.dg...
La forma è quella dell'assegnamento di variabili, alcune delle quali sono state elencate nella tabella 233.1. La scelta delle variabili da indicare (da assegnare) dipende dall'autorità e dal contesto per il quale viene rilasciato il certificato.
Il certificato è realizzato normalmente in formato PEM (utilizza solo l'ASCII a sette bit) e il file che lo rappresenta in pratica potrebbe apparire in un modo simile a quello seguente, che qui viene mostrato in forma abbreviata:
-----BEGIN CERTIFICATE----- MIICeTCCAeICAQAwDQYJKoZIhvcNAQEEBQAwgYQxCzAJBgNVBAYTAklUMQ8wDQYD VQQIEwZJdGFsaWExEDAOBgNVBAcTB1RyZXZpc28xFDASBgNVBAoTC0RpbmtlbC1C ... t3iNpknC4SQtN65wkrdoSRQb88RpFYCkpISCbutfU4lZ+8XV7ASOJcHOrqqR65PZ AeP4kVAFLnG+HTGlqHtReWszL6y75c45IjtBRtk2OoXQstMN0IJUAI44t/pSCdMU 6hjC1VuI7wUYHr3BTg== -----END CERTIFICATE-----
Per ottenere un certificato da un'autorità, utilizzando lo standard X.509, si parte dalla creazione di una richiesta di certificato, che in pratica è un certificato che ha già tutte le informazioni, tranne la firma del garante, ed è firmato direttamente dal richiedente. L'esempio seguente potrebbe essere la richiesta di certificato corrispondente all'esempio già visto in precedenza; anche in questo caso si abbreviano la chiave pubblica e la firma:
Certificate Request: Data: Version: 0 (0x0) Subject: C=IT, ST=Italia, L=Tiziopoli, O=Dinkel, CN=dinkel.brot.dg... Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:f2:c2:7a:4b:11:c0:64:b8:63:9d:fd:7f:b1:b7: 1f:55:c1:b7:1a:9b:dc:5f:bc:d8:a8:ad:cb:90:17: ... a2:7c:f9:be:92:be:1f:7e:9e:27:0e:87:d0:74:22: fd:cd:7e:47:4a:b3:12:56:fd Exponent: 65537 (0x10001) Attributes: challengePassword :ciao-ciao unstructuredName :Dinkel Signature Algorithm: md5WithRSAEncryption 09:eb:da:65:21:d1:67:65:ec:c3:f7:07:7b:82:fb:3f:d3:9f: ed:89:bc:be:38:bd:97:1c:15:f0:2b:2f:ef:6b:1e:00:57:47: ... e7:70:9c:93:30:f1:aa:93:42:37:dc:32:e0:85:50:d9:ed:0e: f7:8e
Anche la richiesta di certificato è realizzato normalmente in formato PEM; il file che lo rappresenta in pratica potrebbe apparire in un modo simile a quello seguente, che qui viene mostrato in forma abbreviata:
-----BEGIN CERTIFICATE REQUEST----- MIIB/TCCAWYCAQAwgYIxCzAJBgNVBAYTAklUMQ8wDQYDVQQIEwZJdGFsaWExEDAO BgNVBAcTB1ZlbmV6aWExFDASBgNVBAoTC01BUkFNQU8tTUFIMRkwFwYDVQQDFBBj ... YwJNRXTBdL7J/K+LVYFnnxbu6Z4vyDvqcCxD0hWE3VSkXQ2RHHW3sN1oMbtVfjS7 NMe5qq5noKkraMhq3edwnJMw8aqTQjfcMuCFUNntDveO -----END CERTIFICATE REQUEST-----
L'autorità di certificazione che ha la necessità di pubblicare i certificati che vengono revocati prima della loro scadenza naturale, lo fa attraverso la pubblicazione di un elenco dei certificati revocati, ovvero di ciò che è conosciuto con la sigla CRL (Certificate Revocation List). Questo elenco è firmato dall'autorità di certificazione che lo pubblica, pertanto si tratta di un tipo di certificato speciale. Nello standard X.509, questo elenco potrebbe apparire come si vede nell'esempio seguente, in cui si vedono due certificati revocati:
Certificate Revocation List (CRL): Version 1 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: /C=IT/ST=Italia/L=Milano/O=SuperCA/CN=super.ca.dg Last Update: Jan 15 20:35:52 2000 GMT Next Update: Feb 14 20:35:52 2000 GMT Revoked Certificates: Serial Number: 01 Revocation Date: Jan 13 19:28:40 2000 GMT Serial Number: 02 Revocation Date: Jan 13 19:28:40 2000 GMT Signature Algorithm: md5WithRSAEncryption 32:e1:97:92:96:2f:0c:e4:df:bb:9c:82:a5:e3:5b:51:69:f5: 51:ad:1b:b2:98:eb:35:a6:c8:7f:d9:29:1f:b2:1e:cc:da:84: ... 31:27:4a:21:4c:7a:bc:85:73:cd:ff:15:9d:cb:81:b3:0b:82: 73:50
Osservando l'elenco si vede che il riferimento ai certificati è fatto solo attraverso il numero di serie, stando a indicare che i certificati firmati da questa autorità, con questi numeri di serie, sono revocati a partire dalle date indicate.
Introduction to Public-Key Cryptography
<http://developer.netscape.com/docs/manuals/security/pkin/index.htm>
Kille S., RFC 1779, A String Representation of Distinguished Names, 1995