Mit vim und gpg mehr Privatsphäre schaffen

Mit vi und gpg lassen sich einfach und automatisch Daten auf der Kommandozeile sicher verschlüsseln. Ein Beispiel mit symmetrischer Verschlüsselung durch eine Passphrase:

schulz@lshs:~ >cat > vertraulich.txt
dieses ist eine vertrauliche Information:
Der Schutz der Privatsphäre ist ein Grundrecht.
^D
schulz@lshs:~ >gpg -c vertraulich.txt
schulz@lshs:~ >shred vertraulich.txt
schulz@lshs:~ >

Allerdings kann es mühsam sein, die Datei jedes mal manuell zu ver- und entschlüsseln, wenn sie bearbeitet werden soll. Besonders fatal wäre es, wenn man einfach vergisst, die entschlüsselte Datei zu löschen.
Der vim bietet einen einfachen Weg, die Datei zur Bearbeitung automatisch zu entschlüsseln und sie beim Speichern automatisch wieder zu verschlüsseln. Der originale Autor dieses Systems, Wouter Hanegraaff, hat diese Möglichkeit entwickelt, die jedem gpg- und vim-Benutzer helfen kann. Osamu Aoki hat dieses System noch ein wenig verbessert, so dass am Ende folgender automatisierter Arbeitsfluss für eine neue Datei, die geschützt werden soll, herauskommt:

schulz@lshs:~ > vi vertraulich.asc

Die Datei wird automatisch durch den Schlüssel der gpg-Standard-Identität verschlüsselt und gespeichert. Das heisst, nach dem Verlassen des vim liegt nur die verschlüsselte Datei im Dateisystem.
Möchte man sie erneut bearbeiten, öffnet man die verschlüsselte Datei einfach erneut im vim:

schulz@lshs:~ > vi vertraulich.asc

Automatisch wird nach der Passphrase gefragt und die Datei für den Editor entschlüsselt. Man bearbeitet die Datei nach Gutdünken und speichert und beendet. Dabei wird wieder automatisch verschlüsselt.

Wie funktioniert es?


Notwendig für diesen Automatismus ist folgende Konfiguration des vim, die in $HOME/.vimrc, vorgenommen wird:

" Automatisches Bearbeiten von gpg verschlüsselten Dateien.
" Placed Public Domain by Wouter Hanegraaff
" (asc support and sh -c"..." added by Osamu Aoki)
augroup aencrypted
au!

" First make sure nothing is written to ~/.viminfo while editing
" an encrypted file.
autocmd BufReadPre,FileReadPre *.asc set viminfo=
" We don't want a swap file, as it writes unencrypted data to disk
autocmd BufReadPre,FileReadPre *.asc set noswapfile
" Switch to binary mode to read the encrypted file
autocmd BufReadPre,FileReadPre *.asc set bin
autocmd BufReadPre,FileReadPre *.asc let ch_save = &ch|set ch=2
autocmd BufReadPost,FileReadPost *.asc '[,']!sh -c "gpg --decrypt 2> /dev/null"
" Switch to normal mode for editing
autocmd BufReadPost,FileReadPost *.asc set nobin
autocmd BufReadPost,FileReadPost *.asc let &ch = ch_save|unlet ch_save
autocmd BufReadPost,FileReadPost *.asc execute ":doautocmd BufReadPost " . expand("%:r")

" Convert all text to encrypted text before writing
autocmd BufWritePre,FileWritePre *.asc '[,']!sh -c "gpg --default-recipient-self -ae 2>/dev/null"
" Undo the encryption so we are back in the normal text, directly
" after the file has been written.
autocmd BufWritePost,FileWritePost *.asc u
augroup END

Die vorgestellte Konfiguration sorgt dafür, dass automatisch alle Dateien mit der Endung "asc" beim Laden ent- und beim Speichern verschlüsselt werden. Viel Vergnügen mit der verbesserten Privatsphäre!