Come vengono utilizzati i certificati X509 per la crittografia

11

Ho pochi dubbi riguardo al processo di X509. Sono a conoscenza di OpenPGP Encryption / Decryption, in cui generiamo la chiave pubblica e la chiave privata. Possiamo condividere la chiave pubblica per i fornitori e possono crittografare i dati con la chiave e possiamo decifrare i dati utilizzando la chiave privata. È semplice e diretto per me.

Quando si parla di X509, sono un po 'confuso. Il mio cliente desidera utilizzare il certificato X509 per trasferire informazioni sensibili [che è già crittografato utilizzando la crittografia simmetrica come AES] tra due persone [tra il cliente ei suoi fornitori]. Come funziona X509 se possiamo generare il certificato usando solo la chiave pubblica.

Supponiamo, se crittografo i dati utilizzando AES con una chiave generata casualmente. Come faccio a trasferire questi dati insieme alla chiave del venditore utilizzando X509 in modo che terze parti non possano intercettarlo durante la trasmissione della rete.

Qualcuno potrebbe spiegarlo? A proposito, trasferiamo i dati nel messaggio SOAP includendo informazioni sul certificato

    
posta Nitin Gurram 19.02.2013 - 14:22
fonte

2 risposte

22

X.509 è un formato per certificati : un certificato è una sequenza di byte che contiene, in un formato specifico, un nome e una chiave pubblica , su cui un firma digitale è calcolata e incorporata nel certificato. Il firmatario è una Autorità di certificazione che afferma che la chiave pubblica è effettivamente posseduta dall'entità conosciuta sotto quel nome. Verificando la firma, è possibile accertarsi che il certificato sia autentico, cioè è ciò che ha emesso la CA; e, in questo modo, ottieni fiducia nell'associazione del nome con la chiave pubblica (nella misura in cui credi che la CA sia onesta e non troppo credulona, e come sai la chiave CA per la verifica della firma, che può comportare l'ottenimento di un certificato per la CA, e verificando tale certificato, e così via, fino ad un trust anchor alias certificato radice ).

Quindi, X.509 è un modo per distribuire le chiavi pubbliche , con cui intendo: un metodo che consente a vari attori (ad es. tu) di sapere, con una certa garanzia di non alterazione da parte di terzi malevoli parti (cioè "attaccanti") le chiavi pubbliche di altri attori.

OpenPGP è un formato standard per molte cose. Una delle cose che OpenPGP definisce è un modo per codificare una chiave pubblica insieme a un "nome" (un indirizzo email) e una firma su questi due. Questo è, in realtà, un certificato a sé stante (anche se con un formato che non è compatibile con X.509). Ma OpenPGP definisce anche come usare la chiave pubblica di un dato individuo (chiamiamolo Butch) per cifrare un mucchio di byte che solo Butch, usando la sua chiave privata , sarà in grado di decifrare. Tecnicamente, questo utilizza una chiave di sessione generata a caso, utilizzata con AES (o simile) per crittografare i dati non elaborati e quella chiave di sessione è ciò che è crittografato con la chiave pubblica del destinatario (generalmente di tipo RSA o ElGamal).

Pertanto, per il tuo problema, non vuoi "criptare con X.509". X.509 non definisce nulla sulla crittografia. Ciò che desideri è di utilizzare un formato standard che descrive la crittografia con la chiave pubblica del destinatario e si basa sui certificati X.509 per la distribuzione della chiave pubblica. Questo formato standard, abbinato a X.509, sarebbe analogo a OpenPGP. Questo formato standard esiste e si chiama CMS (precedentemente noto come "PKCS # 7"). Quando gli oggetti CMS vengono inviati tramite e-mail, questo diventa un altro livello dello standard, che è chiamato S / MIME .

CMS (o S / MIME) è ciò che serve per la comunicazione asincrona: si prepara un blob, da inviare in seguito al destinatario, come quello che si fa con OpenPGP. Se riesci a creare una comunicazione sincrona (mittente e destinatario sono "online" contemporaneamente), puoi utilizzare SSL / TLS (o la sua controparte Web HTTPS ). In SSL, il server ha una chiave pubblica, che invia al client come certificato X.509. Il client convalida il certificato, quindi utilizza la chiave pubblica in esso contenuta per stabilire una chiave di sessione con il server e crittografare i dati con quella chiave di sessione.

In ogni caso, l'assemblaggio degli algoritmi crittografici nei protocolli è noto per essere difficile da eseguire correttamente, quasi impossibile da testare per la sicurezza e pieno di pericoli. Quindi non immaginare di poter costruire il tuo mix; dovresti davvero fare affidamento su uno standard esistente, come CMS o SSL.

    
risposta data 19.02.2013 - 14:43
fonte
1

Un certificato X509 è un metodo di scambio di chiavi pubbliche. Sembra che il venditore voglia probabilmente continuare a crittografare AES e quindi crittografare la chiave AES con la propria chiave pubblica in modo da poter trasmettere la chiave AES senza che sia suscettibile di essere intercettata. Di gran lunga gli usi più comuni della crittografia asimmetrica (chiave pubblica / privata) sono la firma e lo scambio di chiavi simmetriche.

La mia preoccupazione principale è che tu menzioni che stai ricevendo il certificato in una richiesta SOAP che mi fa dubitare di come si sta verificando la convalida. Questo passaggio non ha molto senso dal momento che se non si conosce il certificato in anticipo (quindi non sarebbe necessario inviarlo), quindi non sono sicuro di come lo si convalida è per il utente appropriato che dovrebbe avere accesso ai dati e non è stato attaccato tramite un uomo nel mezzo.

Il modo preferibile sarebbe che il certificato X509 sia uno che hai firmato in modo che il tuo sistema possa sapere che il certificato è valido e per l'utente che lo ha inviato. Quindi, anche se un uomo nel mezzo stava facendo la richiesta, fino a quando non hanno la chiave privata per il certificato, non sarebbero in grado di decifrare la chiave AES ei dati sarebbero inutili per loro.

    
risposta data 19.02.2013 - 16:00
fonte

Leggi altre domande sui tag