Per prima cosa, ho alcune domande concettuali e poi alcune domande più specifiche sull'implementazione di HTTPS.
-
In un sistema estremamente semplice con solo 2 host (A e B) che parlano su una LAN ma un MITM attivo sulla LAN (Z), che è attivo fin dall'inizio e in grado di intercettare e modificare completamente le prime connessioni tra i 2 host A e B, è vero che fondamentalmente, alcuni dati devono essere condivisi fuori banda per evitare questo scenario di attacco, corretto?
In altre parole: non esiste alcun algoritmo, protocollo o trucco matematico esistente che permetta all'host A di connettersi a B per la prima volta in assoluto, avendo assolutamente nessuna conoscenza precedente di B, e in qualche modo asserire che B non è un MITM, giusto? So che questa domanda potrebbe sembrare ovvia, perché sinceramente se A non ha conoscenza di B di sorta, allora non c'è davvero nulla che distingua B da Z ad A, ma ho bisogno di sentirlo dagli esperti.
-
Questo è esattamente il modo in cui funziona PKI su Internet, giusto? Poiché il certificato di un server è firmato dalla chiave privata di una CA, ma il certificato pubblico della CA è stato effettivamente condiviso in anticipo e in modo fuori banda (al momento dell'acquisto del computer o del disco del sistema operativo, era già presente nel browser software).
-
È anche vero che un certificato di CA rilasciato in confronto a un certificato autofirmato fornisce solo un vantaggio logistico sotto forma di scalabilità? (in confronto a un mondo ipotetico in cui tutte le parti hanno condiviso certs in modo sicuro, fuori banda) In altre parole, ogni sito su Internet ha tentato di utilizzare certificati autofirmati, quindi tecnicamente potrebbe essere ancora sicuro se per esempio amazon.com e io abbiamo comunicato fuori banda e amazon ha condiviso il suo certificato (in modo da poter stabilire che il certificato fornito era effettivamente di Amazon), così ho potuto convalidare le connessioni future, giusto? Ma il problema sarebbe quello di dover eseguire questo passo fuori banda per ogni sito web là fuori.
Ora su un problema di implementazione correlato.
Immaginate un ipotetico sistema di computer autonomo con circa 100 host su una LAN privata. 1 host è il "master" e viene inizialmente installato manualmente (da un disco, un'unità o un altro supporto fisico attendibile). Ma i restanti 99 host sono installati sulla LAN (https). Se i rimanenti 99 host hanno nessuna memoria persistente e si installano direttamente nella RAM e iniziano ad essere eseguiti, allora deve essere impossibile progettare un tale sistema per evitare la possibilità iniziale del MITM descritta sopra, giusto? Soprattutto considerando che ognuno dei 99 host esegue una completa reinstallazione, e essenzialmente connette per la prima volta ad ogni riavvio. Perché non vi è alcun luogo o mezzo per memorizzare alcun tipo di certificato precondiviso o dati di convalida in modo che i 99 client possano verificare digitalmente un certificato SSL presentato dal server "master". E se non esiste un metodo di comunicazione fuori banda, allora devono ricorrere esclusivamente all'accettazione iniziale del certificato sulla stessa connessione (creando la possibilità del MITM). Inoltre, i 99 host sono automatizzati, quindi non vi è alcuna possibilità per un utente di intervenire e di convalidare un'impronta digitale, come con ciò che fa SSH. Ma in realtà sarebbe solo un'altra forma di comunicazione fuori banda.