Un client sta comunicando con un server tramite https utilizzando l'autenticazione a due vie. Vorrei aggiungere un ulteriore livello di sicurezza.
Il protocollo sarà simile a:
-
Una chiave simmetrica a 128 bit è memorizzata in un file sul server.
-
Il client si connette all'indirizzo IP del server utilizzando https: // e ottiene l'accesso tramite il suo certificato client che è considerato affidabile dal server.
-
Il client mostra una pagina html vuota con una casella di input in cui deve digitare la chiave simmetrica, che viene quindi memorizzata localmente come variabile js nel browser.
-
Una fase di verifica viene eseguita inviando al server un messaggio crittografato con AES utilizzando la chiave simmetrica del client, che viene quindi decrittografata con la sua versione della chiave simmetrica. Se questo ha successo, al client viene dato l'accesso al resto dell'html.
-
Tutti i dati successivi scambiati dal client e dal server vengono crittografati / decodificati utilizzando la chiave simmetrica per AES-CBC.
Due esempi dei motivi per cui questo livello aggiuntivo può fornire ulteriore sicurezza:
- Se l'utente malintenzionato riceve un certificato che è considerato affidabile dal client e funge da server. Non sarebbe in grado di leggere i messaggi inviati da un cliente.
- Se l'utente malintenzionato si impadronisce di un certificato ritenuto attendibile dal server, dovrà comunque digitare la chiave simmetrica.
Ho ragione riguardo ai due esempi, e in secondo luogo, vedi qualche difetto / attacco di cui non sono a conoscenza?
P.S. Per chiarire: la stessa chiave simmetrica verrebbe utilizzata per ogni sessione, poiché è quella che viene riparata e archiviata sul server. Un IV casuale viene utilizzato per ciascuna crittografia AES-CBC e viene inviato insieme al messaggio crittografato.