2 \chapter{Daten-Verschl\"{u}sselung}
4 \index[general]{Daten-Versch\"{u}sselung}
5 \index[general]{Versch\"{u}sselung!Daten-}
7 Bacula erm\"{o}glicht Ihnen die Backup-Daten Clientseitig zu verschl\"{u}sseln
8 und zu signieren, bevor sie zum Storage-Dienst gesendet werden. W\"{a}hrend
9 der Wiederherstellung werden die Signaturen \"{u}berpr\"{u}ft und Abweichungen
10 gemeldet. Director- und Storage-Dienst haben dabei zu keinem Zeitpunkt Zugriff
11 auf unverschl\"{u}sselte Daten.
13 Dabei gibt es zwei sehr wichtige Punkte zu beachten:
15 \item zum einen gilt es bei der Wiederherstellung zu bedenken,
16 dass es f\"{u}r den Director-Dienst m\"{o}glich ist neue Schl\"{u}ssel
17 oder eine andere Konfigurations-Datei auf dem Client zu erstellen.
18 Dadurch kann die Verschl\"{u}sselung abgeschaltet oder mit ungewollten
19 Schl\"{u}sseln durchgef\"{u}hrt werden. Damit das nicht unbeabsichtigt
20 passieren kann, sollten Sie nie den Speicherortder Schl\"{u}ssel, noch
21 die Schl\"{u}ssel selbst \"{a}ndern. Falls solche \"{A}nderungen jemals
22 notwendig sind, sollten Sie sicherstellen, dass niemals aus versehen
23 die alte Konfiguration wiederhergestellt wird. Im schlimmsten Fall
24 sind Sie sp\"{a}ter nicht mehr in der Lage sich mit dem Client-Dienst
26 \item Die Verschl\"{u}sselung wird nicht bei den Metadaten, wie
27 Verzeichnisname, Rechte und Eigent\"{u}mer der Dateien durchgef\"{u}hrt.
28 Ebensowenig werden erweiterte Datei-Attribute verschl\"{u}sselt.
29 Mac OS X \elink{resource forks}{http://en.wikipedia.org/wiki/Resource_fork}
30 werden allerdings verschl\"{u}sselt.
33 Die Verschl\"{u}sselung und Signierung wird mittels RSA privaten Schl\"{u}ssel
34 in Verbindung mit selbstsignierten X509 \"{o}ffentlichen Zertifikate durchgef\"{u}hrt.
35 Dieses Verfahren ist auch als \elink{PKI}{http://de.wikipedia.org/wiki/Public-Key-Infrastruktur}
36 (Public-Key-Infrastruktur) bekannt.
38 Jeder Client-Dienst sollte sein eigenes einzigartiges privates/\"{o}ffentliches
39 Schl\"{u}ssel-paar besitzen. Zus\"{a}tzlich, zu diesem Schl\"{u}ssel-Paar,
40 k\"{o}nnen beliebig viele "`Master Keys"' angegeben werden. Das sind
41 Schl\"{u}ssel-Paare die zum entschl\"{u}sseln benutzt werden k\"{o}nnen,
42 falls der Schl\"{u}ssel des Client-Dienstes verloren geht. Nur die \"{o}ffentlichen
43 Schl\"{u}ssel der Master-Keys sollten auf dem Client zur Verf\"{u}gung stehen
44 und {\bf niemals} die privaten.
46 Die Master-Keys sollten zudem an einem sicheren Ort aufbewart werden,
47 zum Beispiel in einem feuerfesten Stahlschrank oder einem Bankdepot.
48 Diese Schl\"{u}ssel sollten nie auf den Systemen auf denen der Director-
49 und der Storage-Dienst l\"{a}uft aufbewart werden. Ansonsten ist es eventuell
50 unautorisierten Benutzer m\"{o}glich auf die verschl\"{u}sselten Daten zuzugreifen.
52 Obwohl weniger kritisch, sind es auch die Client-Schl\"{u}ssel Wert,
53 an einem sicheren Ort gespeichert zu werden.
55 WARNUNG: Wenn Sie jemals die zur Entschl\"{u}sselung ben\"{o}tigten
56 Schl\"{u}ssel verlieren, k\"{o}nnen Sie keine Daten mehr aus Ihrem Backups
57 wiederherstellen! Heben Sie {\bf IMMER} eine Kopie der Schl\"{u}ssel
58 an einem sicheren Ort au{\ss}erhalb Ihres Standortes auf.
60 Der wesentliche Ablauf eines jeden Backup-Jobs mit Verschl\"{u}sselung ist:
62 \item Der Client-Dienst generiert einen Session-Schl\"{u}ssel.
63 \item Der Client-Dienst verschl\"{u}sselt diesen Session-Schl\"{u}ssel mittels PKI
64 f\"{u}r alle \"{o}ffentlichen Schl\"{u}ssel die konfiguriert sind
65 (Client- und Master-Schl\"{u}ssel).
66 \item Der Client-Dienst benutzt den Session-Schl\"{u}ssel zum symetrischen
67 Verschl\"{u}sseln der Daten.
71 \section{Bacula mit Unterst\"{u}tzung f\"{u}r Verschl\"{u}sselung kompilieren}
72 \index[general]{Bacula mit Unterst\"{u}tzung f\"{u}r Verschl\"{u}sselung kompilieren}
74 Um die Unterst\"{u}tzung der Daten-Verschl\"{u}sselung aktivieren zu k\"{o}nnen,
75 m\"{u}ssen die OpenSSL Header und Bibliotheken installiert sein. Bei der Konfiguration
76 des Bacula-Quelltextes muss folgende Option angegeben werden:
79 ./configure --with-openssl ...
82 \section{Technische Einzelheiten der Verschl\"{u}sselung}
83 \index[general]{Technische Einzelheiten der Verschl\"{u}sselung}
85 Diese Verschl"`{u}sselung benutzt 128-Bit AES-CBC mit RSA verschl\"{u}sselten
86 symetrischen Session-Schl\"{u}sseln. Diese RSA-Schl\"{u}sseln werden vom
87 Benutzer erstellt. Wenn Sie OpenSSL in Version 0.9.8 (oder gr\"{o}{\ss}er)
88 benutzen, wird f\"{u}r die Signierung der Datei-Hashes SHA-256 verwendet,
91 Eine Konfigurations-M\"{o}glichkeit des End-Benutzers f\"{u}r den Algorithmus
92 ist momentan nicht vorgesehen, nur die oben genannten werden verwendet.
93 Allerdings unterst\"{u}tzen die auf die Volumes geschriebenen Daten auch
94 frei w\"{a}hlbare symetrische, asymetrische und Digest Algorithmen.
95 Es sind also noch viele M\"{o}glichkeiten zur Erweiterung
96 der Verschl\"{u}sselung vorhanden.
98 Director-seitig wird unterst\"{u}tzt:
101 Symmetrische Verschl\"{u}sselung:
102 - 128, 192 und 256-bit AES-CBC
105 Asymmetrische Verschl\"{u}sselung (zum verschl\"{u}sseln der symmetrischen Session-Keys):
115 Die verschiedenen Algorithmen werden durch eine wiederverwendbare
116 OpenSSL-Schnittstelle bereitgestellt. Dadurch ist es jederzeit
117 M\"{o}glich neue Verschl\"{u}sselungs-Methoden zu implementieren.
118 Das Volume-Format ist DER-verschl\"{u}sseltes ASN.1, entwickelt nach
119 der "'Cryptographic Message Syntax"` des RFC 3852. Leider war die
120 direkte Verwendung von CMS nicht m\"{o}glich, da zu dem Zeitpunkt der
121 Entwicklung kein freier DER-Decoder/Encoder f\"{u}r Datenstr\"{o}me zur
124 \section{Entschl\"{u}sselung mit einem Master Key}
125 \index[general]{Entschl\"{u}sselung mit einem Master Key}
127 Bevorzugter Weise sollten Sie immer eine unverschl\"{u }sselte Kopie
128 der Client-Schl\"{u}ssel an einem sicheren Ort aufbewahren.
129 Falls sie trotzdem verloren gehen, k\"{o}nnen Sie die gesicherten Daten
130 noch mittels der Master-Keys entsch\"{u}sseln.
132 Dazu m\"{u}ssen folgende Voraussetzungen erf\"{u}llt sein:
134 \item verketten Sie den privaten und \"{o}ffentlichen Master-Schl\"{u}ssel
135 in einer einzelnen Schl\"{u}ssel-Paar-Datei, zum Beispiel mit:
136 [user@host]\$ cat master.key master.cert \gt master.keypair
138 \item Setzen Sie den Eintrag "'PKI Keypair"` in der Client-Konfiguration auf
139 die eben erzeugte Datei:
142 PKI Keypair = master.keypair
145 \item Starten Sie die Wiederherstellung, und das Master-Key-Paar
146 wird zum entschl\"{u}sseln der Daten verwendet.
150 \section{Erstellung privater/\"{o}ffentlicher Schl\"{u}ssel}
151 \index[general]{Erstellung privater/\"{o}ffentlicher Schl\"{u}ssel}
153 Mit den folgenden Kommandos generieren Sie ein Master-Key-Paar:
157 openssl genrsa -out master.key 2048
158 openssl req -new -key master.key -x509 -out master.cert
162 Die folgenden Kommandos erstellen das Schl\"{u}ssel-Paar f\"{u}r
167 openssl genrsa -out fd-example.key 2048
168 openssl req -new -key fd-example.key -x509 -out fd-example.cert
169 cat fd-example.key fd-example.cert >fd-example.pem
173 Bez\"{u}glich der verwendeten Datei-Erweiterung f\"{u}r die Schl\"{u}ssel
174 gibt es eine Menge Verwirrung. Zum Beispiel kann eine .pem-Datei folgendes
175 enthalten: private Schl\"{u}ssel (RSA und DSA), \"{o}ffentliche Schl\"{u}ssel
176 (RSA und DSA) und Zertifikate (x509). Das ist das von OpenSSLstandardm\"{a}{\ss}ig
177 verwendete Format. Es speichert die Daten im Base64 codiertem DER-Format,
178 das von ASCII-Header umgeben wird. So kann es als Text-Datei zwischen verschiedenen
179 Computer \"{u}bertragen werden. Eine .pem-Datei kann eine beliebige Anzahl von
180 entweder privaten und/oder \"{o}ffentlichen Schl\"{u}sseln enthalten.
181 In der Bacula-Konfiguration wird diese Datei-Erweiterung nur f\"{u}r
182 Dateien verwendet die jeweils einen privaten und einen \"{o}ffentlichen
183 Schl\"{u}ssel enthalten. Zudem wird, wie oben zu sehen, f\"{u}r
184 Dateien die nur einen einzigen \"{o}ffentlichen Schl\"{u}ssel enthalten
185 die Erweiterung .cert verwendet (als Verweis auf die x509 Zertifikats-Kodierung).
187 \section{Beispiel-Konfiguration mit Verschl\"{u}sselung}
188 \index[general]{Beispiel!Client-Konfiguration mit Verschl\"{u}sselung}
196 WorkingDirectory = /var/bacula/working
197 Pid Directory = /var/run
198 Maximum Concurrent Jobs = 20
200 PKI Signatures = Yes # aktiviert die Daten-Signierung
201 PKI Encryption = Yes # aktiviert die Daten-Verschl\"{u}sselung
202 PKI Keypair = "/etc/bacula/fd-example.pem" # private und \"{o}ffentliche Schl\"{u}ssel
203 PKI Master Key = "/etc/bacula/master.cert" # NUR der \"{o}ffentliche Schl\"{u}ssel