Mi piacerebbe sapere come implementare la sicurezza in avanti usando GnuPG e presumo di aver bisogno di una sorta di scambio di chiavi autenticato. Supponendo che ho già il seguente lavoro:
- Alice e Bob hanno entrambi generato i propri normali keypair asimmetrici
- Alice ha la chiave pubblica di Bob e Bob ha la chiave pubblica di Alice
- Alice e Bob hanno verificato di avere le chiavi corrette e quindi si fidano l'un l'altra
- Alice può inviare messaggi crittografati asimmetricamente con la chiave pubblica di Bob e Bob può decrittografarli, leggerli e verificare le firme (e viceversa)
Il problema che vorrei risolvere è che se qualcuno fosse riuscito a intercettare e archiviare un messaggio crittografato dalla scorsa settimana e successivamente a ottenere la corrispondente chiave privata da Alice o Bob, potrebbe decodificare e leggere il messaggio vecchio messaggio. Spero che con una chiave di sessione temporanea (negoziata ma non inviata) ciò non sia più possibile, poiché il messaggio della settimana scorsa sarebbe stato simmetricamente crittografato con una chiave di sessione casuale, e questa chiave di sessione era mai inviato in qualsiasi messaggio.
Credo che ciò di cui ha bisogno è un Authenticated Key Exchange (AKE) come Diffie-Hellman, quindi il mio programma può farlo usando GnuPG come libreria?
- Generazione di token casuali adatti
- Combinazione di questo token con chiave privata
- (il programma è quindi responsabile della memorizzazione di dati temporanei in memoria e della trasmissione di messaggi crittografati e firmati)
- Combinazione di ricevuto (token + chiave) dall'altra parte con la propria chiave privata per fornire la chiave di sessione temporanea
k
- Uso di questo% co_de concordato come chiave di sessione simmetrica
Idealmente questa chiave di sessione non dovrebbe essere aggiunta a nessun portachiavi, e la sua creazione sarebbe molto più rapida di quella di generare una coppia di chiavi asimmetrica.
Confusioni
Secondo le FAQ al link :
“Diffie-Hellman” is what PGP calls the Elgamal encryption algorithm. If your PGP-generated keypair uses a Diffie-Hellman encryption subkey, it will appear in GnuPG as an Elgamal subkey.
ma secondo il manuale link la generazione della chiave per ElGamal produce una coppia di chiavi:
Option 4 creates a single ElGamal keypair usable for both making signatures and performing encryption.
Questo suona come una coppia di chiavi asimmetrica che non è quello che voglio, e suona anche come se fosse aggiunta al portachiavi, che sembra indesiderabile e inefficiente. Quindi sono un po 'confuso su cosa GnuPG intenda per "ElGamal", e non vedo come un protocollo di scambio chiavi possa essere considerato equivalente a un algoritmo di crittografia.
Conclusioni
Grazie alla risposta di Forest qui sotto, capisco che questo non è possibile, anche se sembra che GnuPG sia più che capace di fare la matematica richiesta. L'ho lasciato aperto ancora per un po 'nel caso in cui qualcun altro avesse saputo un modo.
Dovrò esaminare ulteriormente l'OTR, che ovviamente è una domanda separata.
Ho anche realizzato dopo aver posto questa domanda che forse avrei dovuto metterlo in crypto.stackexchange - le mie scuse se metterlo lì sarebbe stato più appropriato. Grazie per i commenti!