Putzfimmel
Daten sicher löschen
Besser löschen
Wollen Sie die Daten der Festplatte also unwiederbringlich löschen, setzen Sie besser auf standardisierte Löschmethoden. Zu den in Deutschland bekanntesten zählen:
- die Richtlinien des BSI zum Geheimschutz von Verschlußsachen beim Einsatz von IT (VSITR), Hinweisblatt Nr. 11, [BMI]
- der Standard 5220.22-M des US-Verteidigungsministeriums, [DOD]
- der Bruce-Schneier-Algorithmus, [BSA]
- der Peter-Gutmann-Algorythmus, [PGA]
Die genannten Algorithmen überschreiben die Sektoren mehrfach mit Daten bestimmter Muster. Die Muster bestehen aus den Bytes 0x00, 0xFF und Zufallswerten. Um echte Zufallsdaten zu generieren, die niemand errät und anschließend von den Lesesignalen wieder abzieht, wenden die meisten Verfahren einen Zufallszahlen-Generator an.
Gute Sicherheit erreichen Sie bereits mit Hilfe spezieller Gerätedateien unter Linux, wie zum Beispiel dem Device /dev/urandom, das einfache Zufallsfolgen erzeugt. Mit /dev/zero produzieren Sie beliebig viele Null-Bytes (0x00). Einer Kombination aus beiden Dateien liefert schon die komplette Werkzeugbox.
Der Kasten "Wie der Zufall will" erläutert Hintergründe zur Qualität der beiden Zufallsgeneratoren /dev/random und /dev/urandom. Als brauchbar für einen stetig fließenden Strom von Zufallszahlen für derart große Bereiche wie eine Festplatte erweist sich in der Praxis nur /dev/urandom.
Die beiden Dateien /dev/zero und /dev/urandom wenden Sie jetzt analog nach einem der obigen Verfahren kombiniert an. Für den Hausgebrauch genügt das Ausführen eines Skriptes wie in Listing 3. Aber Vorsicht: Gemäß dem Ziel, die Daten unwiederbringlich zu löschen, sollten Sie unbedingt sicher bei der Wahl des Gerätes sein.
Listing 3
#!/bin/bash
# Parameter $1 ist das zu löschende Geräte
BLOCKSIZE=8192
echo -e "Zu löschendes Gerät: $1\nBlockgröße beim Schreiben: $BLOCKSIZE"
echo "[`date +"%a %T"`] Durchgang 1"
d if=/dev/zero of=$1 bs=$BLOCKSIZE
echo "[`date +"%a %T"`] Durchgang 2"
d if=/dev/urandom of=$1 bs=$BLOCKSIZE
echo "[`date +"%a %T"`] Durchgang 3"
dd if=/dev/zero of=$1 bs=$BLOCKSIZE
echo "[`date +"%a %T"`] $1 gelöscht"
Das Skript in Listing 2 schreibt einmal Nullen über das gesamte Laufwerk, anschließend Zufallswerte und dann wieder Nullen. Die drei Durchgänge reichen in der Regel. Um eine 80 GByte große Festplatte zu löschen, läuft das kleine Programm allerdings bereits einige Stunden.
Bei Verschlusssachen mit Geheimschutzes sehen Datenschützer sieben Durchläufe vor, ebenso beim Standard 5220.22-M des US-Verteidigungsministeriums. Der Peter-Gutmann-Algorithmus – technologisch der modernste – erfordert jedoch mit 35 Durchläufen die meiste Geduld beim Anwender. Wenn Sie nach dem Ausführen des Skriptes auf dem Laufwerk nachschauen, dürften hier nur noch Nullen zu sehen sein.
Wie der Zufall will
Die speziellen Dateien /dev/random und /dev/urandom generieren mit Hilfe eines Kernel-Treibers Pseudozufallszahlen. Der Bergiff "Pseudo" deutet hier auf ein Handicap von Computern hin: Sie erzeugen keine wirklichen Zufallszahlen, sondern nur fast zufällige Werte. Trotzdem generieren /dev/random und /dev/urandom Zahlen, deren "Zufälligkeit" für die meisten kryptografischen Anwendungen auf einem PC ausreicht.
Der Zufallszahlengenerator des Kernels bedient sich beim Berechnen der Zahlenfolgen verschiedener interner Werte und angeschlossener Geräte, um eine geeignete Entropie der Zahlenverteilung zu erreichen. Entropie drückt das Maß der Zufälligkeit der in einer bestimmten Zeit erzeugten Zahlenfolge aus.
Anwendungen lesen aus den Dateien /dev/random und /dev/urandom einen Byte-Strom. Im Gegensatz zu /dev/urandom liefert /dev/random jedoch nur dann ein Byte, wenn eine genügend hohe Entropie erreicht wurde. Falls das nicht der Fall ist, blockiert das Gerät die Ausgabe, bis ausreichend Daten für eine hohe Entropie der Werte bereitstehen.
Da das mitunter eine Zeitlang dauert, erlaubt zwar der Non-Blocking-I/O-Modus das Abschalten dieser Blockade. Dadurch erhöht sich jedoch nicht die Ausgabegeschwindigkeit. Die von /dev/random gelieferten Bytes stellen die kryptografisch stärkeren Zufallszahlen zur Verfügung, und Sie dürfen diese guten Gewissens für lange Schlüsselfolgen und andere qualitativ anspruchsvolle Schlüsselmittel verwenden.
Die Datei /dev/urandom kümmert sich nicht um die vorhandene Entropie im Kernel-Generator. Eine niedrige Entropie blockiert nicht die Ausgabe von Bytes. Die Zufallszahlen machen ihrer Klasse Pseudo dann zwar alle Ehre, jedoch besteht nicht immer die Notwendigkeit, qualitative Höchstnoten zu erreichen.
Vor allem bei Anwendungen mit Schlüsseln geringer Halbwertszeit, wie beispielsweise Sitzungsschlüssel in einer Web Session, beim Auffüllen von Bereichen mit Rauschen oder Kurzzeitauthentisierungen in Challenge-Response-Verfahren reicht /dev/urandom bereits aus.
Einzelne Dateien löschen
Analog zum Löschen einer Festplatte löschen Sie mit dem Skript in Listing 2 prinzipiell auch eine einzelne Datei sicher von der Platte. Ganze Verzeichnisse rekursiv zu löschen schafft dieses Programm aber nicht. Bliebe nur der Weg, das Programm zu erweitern oder auf eine Alternative umzusteigen.
Anwendungen, wie zum Beispiel Wipe, bringen eine wesentlich größeren Komfort mit. Die meisten Distributionen enthalten enthalten die Software bereits, und mit dieser löschen Sie durch einen Aufruf sicher ganze Verzeichnisbäume:
wipe -r <I>Verzeichnis<I>
Allerdings arbeitet Wipe nur zuverlässig, wenn Sie den Schreib-Cache der Festplatte deaktivieren. Das Programm verlangt bei jeden Durchgang nach einem exklusiven Zugriff auf die Platte, wie auf der Web-Seite des Projektes [8] erläutert.
In der Regel erreichen Sie dies, indem Sie einen Kernel mit Mandantory Locking verwenden und das entsprechende Laufwerk unter Linux mit der Option mand von Mount einbinden. Erfüllt das System diese Voraussetzung nicht oder legt das Dateisystem die Dateien beim Überschreiben gar an anderer Stelle ab, nützt auch ein Programm wie Wipe wenig und wiegt in falscher Sicherheit.
Wipe verwendet Peter-Gutmann-Muster zum Erzeugen der Zeichenfolgen, die es zum Überschreiben nutzt. Dabei greift es auf die speziellen Dateien /dev/urandom und /dev/random zum Erzeugen der nötigen Entropie zurück. Um die Geschwindigkeit etwas anzukurbeln, nutzt Wipe zudem den Mersenne Twister Pseudo-Zufallszahlengenerator (PRNG).
Partitionen
Eine Festplatte verwaltet die enthaltenen Daten in 512 Byte großen Sektoren. Das von modernen Fesplatten dafür genutzte Logical Block Addressing (LBA) nummeriert die Sektoren der Reihe nach durch. Gleichzeitig steuert und überwacht die Festplatte eine große Zahl weiterer Parameter, die über Schnittstellen abfragbar sind.
Dazu gehören diverse Temperaturmessungen, vor allem aber auch schadhafte Sektoren. Diese markiert das Gerät und stellt sie nicht mehr zur Verfügung. Steigt diese Zahl aber sprunghaft an, steht wahrscheinlich der Totalausfall kurz bevor.
Diese als fehlerhaft markierten Sektoren liegen außerhalb des Zugriffs normaler Mitteln, sie könnten aber noch Daten enthalten. Mit speziellen Tools kommt ein Fachmann in Regel auch an diese Daten. Die Wahrscheinlichkeit, dass nun gerade hochsensible Daten in diesen Sektoren lagern, dürfte in dem meisten Fällen jedoch verhältnismäßig klein sein.
Auf einer Festplatte muss eine Partition enthalten sein, die wiederum ein bestimmte Anzahl von Sektoren zusammenfasst. Als Wegweiser zu den Partionen einer Festplatte fungiert die Partitionstabelle. Sie befindet sich auf dem ersten Sektor, dem Master Boot Record (MBR) genau ab Byte 446 und ist 64 Byte lang. Der MBR enthält zudem den Bootloader.
Das Betriebssystem verwaltet die Daten einer Partition über eine Art Datenbank, deren Aufbau manchmal einer Tabelle gleicht. So funktioniert zum Beispiel die File Allocation Table (FAT), von der es unter DOS und Windows diverse Varianten gab, um den größer werdenden Partitionen gerecht zu werden: FAT12, FAT16, FAT32.
Linux kennt eine große Zahl von Dateisystemen. Üblicherweise kommt die Typen Ext2, Ext3 oder ReiserFS zum Einsatz. Die beiden letztgenannten kommen einer echten Datenbank schon näher: Sie verwalten ihre Einträge sehr effektiv in Journalen und eröffnen gerade für größere Partionen viele Vorteile. Allerdings erschweren sie das Auffinden der gelöschten Daten ein wenig.
Dateisysteme fassen aus Performancegründen die Sektoren nochmals zu Clustern zusammen. Je nach Dateisystem und Größe der Partition fallen die Cluster unterschiedlich groß aus. Bei einer Cluster-Größe von vier KByte belegt eine Datei immer das ganzzahlig Vielfache davon, mindestens jedoch einen ganzen Cluster. Auch eine Datei mit nur einem einzigen Byte Inhalt belegt dann auf der Festplatte mindestens 4096 Byte.



