Norme di Android relative a Certificate Transparency

Invia eventuali domande relative a queste norme al forum sulle norme CT: ct-policy@chromium.org

Quando il certificato TLS (Transport Layer Security) di una connessione viene convalidato in un'app che accetta la trasparenza dei certificati, viene valutata la conformità ai criteri di trasparenza dei certificati (CT) di Android. I certificati accompagnati da Signed Certificate Timestamp (SCT) che soddisfano queste norme sono considerati conformi a CT.

La conformità CT viene raggiunta da un certificato e da un insieme di SCT di accompagnamento che soddisfano un insieme di requisiti tecnici applicati dalle librerie TLS più diffuse (inclusa Conscrypt integrata) durante la convalida dei certificati, che sono definiti in queste norme.

Stati dei log CT

La conformità CT in Android è determinata valutando gli SCT dei log CT e assicurandosi che questi log si trovino nello stato o negli stati corretti al momento del controllo. L'insieme dei possibili stati in cui può trovarsi un log CT è:

  • Pending
  • Qualified
  • Usable
  • ReadOnly
  • Retired
  • Rejected

Per comprendere meglio i requisiti di conformità CT in Android, la definizione di questi stati, i requisiti dei log in ogni stato, nonché l'impatto di questi stati sul comportamento di Android sono descritti in dettaglio nella spiegazione del ciclo di vita dei log CT della documentazione di Chrome.

Certificati conformi a CT

Un certificato TLS è conforme a CT se è accompagnato da un insieme di SCT che soddisfa almeno uno dei criteri definiti in seguito, a seconda di come gli SCT vengono forniti ad Android. Nelle app di Android che applicano CT, tutti i certificati TLS attendibili pubblicamente devono essere conformi a CT per essere convalidati correttamente. Tuttavia, i certificati che non sono registrati in CT o che hanno SCT insufficienti non sono considerati emessi in modo errato.

Quando valuta la conformità CT di un certificato, Android prende in considerazione diversi fattori, tra cui il numero di SCT presenti, chi gestisce il log CT che ha emesso l'SCT e lo stato del log CT che ha emesso l'SCT, sia al momento della convalida del certificato sia al momento della creazione dell'SCT da parte del log CT.

A seconda di come vengono presentate le SCT ad Android, la conformità CT può essere ottenuta soddisfacendo uno dei seguenti criteri:

SCT incorporati:

  1. Almeno un SCT incorporato da un log di CT che era Qualified, Usable o ReadOnly al momento del controllo; e
  2. Sono presenti SCT incorporate di almeno N log CT distinti che erano Qualified, Usable, ReadOnly o Retired al momento del controllo, dove N è definito nella tabella seguente; e
  3. Tra i SCT che soddisfano il requisito 2, almeno due devono essere emessi da operatori di log CT distinti riconosciuti da Android; e
  4. Tra le SCT che soddisfano il requisito 2, almeno una deve essere emessa da un log riconosciuto da Android come conforme alla RFC 6962.
Durata del certificato Numero di SCT provenienti da log CT distinti
<= 180 giorni 2
> 180 giorni 3

SCT forniti tramite OCSP o TLS:

  1. Almeno due SCT di un log CT che era Qualified, Usable o ReadOnly al momento del controllo; e
  2. Tra i SCT che soddisfano il requisito 1, almeno due devono essere emessi da operatori di log CT distinti riconosciuti da Android; e
  3. Tra i SCT che soddisfano il requisito 1, almeno uno deve essere emesso da un log CT riconosciuto da Android come conforme a RFC6962.

Per gli SCT incorporati e quelli forniti tramite OCSP o TLS, l'unicità dell'operatore del log è definita dalla presenza di voci separate nella sezione degli operatori dell'elenco dei log.

Nella rara situazione in cui un log CT cambia operatore durante il suo ciclo di vita, i log CT contengono facoltativamente un elenco di previous_operators, accompagnato dal timestamp finale in cui questo log è stato gestito dall'operatore precedente. Per evitare che le modifiche all'operatore del log interrompano i certificati esistenti, l'operatore del log di ogni SCT viene determinato in base all'operatore al momento dell'emissione dell'SCT, confrontando il timestamp dell'SCT con i timestamp previous_operators, se presenti.

Note importanti

Se uno dei criteri di conformità CT precedenti è soddisfatto da una combinazione di SCT presentati nell'handshake, gli SCT aggiuntivi, indipendentemente dal loro stato, non influiranno positivamente o negativamente sullo stato di conformità CT di un certificato.

Per contribuire alla conformità CT di un certificato, un SCT deve essere stato emesso prima del timestamp Retired del log, se esistente. Android utilizza il primo SCT tra tutti gli SCT presentati per valutare la conformità del CT rispetto ai timestamp del log CT Retired. Ciò tiene conto dei casi limite in cui un log CT viene ritirato durante la procedura di invio delle richieste di registrazione dei certificati.

"SCT incorporato" indica un SCT fornito utilizzando l'estensione X.509v3 SignedCertificateTimestampList all'interno del certificato stesso. Molti server TLS non supportano l'OCSP Stapling o l'estensione TLS, pertanto le CA devono essere pronte a incorporare gli SCT nei certificati emessi per garantire la convalida o il trattamento EV riuscito in Android.

Come vengono aggiunti i log CT ad Android

I criteri in base ai quali i log CT possono diventare Qualified, nonché le circostanze che possono farli diventare Retired, sono disponibili nei criteri per i log CT di Chrome.

Timeout applicazione CT

Ogni giorno, Google pubblica un nuovo elenco di log CT che contiene un nuovo log_list_timestamp. Una volta al giorno, i dispositivi Android tenteranno di scaricare l'ultima versione di questo elenco a scopo di verifica. In qualsiasi momento, se non è disponibile alcun elenco di log sul dispositivo o se il timestamp dell'elenco di log è precedente a 70 giorni, l'applicazione del CT verrà disattivata. Questo timeout fornisce una garanzia fondamentale all'ecosistema CT che i nuovi log CT possono passare in modo sicuro a Usable entro un periodo di tempo fisso dopo essere diventati Qualified.

Elenco dei log di Android

L'elenco dei log Android viene pubblicato in log_list.json, che viene aggiornato quotidianamente. Questo elenco di log viene offerto senza API stabile, SLA o garanzie di disponibilità.

Android rende disponibile il proprio elenco di log CT per i mittenti di certificati (ad esempio le autorità di certificazione) e per i monitor e gli auditor CT che vogliono rimanere compatibili con gli ecosistemi CT e WebPKI o esaminarne i contenuti.

L'affidamento non autorizzato all'elenco dei log CT di Android mette in pericolo non solo i tuoi utenti, ma anche gli utenti Android e l'ecosistema CT nel suo complesso. Se stai valutando di aggiungere l'applicazione CT nella tua app, utilizza un meccanismo supportato dalla piattaforma Android.

L'utilizzo dell'elenco dei log CT di Android in modo non conforme a queste norme è a tuo rischio e potrebbe causare l'interruzione del funzionamento dell'applicazione o della libreria. Android deve essere in grado di apportare modifiche all'elenco dei log CT in risposta agli incidenti nell'ecosistema CT per mantenere la sicurezza degli utenti Android. Android potrebbe adottare misure per garantire che le dipendenze di terze parti dall'elenco dei log CT non mettano a rischio la capacità di Android di rispondere a questi incidenti, inclusi cambiamenti non annunciati all'elenco dei log per interrompere l'utilizzo non autorizzato.