Utilizzo di frasi in solo testo come coppia pubblica / privata?

5

Sto lavorando a un'applicazione che verrà utilizzata da utenti relativamente non esperti di tecnologia e mentre le macchine avranno accesso a Internet, l'app non può avere alcun tipo di intermediario ospitato.

L'app consente alle persone di prendere un file, comprimerlo e codificarlo come immagine da condividere su siti come GitHub per aiutare a condividere cose come i file di test, ecc.

La prima versione dell'app funziona perfettamente, ma a volte ci sono dati che richiedono una condivisione sensibile e un certo livello di crittografia.

Idealmente voglio andare giù per la coppia di chiavi pubbliche / private, ma condividerle è complicato e complicato dal punto di vista dell'utente.

Mi piacerebbe essere in grado di (in qualche modo):

  1. Prendi l'indirizzo e-mail di un utente e usalo come chiave pubblica
  2. Prendi una password dall'utente e usala per ottenere una chiave privata
  3. Interagisci questi in qualche modo in modo che possano essere usati in questo modo.

Non importa se l'indirizzo di posta elettronica si risolve in definitiva su qualcos'altro che viene poi utilizzato, ma il flusso generale deve essere tale che:

  1. Alice vuole criptare un'immagine per essere utilizzata da un particolare utente
  2. tipi di Alice nell'indirizzo di posta elettronica dell'utente (o un'altra stringa per la destinazione, ad esempio un gruppo)
  3. Bob scarica l'immagine nell'app e digita la sua password privata per decomprimerla.

L'app potrebbe anche firmare i dati utilizzando le chiavi private per la verifica anche sull'altro lato.

So che potrei usare una chiave pubblica / privata derivata da password, ma ciò significa che la singola password potrebbe essere utilizzata per ricavare entrambe le parti e renderla in definitiva inutile.

    
posta Clint 22.09.2015 - 15:31
fonte

2 risposte

3

Non puoi utilizzare stringhe arbitrarie come coppie di chiavi private / pubbliche. Questi devono essere generati secondo le specifiche matematiche dell'algoritmo PKI che si usa (per esempio RSA).

Potresti, tuttavia, creare un'applicazione che utilizza lo stesso flusso di lavoro descritto, ma utilizza PKI per la crittografia, purché tu sia pronto a fare alcuni compromessi.

Innanzitutto, inizia con una tipica crittografia asimmetrica (usa una libreria standard per favore: non provare a codificarne una tu stesso): l'app usa la chiave privata del mittente per firmare i dati e la chiave pubblica del destinatario per crittografarla. Il problema è che, molto spesso, non si ha accesso a una chiave pubblica convalidata per il destinatario.

Per risolvere ciò, tutti gli utenti generano la propria coppia di chiavi (o coppie) e registrano le chiavi pubbliche su una piattaforma comune (un server di chiavi). Ciò dovrebbe includere una qualche forma di convalida dell'utente al fine di assicurarsi che la chiave appartenga realmente al principio di sicurezza ad essa associato o si corre il rischio che qualcuno registri una chiave con un identificatore che non gli appartiene.

Quindi, quando un utente ha bisogno della chiave pubblica di qualcuno, può richiederlo dal server delle chiavi (tramite un canale crittografato autenticato) secondo necessità.

Naturalmente, il diavolo si trova nei dettagli: costruire un sistema del genere è estremamente difficile: è necessario disporre di un sistema di convalida per le chiavi che sia efficiente e pratico. Inoltre, è necessario tener conto del fatto che gli utenti perdono regolarmente le proprie chiavi, dimenticano le loro password, cambiano le loro e-mail, ecc. I server chiave devono anche essere estremamente sicuri e, allo stesso tempo, operare in modo trasparente perché chiunque li controlli controlla anche la comunicazione di tutti (potrebbero sostituire qualsiasi chiave pubblica in modo più o meno trasparente).

Tutti questi "piccoli" dettagli sono estremamente difficili (e costosi) da risolvere quindi, a meno che tu non abbia molte risorse disponibili, probabilmente starai meglio con la semplice crittografia simmetrica.

    
risposta data 22.09.2015 - 15:51
fonte
0

Dai un'occhiata all'esperimento dei miei brainkey. link

Prende una frase e la trasforma in una coppia di chiavi pubblica / privata SSH. Basato sul concetto e sul codice del brainwallet.

    
risposta data 24.09.2015 - 03:35
fonte

Leggi altre domande sui tag