it-swarm-eu.dev

Puoi firmare usando un certificato digitale stesso?

Googling Ho visto diverse lezioni dire che è possibile firmare usando certificati digitali. Sono confuso al riguardo, perché secondo le mie conoscenze è possibile firmare solo utilizzando la chiave privata, dove vengono utilizzati i certificati digitali durante il processo di firma?

29
juaninf

Solo una questione di linguaggio impreciso che dovrebbe essere compreso da tutti i soggetti coinvolti.

Firmi usando la chiave privata che solo tu possiedi. La chiave pubblica non viene utilizzata e il certificato non viene utilizzato. In effetti, forse non esiste un certificato che utilizza la chiave pubblica. Il verificatore verifica la firma utilizzando la chiave pubblica, il certificato non viene utilizzato. Ma la chiave pubblica è solo un numero (o due numeri). È scomodo gestire i numeri nudi. Molto spesso la chiave pubblica viene portata in giro con alcuni metadati che indicano a cosa serve la chiave pubblica. Questo è un certificato.

Forse dice semplicemente "chiave pubblica di juaninf" ed è autofirmato (ha una firma allegata fatta usando la chiave privata corrispondente alla chiave pubblica di se stesso).

Forse al lavoro ha una nota firmata dal tuo capo che dice "Questa è la chiave pubblica di juaninf, l'ho assunto per lavorare per me il 23-06-2019, sono il direttore del dipartimento D della società C, ecco un firma del CEO della società C che attesta questo fatto ". E le porte automatiche dell'edificio possono provarlo. E la tua chiave privata si trova in una smart card non clonabile.

Se fai clic sul lucchetto accanto all'URL nel tuo browser, puoi vedere il certificato TLS per il sito. Nel certificato è possibile visualizzare la chiave pubblica. Puoi vedere il certificato, quindi hai il certificato. Ma non hai la chiave privata corrispondente. Quindi non è possibile creare una nuova firma per la chiave pubblica nel certificato. Quindi non puoi fare attacchi MitM su altri visitatori del sito. Per eseguire attacchi MitM, è necessario disporre della chiave privata corrispondente alla chiave pubblica nel certificato per firmare i messaggi di scambio di chiavi DH (o decrittografare segreti crittografati in configurazioni obsolete di TLS).

A volte è importante essere precisi quando si dice "Ho il certificato" o "Ho il certificato e la chiave privata". Ma spesso è ovvio dal contesto ciò che è necessario.

49
Z.T.

Una cosa può essere aggiunta alla risposta di Z.T .: la confusione è probabilmente causata dall'implementazione della crittografia in Microsoft Windows (forse anche in altri sistemi).

Nell'interfaccia utente amministrativa, entrambi i certificati e le relative chiavi private sono gestiti tramite lo snap-in "Certificati" della console di gestione.

In .NET framework la classe X509Certificate2, utilizzato per rappresentare un certificato digitale, ha le proprietà HasPrivateKey e PrivateKey. La documentazione per quest'ultimo dice "Ottiene o imposta l'oggetto AsymmetricAlgorithm che rappresenta la chiave privata associata a un certificato". Tuttavia, poiché la convenzione comune prevede che un campo rappresenti qualcosa che appartiene all'oggetto, è probabile che lo sviluppatore presuma che la chiave privata faccia parte del certificato, non solo qualcosa ad esso correlato.

Infine, le chiavi private come file vengono raramente gestite da sole, ma in genere vengono impacchettate insieme a chiavi pubbliche e certificati in file .pfx. Questi file potrebbero essere chiamati "contenitori crittografici", o qualcosa del genere, ma quando li apri, il titolo dell'applicazione è "Importazione guidata certificati", quindi le persone li chiamano semplicemente "certificati".

Tutto ciò fornisce allo sviluppatore un quadro mentale del certificato come entità contenente sia le chiavi pubbliche che (a volte) private. Apparentemente, questo è tecnicamente sbagliato: i certificati sono associati solo alle chiavi ma non le contengono. Tuttavia, devo ammettere che ho sviluppato applicazioni .NET usando la crittografia digitale e la firma per un paio di anni, e oggi è la prima volta che apprendo che la mia comprensione del termine "Certificato" non è corretta. Né sono mai stato corretto quando ho parlato dell'utilizzo dei certificati per firmare/decrittografare qualcosa nelle riunioni con altri sviluppatori.

10
IMil