Unterabschnitte


Daten-Verschlüsselung

Bacula ermöglicht Ihnen die Backup-Daten Clientseitig zu verschlüsseln und zu signieren, bevor sie zum Storage-Dienst gesendet werden. Während der Wiederherstellung werden die Signaturen überprüft und Abweichungen gemeldet. Director- und Storage-Dienst haben dabei zu keinem Zeitpunkt Zugriff auf unverschlüsselte Daten.

Dabei gibt es zwei sehr wichtige Punkte zu beachten:

Die Verschlüsselung und Signierung wird mittels RSA privaten Schlüssel in Verbindung mit selbstsignierten X509 öffentlichen Zertifikate durchgeführt. Dieses Verfahren ist auch als PKI (Public-Key-Infrastruktur) bekannt.

Jeder Client-Dienst sollte sein eigenes einzigartiges privates/öffentliches Schlüssel-paar besitzen. Zusätzlich, zu diesem Schlüssel-Paar, können beliebig viele ,,Master Keys`` angegeben werden. Das sind Schlüssel-Paare die zum entschlüsseln benutzt werden können, falls der Schlüssel des Client-Dienstes verloren geht. Nur die öffentlichen Schlüssel der Master-Keys sollten auf dem Client zur Verfügung stehen und niemals die privaten.

Die Master-Keys sollten zudem an einem sicheren Ort aufbewart werden, zum Beispiel in einem feuerfesten Stahlschrank oder einem Bankdepot. Diese Schlüssel sollten nie auf den Systemen auf denen der Director- und der Storage-Dienst läuft aufbewart werden. Ansonsten ist es eventuell unautorisierten Benutzer möglich auf die verschlüsselten Daten zuzugreifen.

Obwohl weniger kritisch, sind es auch die Client-Schlüssel Wert, an einem sicheren Ort gespeichert zu werden.

WARNUNG: Wenn Sie jemals die zur Entschlüsselung benötigten Schlüssel verlieren, können Sie keine Daten mehr aus Ihrem Backups wiederherstellen! Heben Sie IMMER eine Kopie der Schlüssel an einem sicheren Ort außerhalb Ihres Standortes auf.

Der wesentliche Ablauf eines jeden Backup-Jobs mit Verschlüsselung ist:

  1. Der Client-Dienst generiert einen Session-Schlüssel.
  2. Der Client-Dienst verschlüsselt diesen Session-Schlüssel mittels PKI für alle öffentlichen Schlüssel die konfiguriert sind (Client- und Master-Schlüssel).
  3. Der Client-Dienst benutzt den Session-Schlüssel zum symetrischen Verschlüsseln der Daten.

Bacula mit Unterstützung für Verschlüsselung kompilieren

Um die Unterstützung der Daten-Verschlüsselung aktivieren zu können, müssen die OpenSSL Header und Bibliotheken installiert sein. Bei der Konfiguration des Bacula-Quelltextes muss folgende Option angegeben werden:

   ./configure --with-openssl ...

Technische Einzelheiten der Verschlüsselung

Diese Verschl,,usselung benutzt 128-Bit AES-CBC mit RSA verschlüsselten symetrischen Session-Schlüsseln. Diese RSA-Schlüsseln werden vom Benutzer erstellt. Wenn Sie OpenSSL in Version 0.9.8 (oder größer) benutzen, wird für die Signierung der Datei-Hashes SHA-256 verwendet, ansonsten SHA-1.

Eine Konfigurations-Möglichkeit des End-Benutzers für den Algorithmus ist momentan nicht vorgesehen, nur die oben genannten werden verwendet. Allerdings unterstützen die auf die Volumes geschriebenen Daten auch frei wählbare symetrische, asymetrische und Digest Algorithmen. Es sind also noch viele Möglichkeiten zur Erweiterung der Verschlüsselung vorhanden.

Director-seitig wird unterstützt:

Symmetrische Verschlüsselung:
    - 128, 192 und 256-bit AES-CBC
    - Blowfish-CBC

Asymmetrische Verschlüsselung (zum verschlüsseln der symmetrischen Session-Keys):
    - RSA

Digest Algorithmen:
    - MD5
    - SHA1
    - SHA256
    - SHA512

Die verschiedenen Algorithmen werden durch eine wiederverwendbare OpenSSL-Schnittstelle bereitgestellt. Dadurch ist es jederzeit Möglich neue Verschlüsselungs-Methoden zu implementieren. Das Volume-Format ist DER-verschlüsseltes ASN.1, entwickelt nach der ``Cryptographic Message Syntax,, des RFC 3852. Leider war die direkte Verwendung von CMS nicht möglich, da zu dem Zeitpunkt der Entwicklung kein freier DER-Decoder/Encoder für Datenströme zur Verfügung stand.

Entschlüsselung mit einem Master Key

Bevorzugter Weise sollten Sie immer eine unverschlü sselte Kopie der Client-Schlüssel an einem sicheren Ort aufbewahren. Falls sie trotzdem verloren gehen, können Sie die gesicherten Daten noch mittels der Master-Keys entschüsseln.

Dazu müssen folgende Voraussetzungen erfüllt sein:

Erstellung privater/öffentlicher Schlüssel

Mit den folgenden Kommandos generieren Sie ein Master-Key-Paar:

  openssl genrsa -out master.key 2048
  openssl req -new -key master.key -x509 -out master.cert

Die folgenden Kommandos erstellen das Schlüssel-Paar für den Client-Dienst:

  openssl genrsa -out fd-example.key 2048
  openssl req -new -key fd-example.key -x509 -out fd-example.cert
  cat fd-example.key fd-example.cert >fd-example.pem

Bezüglich der verwendeten Datei-Erweiterung für die Schlüssel gibt es eine Menge Verwirrung. Zum Beispiel kann eine .pem-Datei folgendes enthalten: private Schlüssel (RSA und DSA), öffentliche Schlüssel (RSA und DSA) und Zertifikate (x509). Das ist das von OpenSSLstandardmäßig verwendete Format. Es speichert die Daten im Base64 codiertem DER-Format, das von ASCII-Header umgeben wird. So kann es als Text-Datei zwischen verschiedenen Computer übertragen werden. Eine .pem-Datei kann eine beliebige Anzahl von entweder privaten und/oder öffentlichen Schlüsseln enthalten. In der Bacula-Konfiguration wird diese Datei-Erweiterung nur für Dateien verwendet die jeweils einen privaten und einen öffentlichen Schlüssel enthalten. Zudem wird, wie oben zu sehen, für Dateien die nur einen einzigen öffentlichen Schlüssel enthalten die Erweiterung .cert verwendet (als Verweis auf die x509 Zertifikats-Kodierung).

Beispiel-Konfiguration mit Verschlüsselung

bacula-fd.conf

FileDaemon
   Name = example-fd
   FDport = 9102
   WorkingDirectory = /var/bacula/working
   Pid Directory = /var/run
   Maximum Concurrent Jobs = 20
 
   PKI Signatures = Yes            # aktiviert die Daten-Signierung
   PKI Encryption = Yes            # aktiviert die Daten-Verschlüsselung
   PKI Keypair = "/etc/bacula/fd-example.pem"    # private und öffentliche Schlüssel
   PKI Master Key = "/etc/bacula/master.cert"    # NUR der öffentliche Schlüssel

eric 2009-05-06