Non è lo stesso che usare un'autorità di certificazione?

3

Tratto da Wikipedia , ecco il pretesto alla mia domanda:

A certificate authority (CA) is an organization that stores public keys and their owners and every party in a communication trusts this organization (and knows its public key). When the user's web browser receives the public key from www.bank.example it also receives a digital signature of the key (with some more information, in a so-called X.509 certificate). The browser already possesses the public key of the CA and consequently can verify the signature, trust the certificate and the public key in it: since www.bank.example uses a public key that the certification authority certifies, a fake www.bank.example can only use the same public key. Since the fake www.bank.example does not know the corresponding private key, it cannot create the signature needed to verify its authenticity.

Ho capito che le autorità di certificazione aiutano a contrastare gli attacchi man-in-the-middle, ma non capisco il motivo di spendere soldi per usare il certificato di un'autorità di certificazione se i browser eseguono semplicemente l'hardcode delle chiavi pubbliche della CA per convalidarlo al di fuori di HTTPS comunicazioni che sembrano essere in qualche modo dipendenti dal browser perché ... supponendo che io usi la crittografia RSA con il padding SHA1 e OAEP sul mio server, non è altrettanto sicuro se io :

  • Genera una coppia di chiavi privata e pubblica secondaria
  • Mantieni segreto la chiave secondaria, scrivila da qualche parte e bloccala all'interno di un deposito
  • Firma sempre la chiave pubblica primaria del mio server con la chiave privata secondaria
  • Hardcode la chiave pubblica secondaria nelle mie applicazioni client
  • Utilizza la mia chiave pubblica secondaria per verificare se il server è il server che dicono di essere controllando che la chiave pubblica che mi hanno emesso sia firmata con la mia chiave privata secondaria?

Sto pensando di usare questo modello su un server socket TCP in cui posso specificare il mio protocollo ed essenzialmente essere il mio "browser" ...

Essenzialmente, è tutto questo dietro a una CA? E 'piuttosto triste ... sembra onestamente come una truffa in denaro quando puoi diventare la tua CA. Voglio dire, se la CA è compromessa, i browser devono essere riparati, le chiavi riemesse, ecc. Se la mia applicazione client viene compromessa, non devo aspettare che il buco sia chiuso, posso spingere rapidamente un nuovo pubblico / privato coppia di chiavi e invia la chiave pubblica della mia pseudo-CA alle applicazioni client.

    
posta Alexandru 04.07.2014 - 01:58
fonte

2 risposte

4

Quello che stai descrivendo si chiama blocco del certificato; in sostanza, si ignora l'intero processo di CA e basta dare all'applicazione un certificato di fiducia. In realtà è largamente raccomandato per applicazioni non di browser (ad esempio, app mobili) per il motivo esatto che hai dichiarato: se ti affidi a una CA e questa si interrompe, sei in grossi guai, mentre è relativamente facile risolverlo rapidamente con blocco del certificato premendo un nuovo certificato. O meglio ancora, puoi avere due certificati nella tua app, e ruotarli se uno scende, quindi spingere un nuovo certificato nel prossimo aggiornamento.

Ovviamente, i produttori di browser Web non possono accumulare e verificare una collezione di certificati di tutti, quindi scelgono di fidarsi di alcuni server centralizzati che poi verificano tutti gli altri, e questo è per lo più riuscito a tenere gli utenti fuori dai guai. Ecco perché esiste il sistema CA.

Dovrei chiarire che ti stai ancora fidando di una terza parte - è solo una terza parte diversa che non ti addebita il privilegio. Ad esempio, se stiamo parlando di un'app per iOS, l'app è firmata dall'App Store. Questo è ciò che impedisce a un utente malintenzionato di scambiare il tuo certificato hard-coded con un altro certificato.

    
risposta data 04.07.2014 - 02:28
fonte
2

Ciò che intendi fare firmando la tua chiave primaria con una chiave secondaria è essenzialmente l'utilizzo della tua CA. In teoria, una CA è una terza parte fidata dal partecipante che cerca di verificare l'identità della sua parte di comunicazione per verificare in modo affidabile questa identità. In pratica, nel contesto web questa decisione che le CA sono affidabili non viene effettuata dall'utente stesso ma dal venditore del browser che include il certificato di origine CA (anche se alcuni utenti prendono le proprie decisioni modificando questo elenco predefinito). Nella tua configurazione, controlli quali sono gli emittenti affidabili, perché controlli il tuo software degli utenti finali. Non hai nemmeno bisogno di un altro protocollo, puoi semplicemente usare i certificati x509 e configurare che solo la tua CA sia attendibile.

    
risposta data 04.07.2014 - 07:45
fonte