TLS consente di utilizzare il certificato client per inizializzare una connessione TLS a un server. Tuttavia, lo stesso può essere ottenuto da:
- Inizializza la connessione TLS come client anonimo con una chiave privata generata casualmente.
- Il server fornisce un numero casuale come una sfida su un modulo Web o intestazione HTTP.
- Il cliente, ad es. un browser, utilizza la chiave privata (tramite window.crypto javascript API) per generare una chiamata API RESTful per identificarsi al server firmando la richiesta e fornendo il certificato.
I due metodi sono: certificato client e chiamata javascript-API, lo stesso in termini di sicurezza?
Lo scenario dietro questa domanda è che stiamo usando la chiave pubblica blockchain per stabilire una connessione TLS. Poiché non vi è alcun certificato client firmato dall'autorità, il client fornisce invece un percorso dell'albero Merkle come prova.
Apparentemente, il formato di tale prova non è compreso dal server HTTPS quando viene usato come sostituto del certificato client, quindi stiamo modificando il server.
Quindi qualcuno fa sorgere la domanda: c'è qualche vantaggio di sicurezza che possiamo ottenere per implementare Merkle tree proof come certificato client? Sembra perfettamente sicuro se lo implementiamo sul livello della logica aziendale iniziando con la connessione TLS anonima e quindi richiede l'autenticazione.
Ho iniziato a capire che ci sono altri vantaggi nell'autenticazione dopo aver stabilito la connessione TLS, ad es. offre l'opportunità di una maggiore interfaccia utente, ad esempio, visualizzando messaggi come questo "La tua prova di Merkle sembra puntare alla rete di test - accettiamo solo la prova Merkle della rete principale."
Quindi mi chiedo, quale è stata la ragione per utilizzare il certificato client per inizializzare TLS in primo luogo? Perché TLS include il concetto di inizializzare TLS con il certificato del cliente? Sembra solo rendere i sistemi più difficili da usare senza vantaggi di sicurezza.