it-swarm.dev

Cosa significa "firmare" un certificato digitale?

Quando qualcuno dice che un particolare certificato digitale (come un certificato SSL) è stato "firmato con una chiave", cosa implica? Ciò significa che il certificato include semplicemente una chiave che dovrebbe essere utilizzata per ulteriori scambi di messaggi? Ciò significa che il certificato stesso è crittografato e può essere decrittografato solo con quella chiave? Implica qualcos'altro? Grazie in anticipo.

25
zharvey

Idealmente, significa che qualcuno ha esaminato il certificato e ha deciso che è corretto e legittimo. Una volta che lo hanno fatto, vogliono dire alla gente "Ehi, ho verificato che questo certificato è buono. Io mi fido di esso". Per fare ciò, usano la loro chiave di firma per firmare il certificato.

Ora, quando qualcuno ottiene il certificato, può vedere chi ha firmato il certificato. Se si fidano di uno dei firmatari, possono fidarsi del certificato stesso. Questa è la base di Web Of Trust in PKI .

La firma effettivamente dipende probabilmente dal tipo di certificato. Penso questa è una lettura utile .

Un certificato digitale è costituito da tre cose:

  • Una chiave pubblica.
  • Informazioni sul certificato. (Informazioni "Identità" sull'utente, come nome, ID utente e così via.)
  • Una o più firme digitali.

In genere la parte "una delle più firme digitali" viene eseguita elencando un set di hash crittografati del certificato. Pertanto, quando si desidera firmare un certificato, è necessario calcolare l'hash del certificato, crittografarlo utilizzando la chiave di firma privata e aggiungerlo all'elenco delle firme digitali.

23
Oleksi

Ecco la struttura di un certificato X.509 :

    Certificate  ::=  SEQUENCE  {
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

   TBSCertificate  ::=  SEQUENCE  {
        version         [0]  EXPLICIT Version DEFAULT v1,
        serialNumber         CertificateSerialNumber,
        signature            AlgorithmIdentifier,
        issuer               Name,
        validity             Validity,
        subject              Name,
        subjectPublicKeyInfo SubjectPublicKeyInfo,
        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        extensions      [3]  EXPLICIT Extensions OPTIONAL
                             -- If present, version MUST be v3
        }

I dati contenuti nel certificato stesso sono la parte TBSCertificate: lega la chiave pubblica (subjectPublicKeyInfo) a un identificatore (soggetto) e a varie altre estensioni di attributi).

Questo viene quindi combinato con la firma per formare una struttura Certificate. L'algoritmo della firma determina come farlo.

In sostanza, viene calcolato un digest di TBSCertificate (in genere SHA-1) e quindi firmato con la chiave privata del firmatario (l'emittente in termini X.509). La minima modifica del contenuto TBSCertificate dovrebbe comportare la modifica del digest, che a sua volta dovrebbe invalidare la firma.

Usando le chiavi RSA, la firma del digest usando la chiave privata è matematicamente molto simile a ciò che verrebbe fatto per la crittografia usando la chiave pubblica. Questo non è lo stesso concettualmente, però, e DSA non ha quella reciprocità, per esempio.

Il principio è lo stesso per altri tipi di certificati, sebbene la struttura possa differire. Considerando che le chiavi pubbliche PGP sono in realtà certificati, potresti essere interessato anche a queste domande:

9
Bruno

Quando qualcuno dice che un particolare certificato digitale (come un certificato SSL) è stato "firmato con una chiave", cosa implica?

Implica che l'entità proprietaria di tale chiave abbia garantito l'accuratezza delle informazioni nel certificato e abbia allegato informazioni al certificato che consente di verificare tale certificato.

Ciò significa che il certificato include semplicemente una chiave che dovrebbe essere utilizzata per ulteriori scambi di messaggi?

No. I certificati attestano solo l'identità.

Ciò significa che il certificato stesso è crittografato e può essere decrittografato solo con quella chiave?

No. Non c'è motivo di crittografare i certificati, contengono solo informazioni pubbliche.

Implica qualcos'altro?

Implica che il proprietario di quella chiave abbia garantito le informazioni nel certificato. Per un tipico certificato SSL, le informazioni nel certificato sono un'associazione tra una chiave pubblica e un nome comune.

Ad esempio, quando si punta il browser su https://www.Amazon.com/ Il server di Amazon ti invierà un certificato. Questo certificato associa una particolare chiave pubblica al nome www.Amazon.com. Il tuo browser conferma tre cose per sapere che sta parlando con la vera Amazon:

  1. Il server ha presentato un certificato valido e firmato da una chiave di fiducia.

  2. Il certificato lega l'identità "www.Amazon.com".

  3. Il server dimostra di possedere la chiave privata corrispondente al certificato.

Quindi lo scopo della firma del certificato è di mettere la credibilità dell'agente di firma dietro le informazioni nel certificato che è fondamentalmente "questo ragazzo possiede questa chiave".

6
David Schwartz