Trasmissione di chiavi private tra dispositivi? [duplicare]

0

Ho un'app in cui il dispositivo di un utente crea una chiave pubblica / privata e tutte le comunicazioni a questo utente vengono eseguite crittografando la loro chiave pubblica, che viene archiviata su un server e inviata ad altri client che la richiedono.

Ora sto provando a farlo in modo che funzioni su più dispositivi.

Penso che posso solo far generare al nuovo dispositivo una coppia di chiavi ("temp key"), crittografare la chiave privata dell'utente contro la chiave pubblica del nuovo dispositivo, inviarla al nuovo dispositivo e cancellare "temp chiave".

Ci sono problemi con questo? Esiste una soluzione migliore che non richieda l'invio di nuove versioni della chiave pubblica a tutti coloro che già la possiedono?

    
posta zyklus 07.09.2015 - 12:01
fonte

3 risposte

1

One of the primary purposes for this is to be able to say "We (as a company) have absolutely no way of decrypting your communications", so that's a no-go. It needs to be device-to-device, or encrypted with the private key of a device, etc.

Bene, in tal caso, abbiamo stabilito che entrambi i dispositivi devono essere in grado di comunicare tra loro, in modo bidirezionale e in tempo reale, al fine di completare il trasferimento.

In tal caso, non c'è davvero bisogno di elaborati schemi di crittografia a chiave pubblica. In effetti, sono più propensi a introdurre problemi.

Sappiamo anche che molte persone non sono realmente preparate a distruggere fisicamente i media, hanno la capacità di farlo in modo sicuro, o persino a capire perché potrebbe essere importante farlo. Invece, la maggior parte delle persone tende a cancellare semplicemente il file attraverso il sistema operativo, lasciando tutti i dati intatti sul supporto per chiunque visiti. Quindi il suggerimento di M'vy di lasciare che l'utente copi la chiave sui media su cui ha il controllo fisico, mentre in teoria è buona , non è davvero una grande idea in pratica.

Utilizza invece un algoritmo di scambio di chiavi come Diffie-Hellman Key Exchange ( Wikipedia , RFC 2631 ) per consentire ai due dispositivi coinvolti di concordare interattivamente su un segreto condiviso. Poiché non vogliamo reinventare la ruota, utilizza qualsiasi TLS o perhaps SSH / SFTP / SCP sono disponibili per la piattaforma di destinazione per il sollevamento di carichi pesanti. (In generale, non scrivere mai codice crittografico da soli. Le probabilità sono ottime che tu sbagliare , introdurre bug sottili e lasciare i dati degli utenti a rischio di esposizione. Lascia che qualcun altro faccia questi errori.)

Sebbene non correlato alla crittografia stessa, assicurati che questo processo implichi l'autenticazione dell'utente su entrambi i dispositivi in qualche modo.

Una volta che i due dispositivi hanno concordato un segreto condiviso composto, ad esempio, da 32 byte casuali, utilizzare tale segreto condiviso come chiave di crittografia simmetrica. AES -256 è abbastanza buono per la maggior parte degli scopi in questi giorni , la chiave a 256 bit con l'ulteriore vantaggio di fornire un margine di sicurezza anche in un crittografia post-quantistica , e per un dato fattore di lavoro AES non è molto intensivo dal punto di vista computazionale.

Dopo aver trasferito la chiave a lungo termine da un dispositivo all'altro e verificato che la copia è buona, basta cancellare le chiavi di crittografia temporanea da entrambi i dispositivi e probabilmente cancellare la chiave a lungo termine dal dispositivo che è stato trasferito da (probabilmente questo è il tuo problema più grande)

    
risposta data 06.11.2015 - 15:54
fonte
0

Il protocollo di scambio chiavi Diffie-Hellman può essere facilmente esteso per funzionare con tre o più persone. Vedi link e Schneier Applied Cryptography Capitolo 22 - I think page 510.

Schneier descrive anche Key Exchange senza scambio di chiavi

Se hai una community di utenti, ognuno può pubblicare una chiave pubblica, X = g x mod n, in un database comune. Se Alice vuole comunicare con Bob, deve solo recuperare la chiave pubblica di Bob e generare la sua chiave segreta condivisa. Potrebbe quindi crittografare un messaggio con quella chiave e inviarlo a Bob. Bob recupererebbe la chiave pubblica di Alice per generare la chiave segreta condivisa. Ogni coppia di utenti avrebbe una chiave segreta univoca e non precedente è richiesta la comunicazione tra gli utenti. Le chiavi pubbliche devono essere certificate per prevenire attacchi di spoofing e dovrebbero essere cambiate regolarmente, ma per il resto questa è un'idea abbastanza intelligente.

    
risposta data 07.09.2015 - 12:19
fonte
0

Il modo migliore per trasferire le chiavi private è che il proprietario copi la chiave su un supporto su cui ha il pieno controllo.

Se è necessario garantire la protezione per la perdita del supporto, è possibile utilizzare qualsiasi sistema di crittografia, indipendentemente dalla crittografia della chiave USB, dall'immissione della chiave in un contenitore PKCS # 12 o dalla crittografia del file. Questo è fondamentalmente uno dei compiti dei keystore.

    
risposta data 07.09.2015 - 14:12
fonte

Leggi altre domande sui tag