Entschlüsseln und verschlüsseln Sie eine Datei mit gpg, ohne die Passphrase erneut eingeben zu müssen

574
francescop21

[ Hinweis : mein Problem ähnlich ist dies . Und im Zusammenhang dieses ]

Grundsätzlich möchte ich ein symmetrisch verschlüsseltes Feld bearbeiten und es dann erneut mit derselben Passphrase verschlüsseln, ohne es erneut eingeben zu müssen.

Es geht so:

gpg --output $file_to_edit --decrypt $ecrypted_file echo "Some edit" >> $file_to_edit gpg --output $ecrypted_file --symmetric $file_to_edit 

Nun gpgfragt 3 - mal für die Passphrase (1 für die Entschlüsselung und 2 zur Verschlüsselung). Ich möchte die Passphrase nur einmal eingeben (zur Entschlüsselung) und sie, falls sie korrekt ist, erneut zur Verschlüsselung verwenden. Gibt es einen sicheren Weg, dies zu tun?

1

1 Antwort auf die Frage

1
Xen2050

Es gibt verschiedene Optionen, die jedoch alle dazu führen können, dass eine entschlüsselte Datei auf der Festplatte gespeichert wird und darauf wartet, dass sie später gelöscht wird. Shred kann sogar Probleme haben, eine Datei sicher zu löschen (wenn es ein Protokoll / Journal gibt, redundante Schreibvorgänge / RAID, temporäre Caches, komprimierte Dateisysteme) und eine SSD die Sektoren auch unbemerkt austauschen kann. Sogar die Verwendung eines tmpfsDateisystems kann zum Auslagern ausgeschrieben werden. Das Bearbeitungsprogramm, das Sie verwenden, kann noch mehr temporäre / Cache-Dateien hinterlassen. Wenn Ihr gesamtes Dateisystem und Ihr Swap verschlüsselt ist, hilft das sehr, aber benötigen Sie dann wirklich mehr Verschlüsselung?

Wenn Sie nur Basistext (wie Kennwörter) speichern, würde ich vorschlagen, ein spezielles Programm wie KeePass (X / XC), LastPass usw. zu verwenden. Oder eine andere Verschlüsselungsmethode, die Dateien wie eCryptfs, EncFS oder verschlüsselt Das verschlüsselt Geräte wie LUKS oder einen TrueCrypt-Nachfolger.


Mit nur GPG können Sie jedoch eine dieser Optionen verwenden

  • --passphrase-fd n
    Lesen Sie die Passphrase aus dem Dateideskriptor n. Nur die erste Zeile wird aus dem Dateideskriptor n gelesen. Wenn Sie 0 für n verwenden, wird die Passphrase aus STDIN gelesen. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird.

    Beachten Sie, dass diese Passphrase nur verwendet wird, wenn auch die Option --batch angegeben wurde. Dies unterscheidet sich von GnuPG Version 1.x.

  • --passphrase-file file
    Lesen Sie die Passphrase aus der Datei file. Nur die erste Zeile wird aus der Datei gelesen file. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird. Natürlich ist eine in einer Datei gespeicherte Passphrase fragwürdig, wenn andere Benutzer diese Datei lesen können. Verwenden Sie diese Option nicht, wenn Sie dies vermeiden können. Beachten Sie, dass diese Passphrase nur verwendet wird, wenn auch die Option --batch angegeben wurde. Dies unterscheidet sich von GnuPG Version 1.x.

  • --passphrase string
    Verwenden Sie string als Passphrase. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird. Offensichtlich ist dies auf einem Mehrplatzsystem sehr fragwürdige Sicherheit. Verwenden Sie diese Option nicht, wenn Sie dies vermeiden können. Beachten Sie, dass diese Passphrase nur verwendet wird, wenn auch die Option --batch angegeben wurde. Dies unterscheidet sich von GnuPG Version 1.x.

Für die obigen Optionen benötigen Sie wahrscheinlich entweder --pinentry-mode loopback(ermöglicht die Eingabe neuer Informationen, z. B. eines neuen Dateinamens bei Konflikten), oder --batchgpg ignoriert die Passphrasenoptionen und fragt den Agenten immer noch nach einer Passphrase (einer Fehler-IMO). Das könnte auch nützlich sein:

  • --passphrase-repeat n
    Geben Sie an, wie oft gpg eine neue Passphrase wiederholen soll. Dies ist hilfreich, wenn Sie sich eine Passphrase merken möchten. Standardmäßig 1 Wiederholung.

Sie können die Passphrase nur einmal eingeben und read/ in einer Shell / Bash-Variablen speichern (etwa $password), um sie später mit abzurufen --passphrase="$password". So etwas wie

until gpg --pinentry-mode loopback --passphrase="$password" --output $file_to_edit $ecrypted_file; do read -r password; done  #Got out of the loop with a correct password, now echo "Some edit" >> $file_to_edit  gpg --pinentry-mode loopback --passphrase="$password" --output $ecrypted_file --yes --symmetric $file_to_edit 

( --yesüberschreiben)

Hinweis: `--pinentry-mode` ist nur für gpg 2.x verfügbar (nicht für gpg 1.x). Mit gpg 1.x ist auch die Option --batch nicht erforderlich. francescop21 vor 5 Jahren 0
Das ist wahr, mit gpg 1 --passphrase [& --passphrase-file & --passphrase-fd] funktionierte es tatsächlich ohne zusätzliche Tricks ;-) Eine weitere Überraschung ist, dass gpg sich die Passphrase für eine Weile (Minuten?) Merken und entschlüsseln wird Dieselbe Datei erneut * ohne * nach der Passphrase zu fragen Xen2050 vor 5 Jahren 1