Come digitare la password di un file .gpg solo all'apertura


17

(Comprendo le implicazioni di sicurezza di quanto segue e sto bene con loro.)

Ho un singolo file crittografato nella mia directory org, diary.org.gpg. Non ho mai fatto alcuna configurazione speciale per farlo funzionare, ancora

  1. Ogni volta che visito il file, mi viene richiesta la password di crittografia. Che è grandioso.
  2. Ogni volta che salvo il buffer, mi viene richiesta nuovamente la password due volte. Qual è il mio problema .

Nota che non ho configurato nulla per far funzionare tutto questo, quindi tutte le risposte riguardanti agenti o portachiavi dovranno venire con le istruzioni di configurazione.

Ho pensato di mantenere la password scritta da qualche parte all'interno del file (nell'intestazione o nei commenti di fine file). Quindi, ogni volta che salvo, Emacs poteva leggere la password nel buffer e usarla invece di chiedermi. Ma quando ho iniziato a esaminare questo, mi sono completamente perso da qualche parte all'interno epa.el.

D: Come posso inviare una password direttamente da Emacs al sistema / processo di crittografia durante il salvataggio del buffer, anziché essere richiesto?

Tutto il resto (trovando la password nel buffer) riesco a capire me stesso. Mi sono appena perso quando ho provato a capire come Emacs si interfacciava con gpg.

Nota che sono su Ubuntu, Arch Linux e Windows. Ecco perché la mia prima idea è stata una soluzione incentrata su emacs.
Posso vivere con una soluzione che non funziona su Windows, purché possa ancora accedere al file su di esso in modo manuale.


Penso che questo: orgmode.org/worg/org-tutorials/encrypting-files.html#sec-5 è quello che vuoi (l'agente gpg).
wvxvw,

@wvxvw Forse. Non dice nulla sul salvataggio, quindi dovrò provarlo.
Malabarba,

Ad essere onesti, GPG e i relativi programmi hanno un'interfaccia utente notevolmente negativa. È davvero difficile capire cosa fanno dall'interfaccia o dalla documentazione. Ma la mia comprensione dello scopo di gpg-agentè che è simile a ssh-agentmemorizzare le password che hai, una volta attivato. Quindi non ti verrà richiesta la password né quando apri un file, né quando lo salvi (purché l'agente ricordi la password), ma non credo che questo si estenda alla passphrase, che è un po 'stupida , se è vero.
wvxvw,

Probabilmente vuoi impostare gpg-agentcorrettamente, in modo che memorizzi nella cache la chiave per un po '? :)
Günther Noack,

1
@wvxvw Forse era quello il caso? Ho trovato che le pagine man di detti strumenti sono abbastanza dettagliate e l'interfaccia (CLI) è ciò che ci si aspetterebbe di solito dai programmi basati su terminali.
legends2k,

Risposte:


12

Crittografia tramite password + chiave

Questo non salva la password direttamente nel file ma fa qualcosa di simile senza alcun rischio per la sicurezza e ti aiuta a ottenere ciò che desideri.

  • È necessario utilizzare la crittografia asimmetrica in modo che la password sia associata a un ID e-mail in un portachiavi .

  • Salvare il seguito nella parte superiore del file .gpg

-*- epa-file-encrypt-to: ("your@email.address") -*-

La password viene richiesta la prima volta che il file viene salvato / creato. Ma dopo ciò la password viene richiesta solo una volta ogni volta che si apre il file salvato

L'unico problema è che non devi perdere il file keyring che viene salvato ~/.gnupg/per impostazione predefinita.

Impostazione GPG

Emacs Setup

Non è necessario eseguire alcuna configurazione per questo in emacs.

Configurazione di sistema

Tuttavia, è necessario che l'ambiente di sistema sia pronto con alcune librerie affinché la funzione GPG funzioni.

Al momento della configurazione, ho dovuto installare quanto segue:

  • GPGME-1.5.3
  • Libgpg-error-1.17
  • Libksba-1.3.2
  • Libassuan-2.2.0
  • Libgcrypt-1.6.2
  • gnupg-2.0.26
  • pinentry-0.9.0

Avevo bisogno di una o due delle librerie di cui sopra e ho finito per installare le altre perché erano dipendenze obbligatorie o opzionali.

Una volta installato tutto, fallo

> gpg --gen-key

E genera una chiave senza scadenza per te stesso e associalo al tuo vero nome ed e-mail.

La chiave generata verrà salvata nella tua ~/.gnupg/directory.

Modifica della posizione del portachiavi

È possibile modificare la posizione del portachiavi modificando $GNUPGHOME, utilizzando --homediro le --keyringopzioni per gpg.

Da man gpg:

--keyring file

Aggiungi file all'elenco corrente di portachiavi. Se il file inizia con una tilde e una barra, questi vengono sostituiti dalla directory $ HOME. Se il nome file non contiene una barra, si presume che si trovi nella directory home di GnuPG ("~ / .gnupg" se --homedir o $ GNUPGHOME non vengono utilizzati).

Si noti che ciò aggiunge un portachiavi all'elenco corrente. Se l'intenzione è quella di utilizzare solo il keyring specificato, utilizzare --keyring insieme a --no-default-keyring.

Utilizzo di GPG con emacs

In emacs, devi semplicemente creare un file con .gpgun'estensione. Ad esempio, se il file era originariamente auth.el, lo si rinominerebbe auth.el.gpg.

Posiziona questa riga nella parte superiore del file:

;; -*- epa-file-encrypt-to: ("your@email.address") -*-

Si noti che ho usato i caratteri di commento elisp ;;come il file di esempio qui è auth.el.gpg.

Usa l'indirizzo email esatto che hai usato al momento della generazione della chiave.

Quando provi a salvarlo, emacs mostrerà questo prompt in un buffer:

Select recipients for encryption.
If no one is selected, symmetric encryption will be performed.  
- `m' to mark a key on the line
- `u' to unmark a key on the line
[Cancel][OK]

  u <GPG KEY> <YOUR NAME> (<YOUR GPG KEY NAME>) <<YOUR GPG KEY EMAIL>>

Spostare il punto sulla riga contenente il tasto, premere m.

Spostare il punto sul [OK]pulsante e premere <return>.

Ora puoi salvare il file ed eliminare quel buffer di file.

La prossima volta che aprirai quel file .gpg, ti verrà richiesta la password una sola volta e quindi i salvataggi consecutivi saranno privi di password.

Ulteriori informazioni


Se perdo il file keyring, sarò comunque in grado di aprire il file crittografato con la solita password o verrà perso per sempre?
Malabarba,

@Malabarba Non l'ho provato ma credo che sia perso per sempre. Ma la cosa buona è che quel file viene generato solo una volta quando associ una e-mail e una password a un elemento portachiavi. Non viene modificato dopo quella prima volta fino a quando non si aggiungono più elementi portachiavi (più password + coppie di e-mail). Tengo semplicemente i backup di quel file in una chiave USB e Dropbox e mi assicuro che la password sia super sicura.
Kaushal Modi,

Ho testato i documenti crittografati simmetricamente come portatili. Ho crittografato qualcosa in emacs in Linux e l'ho aperto usando uno dei tanti strumenti di decrittazione GPG gratuiti disponibili per Windows. Ha chiesto il portachiavi e lo ha indicato il mio backup in Dropbox e ha funzionato.
Kaushal Modi,

Cordiali saluti: Sì, perdere il file chiave significa perdere definitivamente anche l'accesso ai file crittografati. Sono necessari sia la password che il file della chiave privata per decodificarli. Fa parte del modello di sicurezza GPG per la crittografia asimmetrica.
Tyler,

Sembra che dovrò seguire questa risposta dopo tutto. Sai come posso cambiare la posizione del file keyring?
Malabarba,

9

Ho scoperto che tutto quello che dovevo fare era

(setq epa-file-cache-passphrase-for-symmetric-encryption t)

Questa soluzione funziona sia su Linux che su Windows ed è una cortesia di Ted e Michael su help-gnu-emacs.


Buono a sapersi che questo funziona per te! Ho avuto questa impostazione nella mia configurazione di Emacs per anni, ma a un certo punto ha smesso di funzionare. Sospetto che abbia a che fare con il mio uso del demone gnome-keyring (che funge anche da portachiavi gpg).
paprika,

4
Dalla documentazione per epa-file-cache-passphrase-for-symmetric-encryption: "Nota che questa opzione non ha alcun effetto se usi GnuPG 2.0."
Wilfred Hughes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.