Come sapere se è lo stesso utente?

3

Ho fatto una domanda qualche tempo fa chiedendo come creare una chatroom criptata efficiente. Quello che ho finito è stato Fare in modo che ogni utente generi un RSA KeyPair a 4096 bit, condividere le sue chiavi pubbliche, e quindi uno dei client distribuisce una chiave di crittografia AES 256 bit generata casualmente.

Comunque, mi stavo chiedendo. Diciamo che un utente firma con il nome di "Austin" e firma.

Diciamo più tardi "Austin" entra di nuovo. Voglio sapere se è lo stesso utente (o almeno lo stesso computer) senza usare qualcosa come una password (tuttavia potrebbe essere qualcosa di verificato da un server di qualche tipo), come potrei farlo?

Stavo pensando a qualcosa come il modo in cui lo stucco verificherà il server a cui ti stai connettendo, ma non sono sicuro di averlo capito davvero.

Grazie in anticipo.

    
posta Austin 13.10.2012 - 12:44
fonte

3 risposte

2

L'identificazione degli utenti in base a una chiave pubblica è nota come infrastruttura a chiave pubblica (PKI). Esistono diversi modi per far funzionare un PKI. Il modo semplice è che quando un utente si registra al tuo servizio, viene generata una chiave per loro, e il tuo servizio ricorda l'associazione tra il nome utente (o l'ID account univoco, se i nomi utente non sono necessariamente distinti) e la chiave pubblica. Questo modo semplice funziona bene quando tutti gli utenti si registrano sullo stesso server; le difficoltà con PKI iniziano quando le identità e le informazioni di autenticazione devono essere sincronizzate tra più server.

SSH (il protocollo a cui stai pensando quando dici "PuTTY") utilizza coppie di chiavi per due cose diverse . SSH utilizza coppie di chiavi per identificare la macchina server sulla macchina client; una volta che un client si è connesso una volta a un server, ricorda la chiave pubblica del server. SSH può anche utilizzare le chiavi pubbliche per identificare l'utente sul server. In entrambi i casi, il detentore della chiave privata dimostra la propria identità dimostrando di conoscere la chiave privata associata alla chiave pubblica che lo identifica. Vedi Qual è il differenza tra authorized_keys e known_hosts per SSH? per i dettagli.

Per la tua applicazione, sembra che gli utenti debbano avere una coppia di chiavi che viene generata quando si registrano. Se la chiave privata deve essere archiviata sul client o sul server dipende dalle proprietà di sicurezza e usabilità che si desidera ottenere. L'installazione più probabile è quella di generare e mantenere la chiave privata sul client, e invitarla a inviare la chiave pubblica al server. Successivamente, il server può autenticare un utente client verificando il suo possesso della chiave privata. Utilizzare SSL / TLS per stabilire un canale sicuro per eseguire l'autenticazione del client; una volta che l'utente è autenticato, chiedi al server di inviare le chiavi di sessione per i canali di chat a cui l'utente è autorizzato a partecipare.

    
risposta data 15.10.2012 - 02:17
fonte
2

L'utente potrebbe autenticarsi firmando l'ID utente o un ID di sessione con la sua chiave privata. Quel valore potrebbe essere autenticato da chiunque, usando la sua chiave PUBLIC. Un semplice schema di firma digitale.

    
risposta data 13.10.2012 - 14:56
fonte
1

Affinché il nuovo "Austin" sia riconosciuto come la stessa entità di, o un'entità distinta, il precedente "Austin", ci deve essere qualcosa che li distingua l'uno dall'altro. Tutti possono comprare un computer; ciò che li rende distinti è ciò che conosce , cioè ciò che è memorizzato nella memoria del computer + sistema utente.

Nel tuo caso, i sistemi client generano coppie di chiavi, quindi la soluzione è semplice: semplicemente Austin ha riutilizzato la stessa coppia di chiavi RSA di prima, invece di generarne una nuova. Usando la stessa chiave pubblica (cioè, essendo in grado di eseguire le operazioni che richiedono la chiave privata, come la decrittografia asimmetrica), il nuovo Austin può dimostrare di essere lo stesso Austin di prima. Per quello che vale, questo è esattamente il SSH modello di sicurezza: viene eseguito un nuovo scambio di chiavi per ogni connessione, ma il client verifica che il server utilizzi sempre la stessa chiave pubblica.

Una password è un'altra istanza della stessa, in cui i dati sono memorizzati nel cervello dell'utente invece delle viscere del suo computer. Ciò include alcune limitazioni, in particolare una bassa entropia (le password sono intrinsecamente vulnerabili alla ricerca esaustiva, alias "attacchi di dizionario") e la necessità che l'utente le digiti ad un certo punto.

    
risposta data 16.10.2012 - 20:27
fonte

Leggi altre domande sui tag