Cipher utilizzato per la crittografia dei dati richiesta utilizzata dal browser

6

Si noti che non si tratta di come avviene la comunicazione SSL tra browser (l'ho ricercata e compresa) e client ma altri aspetti.

Utilizzo della spiegazione del meccanismo SSL di Digicert Ho capito in che modo i dati vengono crittografati tra browser e server. Di seguito è la mia comprensione

  1. Il browser invierà una richiesta al server per ottenere alcune risorse. Il server verifica se il protocollo della richiesta è HTTPS, in tal caso quindi invierà il relativo certificato (questo certificato è già stato firmato da alcuni CA (autorità di certificazione, come Digicert)) nella risposta.
  2. Il browser controllerà se il certificato è valido convalidando la ricerca dell'autorità di firma nel suo pool di CA valido.
  3. Se il browser rileva che questo certificato è firmato da una CA valida, genera una chiave di sessione e la crittografa utilizzando la chiave pubblica presente nel certificato.
  4. Il browser invierà questa chiave di sessione crittografata al server e il server decodificherà la chiave di sessione. Il server invierà una conferma al browser che verrebbe crittografata utilizzando la chiave di sessione.
  5. I passaggi precedenti completano un handshake SSL e quindi iniziano le comunicazioni sicure tra browser e server.

Domande:
In base alla mia comprensione precedente:

  1. Il browser genera una chiave di sessione e la crittografa utilizzando la chiave pubblica del server. Ma quale algoritmo di crittografia (o comunemente chiamato algoritmo di cifratura) verrà utilizzato dal browser?
    • Come viene determinata la selezione della cifra e browser e server utilizzano entrambi la stessa dimensione della chiave / crittografia per la crittografia e la decrittografia?
  2. Una volta completato l'handshake SSL, tutte le comunicazioni verranno crittografate utilizzando la chiave di sessione simmetrica, ma ancora quale algoritmo di crittografia verrà utilizzato dal browser?
  3. L'algoritmo di crittografia utilizzato dal browser dipende in qualsiasi modo dal certificato ricevuto dal server?
    • Oppure tutta la crittografia eseguita dal browser viene eseguita con lo stesso algoritmo di cifratura?
  4. Per favore correggimi se ho torto, l'algoritmo o le informazioni cifrate sono presenti anche nel certificato? Come vengono archiviate tali informazioni nel certificato?
    • Durante la generazione del certificato devo specificare quale algoritmo, quanti bit di cifratura, padding ecc.?

In base alla risposta di cui sopra avrò la domanda più importante - supponiamo che fornisca la chiave privata del mio server a qualcuno in modo che possa monitorare il traffico SSL per il mio server, quindi oltre a fornirgli la chiave privata cosa tutte le altre cose Ho bisogno di stare attento. E ho bisogno di dirgli l'algoritmo o il codice che sto usando sul server?

    
posta hagrawal 05.08.2015 - 22:16
fonte

3 risposte

3
  1. The browser will generate a session key and encrypt it using server's public key. But which encryption algorithm (or commonly called as cipher algorithm) will be used by the browser?
    • How is cipher selection determined, and will browser and server both use the same cipher/key size for encryption and decryption?

Il browser invierà un elenco di suite di crittografia al server che supporta. Questa risposta spiegherà che cos'è una suite di crittografia in dettaglio, ma fondamentalmente una suite di crittografia è una lista di algoritmi da usare per la comunicazione sicura. Una suite di crittografia contiene:

  • Versione TLS
  • Algoritmo di scambio di chiavi
  • Algoritmo per la firma
  • Algoritmo di crittografia simmetrica
  • Algoritmo di integrità

Ad esempio: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Il browser invia un elenco di suite di crittografia supportate al server e il server sceglie la suite di crittografia più sicura che supporta. Se non supporta nessuno nell'elenco, la connessione fallisce. L'algoritmo di crittografia simmetrica è ciò per cui viene utilizzata la chiave di sessione. In SSL / TLS, le chiavi vengono generate dal segreto pre-master .

  1. Once SSL handshake is completed, all communication will be encrypted using the symmetric session key, but again which encryption algorithm will be used by the browser?

Ancora una volta, l'algoritmo simmetrico nella suite di crittografia verrà utilizzato per la comunicazione crittografata. Nell'esempio sopra sarebbe AES 128 bit in modalità GCM.

  1. Is the encryption algorithm used by browser in any way dependant upon certificate received from server?
    • Or is all encryption performed by the browser performed with the same cipher algorithm?

Non è in alcun modo dipendente dal certificato. Tutta la crittografia viene eseguita dall'algoritmo di crittografia simmetrica nella suite di crittografia scelta dal server.

  1. Please correct me if I am wrong, the algorithm or cipher information is also present in the certificate? How does that information stored in the certificate?
    • While generating the certificate do I need to state which algorithm, how many bits encryption, padding etc.?

L'algoritmo e il codice per la comunicazione sicura non sono nel certificato, ma come indicato sopra all'interno della suite di crittografia scelta dal server. Il certificato contiene solo informazioni relative a il certificato stesso . Che include, ma non limitato a, informazioni sulla validità, algoritmo di firma, informazioni sull'emittente ecc.

Based on the above answer I will have the most important question - suppose I am providing my server's private key to somebody so that he can monitor the SSL traffic for my server, then apart from providing him the private key what all other things I need to take care. And do I need to tell him the algorithm or cipher I am using at server?

Consiglio vivamente non di fornire la chiave privata del tuo server per il monitoraggio del traffico SSL (per ragioni che esulano dall'ambito di questa domanda). Tuttavia, se decidi di condividere la tua chiave privata, l'altra parte non ha bisogno di altre informazioni. Poiché l'algoritmo e la cifra non sono inclusi nel certificato.

    
risposta data 06.08.2015 - 14:54
fonte
2

Risposta super short: il server e il client negoziano quale algoritmo supportano e utilizzano successivamente. Viene comunicato durante l'handshake.

    
risposta data 05.08.2015 - 22:31
fonte
1

Non una risposta (@raz lo ha capito) ma alcuni errori nella tua "comprensione" sono troppo grandi per i commenti IMO:

Browser will send a request to the server to get some resource. Server checks if the protocol of the request is HTTPS, if so then it will send its certificate (this certificate is already signed by some CA (Certificate Authority, like Digicert)) in the response.

L'handshake SSL / TLS si verifica prima che il browser invii la richiesta, quindi la richiesta (incluso l'URL) è crittografata. Vedi Se SSL crittografa gli url, allora come sono https messaggi indirizzati? e SSL / TLS (https) nasconde le url che sono accesso

Il browser controlla prima lo schema e (normalmente) si connette alla porta 443 per https anziché a 80 per http. Per i server moderni che supportano più "host virtuali" su un indirizzo IP, il browser può inviare e solitamente invia parte host dell'URL in un'estensione denominata Server Name Indication (SNI) in modo che il server possa selezionare i certificati corretti per l'host desiderato.

Browser will check if the certificate is valid by validating looking up the signing authority in its valid CA pool.

Come dice correttamente la pagina Digicert, il browser controlla che il certificato sia firmato da una CA nel suo negozio locale e non è scaduto, non revocato e [per l'host corretto] . La pagina è obsoleta da un punto di vista: al giorno d'oggi praticamente tutti i certificati di CA pubblici come Digicert usano il più flessibile SubjectAlternativeName extension (spesso abbreviato SAN) piuttosto che l'elemento CommonName del campo Subject per specificare i nomi host. L'effetto è fondamentalmente lo stesso.

[If okay the browser] generates a session key and encrypts it using the public key present in the certificate.
Browser will send this encrypted session key to the server and server will decrypt the session key. [...]

Questo è eccessivamente semplificato e obsoleto. Il metodo di scambio di chiavi "RSA" originale utilizza la crittografia RSA, ma il valore scelto e crittografato dal client non è "la" chiave di sessione ma un segreto premaster che contribuisce alle più chiavi di sessione: vedi link .

Anche oggi sta diventando più comune usare (diverse varianti di) Diffie-Hellman che può fornire il segreto in avanti come commentato da @Neil; vedi Come funziona SSL / TLS? . L'esempio ciphersuite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 nella risposta @raz utilizza lo scambio di chiavi Ephemeral Elliptic-Curve Diffie-Hellman (ECDHE) autenticato da RSA. Questo NON cripta e decripta il premaster con RSA; invece il client e il server scelgono indipendentemente ordini di elementi casuali in un sottogruppo di una curva ellittica e combinarli matematicamente per produrre il premaster.

    
risposta data 15.08.2015 - 15:17
fonte

Leggi altre domande sui tag