GoCryptFS

Aus Foxwiki

GoCryptFS - ein FUSE-Dateisystem zur Kryptografie auf Dateiebene

Beschreibung

  • Alternative zu EncFS, eCryptfs
  • Linux, OS X, Windows

Hintergründe

Die Kryptografie des Dateiinhalts erfolgt im Forward Mode mit AES-GCM und im Reverse Mode mit AES-SIV-512.

  • Der hierfür benötigte Schlüssel wird mit dem Scrypt Algorithmus aus dem Masterkey abgeleitet.
  • Die Dateinamen werden im Encrypt-Mix-Encrypt – Verfahren verschlüsselt.
  • Jede Kryptografie bietet mögliche Angriffswege.
  • Daher wird die Sicherheit der Kryptografie grundsätzlich erhöht, wenn man Daten mit verschiedenen Programmen geschichtet verschlüsselt.
  • Aus den von GoCryptfs verschlüsselten Dateien kann ein Angreifer erkennen, wie viele Dateien man hat, und welche Größe diese haben.
  • Daraus könnten Rückschlüsse auf den Inhalt der Dateien möglich sein.
  • Dem kann man entgegenwirken, indem man die Dateien vor der Kryptografie zerlegt oder in Container zusammenfasst.

Forward und Reverse Mode

  • Im Forward Mode werden die Daten verschlüsselt gespeichert, der entschlüsselte Lese- und Schreibzugriff erfolgt über das FUSE-Dateisystem.
    • Dieser Betriebsmodus könnte beispielsweise eingesetzt werden, um die Daten in der Cloud zu speichern und auf diese von verschiedenen Geräten zuzugreifen.
  • Der Reverse Modus dient dazu Dateien, die unverschlüsselt (lokal) gespeichert sind, zur Datensicherung zu verschlüsseln.
    • Die verschlüsselten Dateien bestehen nur, solange das FUSE-Dateisystem eingehängt ist.
    • Aus dem FUSE-Dateisystem können die verschlüsselten Dateien manuell oder mit einem Datensicherungsprogramm (z. B. rsync) in einen dauerhaften Speicher kopiert werden.

Forward Mode

Die Dateien werden im Verzeichnis CIPHERDIR verschlüsselt gespeichert.

  • Der Inhalt von CIPHERDIR wird im Verzeichnis MOUNTPOINT über das FUSE Dateisystem entschlüsselt zum lesen und schreiben angezeigt, wenn MOUNTPOINT eingehängt ist.

Reverse Mode

Im Reverse Mode wird der Inhalt von CIPHERDIR über das FUSE-Dateisystem „read-only“ angezeigt, wenn dieses eingehängt ist.

Installation

sudo apt install gocryptfs

Syntax

Optionen

Common Options (use -hh to show all)

Option Beschreibung
-aessiv AES-SIV-Kryptografie verwenden (mit -init)
-allow_other Anderen Benutzern den Zugriff auf die Halterung erlauben
-i, -idle Automatisches Aushängen nach festgelegter Leerlaufzeit
-config Benutzerdefinierter Pfad zur Konfigurationsdatei
-ctlsock Steuersteckdose am Standort erstellen
-extpass Externes Programm aufrufen, um nach dem Passwort zu fragen
-fg Bleib im Vordergrund
-fsck Dateisystemintegrität prüfen
-fusedebug FUSE-Aufrufe debuggen
-h, -help Dieser kurze Hilfetext
-hh Langer Hilfetext mit allen Optionen
-init Verschlüsseltes Verzeichnis initialisieren
-info Informationen zum verschlüsselten Verzeichnis anzeigen
-masterkey Mount mit explizitem Hauptschlüssel statt Passwort
-nonempty Mounten über nicht leeres Verzeichnis zulassen
-nosyslog Leiten Sie Protokollnachrichten nicht an syslog um
-passfile Passwort aus Datei lesen
-passwd Kennwort ändern
-plaintextnames Dateinamen nicht verschlüsseln (mit -init)
-q, -quiet Informationsnachrichten stummschalten
-reverse Rückwärtsmodus aktivieren
-ro Schreibgeschützt einbinden
-speed Führen Sie einen Krypto-Geschwindigkeitstest durch
-version Print version information
-- Optionsparsing stoppen

Parameter

Umgebungsvariablen

Exit-Status

Dateien

Anwendung

Initialisierung

Erstellung der Konfigurationsdatei und der Datei gocryptfs.diriv (verschlüsselte Verzeichnisstruktur)

gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf ~/CIPHERDIR

Verzeichnis einhängen

 gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf ~/CIPHERDIR ~/MOUNTPOINT

Verzeichnis nutzen

Verzeichnis aushängen

 fusermount -u ~/MOUNTPOINT

Home-Verzeichnis verschlüsseln

Konfiguration

$ gocryptfs -init|-passwd|-info [OPTIONS] CIPHERDIR

Mount

$ gocryptfs [OPTIONS] CIPHERDIR MOUNTPOINT

Verzeichnis verschlüsseln

Verzeichnisse anlegen

$ mkdir ~/CIPHERDIR ~/MOUNTPOINT ~/.config/gocryptfs

Mount beim Login

Installation

# apt install libpam-mount

Konfiguration

  1. Copy the gocryptfs binary into /usr/local/bin.
# sudo cp ... 
  1. Create a gocryptfs filesystem:
$ mkdir /home/testuser/cipher /home/testuser/plain
$ gocryptfs -init /home/testuser/cipher
PAM konfigurieren

An example /etc/pam.d/sshd on Fedora 24 and an example /etc/pam.d/sddm on Fedora 31 Workstation is shown below.

Basically, pam_mount must be called two times:

  1. As the last element in "auth" so it gets the password.
  2. As the last element in "session", where it performs the actual mount.

/etc/pam.d/sshd

 #%PAM-1.0
 auth	    required	 pam_sepermit.so
 auth       substack     password-auth
 auth       include      postlogin
 
 # Used with polkit to reauthorize users in remote sessions
 -auth      optional     pam_reauthorize.so prepare
 
 auth optional pam_mount.so
 
 account    required     pam_nologin.so
 account    include      password-auth
 password   include      password-auth
  
 # pam_selinux.so close should be the first session rule
 session    required     pam_selinux.so close
 session    required     pam_loginuid.so
 
 # pam_selinux.so open should only be followed by sessions to be executed in the user context
 session    required     pam_selinux.so open env_params
 session    required     pam_namespace.so
 session    optional     pam_keyinit.so force revoke
 session    include      password-auth
 session    include      postlogin
 
 # Used with polkit to reauthorize users in remote sessions
 -session   optional     pam_reauthorize.so prepare
 
 session optional pam_mount.so

/etc/pam.d/sddm

 auth        [success=done ignore=ignore default=bad] pam_selinux_permit.so
 auth        substack      password-auth
 -auth       optional      pam_gnome_keyring.so
 -auth       optional      pam_kwallet5.so
 -auth       optional      pam_kwallet.so
 auth        include       postlogin
 
 auth       optional     pam_mount.so
 
 account     required      pam_nologin.so
 account     include       password-auth
 
 password    include       password-auth
 
 session     required      pam_selinux.so close
 session     required      pam_loginuid.so
 session     optional      pam_console.so
 -session    optional      pam_ck_connector.so
 session     required      pam_selinux.so open
 session     optional      pam_keyinit.so force revoke
 session     required      pam_namespace.so
 session     include       password-auth
 -session    optional      pam_gnome_keyring.so auto_start
 -session    optional      pam_kwallet5.so auto_start
 -session    optional      pam_kwallet.so auto_start
 session     include       postlogin
 
 session    optional     pam_mount.so


Folgendes vor dem schließenden Tag </pam_mount> hinzufügen und testuser durch den eigenen Benutzernamen ersetzen.

/etc/security/pam_mount.conf.xml

 <volume user="testuser" fstype="fuse" options="nodev,nosuid,quiet"
 path="/usr/local/bin/gocryptfs#/home/%(USER)/cipher" mountpoint="/home/%(USER)/plain" />

Das gesamte Home-Verzeichnis verschlüsseln

Folgendes vor dem schließenden Tag </pam_mount> hinzufügen und testuser durch den eigenen Benutzernamen ersetzen.

/etc/security/pam_mount.conf.xml

 <volume user="testuser" fstype="fuse" options="nodev,nosuid,quiet,nonempty,allow_other"
 path="/usr/local/bin/gocryptfs#/home/%(USER).cipher" mountpoint="/home/%(USER)" />

Passwörter

Zum Entschlüsseln der Dateien ist die GoCryptFS-Konfigurationsdatei und das Passwort erforderlich.

  • Ist ein Angreifer im Besitz der GoCryptFS-Konfigurationsdatei, könnte er, z. B. durch Ausprobieren, das Passwort herausfinden und die Dateien entschlüsseln.
  • Ohne Angabe der Option -config speichert GoCryptFS die Konfigurationsdatei unter dem Namen gocryptfs.conf in das Verzeichnis mit den verschlüsselten Dateien.
  • Werden die verschlüsselten Dateien in einer Cloud oder auf Datenträgern gespeichert, die einem Angreifer in die Hände fallen können, ist es ratsam, die Konfigurationsdatei getrennt von den verschlüsselten Dateien zu speichern.

Passwort ändern

 gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf -passwd ~/CIPHERDIR
  • Gemeinsam mit der Option -masterkey kann ein neues Passwort vergeben werden, wenn man das Passwort vergessen hat, aber der Masterkey vorliegt.
  • Weitere Informationen enthält die Manpage zu GoCryptFS.

Passwort oder Konfigurationsdatei verloren

Liegt der Masterkey aus der Initialisierung noch vor, können die verschlüsselten Daten mit dessen Eingabe im Terminal geöffnet werden, wobei eine eventuell vorhandene Konfigurationsdatei ignoriert wird.

 gocryptfs -masterkey=stdin

Mit der Option -masterkey <Masterkey> können die verschlüsselten Daten, z. B. über ein Skript, ohne Konfigurationsdatei geöffnet werden.

  • Hierbei kann der Masterkey mit ps -auxwww aus dem Hauptspeicher ausgelesen werden
  • Dieses Risiko liegt bei der Option -masterkey=stdin nicht vor.

Verzeichnis zum Speichern von GoCryptFS-Konfigurationsdateien erstellen

 mkdir ~/.config/gocryptfs/

Verzeichnisse CIPHERDIR und KLARTEX anlegen

 mkdir ~/CIPHERDIR ~/MOUNTPOINT

GocryptFS initialisieren

Ohne die Option -config wird die Konfigurationsdatei als ~/CIPHERDIR/gocryptfs.conf gespeichert.

 gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf -reverse ~/CIPHERDIR

Verzeichnis CIPHERDIR einhängen

Im Reverse Mode können Dateien mit den Optionen -exclude, -exclude-wildcard und -exclude-from von der verschlüsselten Ansicht ausgeschlossen werden.

  • Soll rsync für die Datensicherung verwendet werden, sollte, um Fehler und Warnmeldungen zu vermeiden, der Ausschluss beim Einhängen mit GoCryptFS erfolgen.
 gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf -reverse ~/MOUNTPOINT ~/CIPHERDIR

Datensicherung durchführen

 cp -a ~/CIPHERDIR ~/BACKUP

CIPHERDIR aushängen

 fusermount -u ~/CIPHERDIR



Anhang

Siehe auch

Dokumentation

Man-Pages
Info-Pages

Links

Projekt
  1. Projektseite: https://nuetzlich.net/gocryptfs/
  2. Quellcode und Dokumentation: https://github.com/rfjakob/gocryptfs
Weblinks
  1. AES-GCM: https://eprint.iacr.org/2004/193.pdf
  2. AES-SIV-512: https://tools.ietf.org/html/rfc5297
  3. Scrypt Schlüsselableitung: https://tools.ietf.org/html/rfc7914
  4. Encrypt-Mix-Encrypt : https://github.com/rfjakob/eme
  5. Sicherheitsgutachten: https://defuse.ca/audits/gocryptfs.htm
  6. Version für Windows: https://github.com/bailey27/cppcryptfs