Chiavi pubbliche senza i certificati

4

Ci sono due client e un server. Ogni client genera una coppia di chiavi RSA e carica la chiave pubblica sul server. Il server associa la chiave pubblica all'identificatore utente specificato durante il caricamento.

Quindi il client A deve condividere i dati con il client B. Richiede al server la chiave pubblica del client B. L'impronta digitale della chiave pubblica viene presentata all'utente per la verifica visiva. È responsabilità dell'utente A decidere se si fida della chiave pubblica dell'utente B e viceversa.

Dopo che entrambi gli utenti si fidano delle chiavi pubbliche, possono crittografare i dati l'uno per l'altro. Il client A crittografa i dati con la chiave pubblica del client B, li carica sul server. Il client B scarica i dati e li decodifica.

I client comunicano con il server utilizzando TLS implementato dal sistema operativo. Il server autentica i client utilizzando OAuth2 con token MAC.

Anche se la domanda più importante è, ovviamente, se questo sistema da questa prospettiva ha già alcuni problemi di sicurezza, la domanda di questo post riguarda i certificati.

In una situazione del genere, quando l'obiettivo più alto è quello di fornire la crittografia end-to-end, e una delle decisioni è far sì che gli utenti verifichino le rispettive chiavi pubbliche, c'è qualche vantaggio di avere certificati autofirmati in Oltre alle sole chiavi pubbliche?

Si dice, ad esempio, che il certificato autofirmato garantisce che qualcuno che lo ha generato abbia anche la chiave privata corrispondente. Quando non sono coinvolti certificati, esiste un rischio per la sicurezza del client A che crittografa qualcosa con ciò che pensa sia una chiave pubblica del client B, ma in realtà non è una chiave pubblica?

    
posta eofster 27.03.2014 - 09:38
fonte

1 risposta

6

In generale, i certificati autofirmati non offrono alcun vantaggio di sicurezza sulle chiavi pubbliche non formattate (possono esserci situazioni contorte in cui l'auto-firma fornisce una "prova di possesso" della corrispondente chiave privata, ma questo molto raramente ha importanza). I certificati autofirmati possono offrire un vantaggio di usabilità , in quanto consentono l'uso di software basato su certificati.

Ad esempio, nei sistemi Windows, le chiavi private vengono comunemente referenziate attraverso il certificato corrispondente: l'utente ha alcuni certificati in un "archivio certificati" e ciascuno di tali certificati può fare riferimento alla chiave privata corrispondente. Se desideri utilizzare il formato CMS per le firme, con la classe .NET System.Security.Cryptography.Pkcs.SignedCms , devi firmare con " un certificato ", quindi deve essere usato qualcosa che assomiglia a un certificato X.509 originale.

Ciò significa in gran parte riutilizzare il formato di codifica del certificato (X.509) per l'archiviazione delle chiavi pubbliche. Convenientemente, un tale formato include nomi leggibili dall'uomo e date di validità; La GUI fornita dal sistema operativo può anche essere utilizzata per visualizzare il certificato "identificazione personale", ovvero un hash del certificato (che può essere utilizzato come una sorta di hash della chiave pubblica). Meno convenientemente, il formato X.509 include un campo non facoltativo per una firma, quindi deve esserci una sequenza di byte che, almeno superficialmente, assomiglia a una firma: l'abitudine di usare le auto-firme viene da quello. Tuttavia, potresti anche memorizzare una sequenza di byte casuali di circa la giusta dimensione, ma funzionerebbe anche.

    
risposta data 27.03.2014 - 13:46
fonte

Leggi altre domande sui tag