Tomb erzeugt und verwaltet Crypto-Container mithilfe bewährter Bordmittel wie Dm-crypt und LUKS. Daher funktioniert das Zsh-Skript auf so gut wie jedem Linux-System.
Aktuelle Distributionen machen es leicht, zumindest das Home-Verzeichnis per Verschlüsselung gegen unbefugte Einblicke abzusichern. Doch das Verschlüsseln kompletter Partitionen bringt auch Nachteile mit sich: Zum einen sollten Sie sich schon bei der Installation des Systems dazu entscheiden, zum anderen erschwert die Verschlüsselung die Datenrettung von einem nicht mehr lauffähigen System. Auch lässt sich eine verschlüsselte Partition nicht ohne Weiteres auf einen anderen Datenträger auslagern und mitnehmen. Daher greifen viele Anwender gern auf verschlüsselte Container zurück, wie sie sich beispielsweise mit Truecrypt [1] erzeugen und einbinden lassen – oder besser ließen.
Mit dem Support-Ende von Windows XP stellten die Truecrypt-Entwickler ihre Arbeit an der Software überraschend ein. Die Begründung lautete, dass Truecrypt nicht sicher sei, da es nicht behobene Sicherheitslücken enthalten könne. Das Truecrypt-Team empfahl Windows-Nutzern den Umstieg auf die in Windows integrierte Verschlüsselung Bitlocker. Für Linux-Anwender und kritisch denkende Nutzer generell stellt eine integrierte Windows-Verschlüsselung freilich keine Option dar. Mit Tomb [2] gibt es jedoch eine interessante Alternative für ehemalige Truecrypt-Nutzer, die komplett auf etablierten Linux-Standards aufsetzt.
Tomb installieren
Tomb nutzt für seine Arbeit das in den Device Mapper des Linux-Kernels integrierte Kryptografiemodul Dm-crypt [3] sowie dessen Erweiterung LUKS [4], das den verschlüsselten Bereich um einen Header mit Informationen zur Verschlüsselung ergänzt und so den Umgang mit den verschlüsselten Daten erleichtert. Auf diese Weise können Sie beispielsweise mehrere Schlüssel erzeugen und diese bei Bedarf ändern oder löschen, ohne dass Sie die verschlüsselten Daten komplett neu schreiben müssen. Als einfaches Shellskript fasst Tomb die unterschiedlichen Aktionen in einem kleinen Programm zusammen, ohne dass das Programm die Verschlüsselung neu erfinden müsste. Die nötigen Werkzeuge bringt eigentlich jedes Linux-System mit Kernel 2.6 oder neuer von Haus aus mit.
Obwohl sich das Programm auf wenige Abhängigkeiten beschränkt, finden Sie Tomb bisher meist nicht in den Paketquellen der gängigen Distributionen. Sie müssen es also in der Regel von Hand installieren, was jedoch nicht sonderlich schwerfällt. Tomb stellt dazu auf seiner Projektseite eine englischsprachige Installationsanleitung bereit [5]; unter Arch Linux finden Sie Tomb auch im AUR [6]. Zur Installation spielen Sie die nötigen Abhängigkeiten über die Paketverwaltung ein (Listing 1 zeigt das für Debian/Ubuntu), laden dann den Quellcode des Programms in Form der Datei Tomb-Version.tar.gz auf den Rechner [7] und entpacken das Archiv (Listing 2). Anschließend sorgt ein im Code-Verzeichnis ausgeführtes make install für die Installation des Programms im System.
Listing 1
$ sudo apt-get install zsh sudo gnupg cryptsetup pinentry-curses ### Für grafische Dialoge bei der Pin-Eingabe $ sudo apt-get install pinentry-gtk2 ### Gnome, Unity, XFCE $ sudo apt-get install pinentry-qt4 ### KDE ### Optionale Abhängigkeiten $ sudo apt-get install dcfldd qrencode steghide swish-e wipe
Listing 2
$ tar xf Tomb*.tar.gz $ cd Tomb* $ sudo make install $ tomb -v Tomb 2.1 - a strong and gentle undertaker for your secrets Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+ This is free software: you are free to change and redistribute it For the latest sourcecode go to <http://dyne.org/software/tomb> [...]
Das Grab schaufeln
Nach der Installation bereiten Sie erst einmal eine virtuelle Gruft für Ihre Daten vor, die später die zu verschlüsselnden Daten aufnehmen soll. Im Jargon des Programms gilt es, ein Grab zu schaufeln, in Englisch also “to dig a tomb”. Rufen Sie dazu Tomb aus einem Terminal heraus mit dem Kommando dig und der Option -s Größe in MByte sowie dem Namen des zu erstellenden Crypto-Containers auf (Listing 3). Die Größe muss mindestens 10 MByte betragen. Ein Tomb lässt sich nachträglich vergrößern, es zu verkleinern gelingt jedoch nicht. Das verschlüsselte Datengrab liegt nach dieser Aktion im aktuellen Verzeichnis.
Listing 3
$ tomb dig -s 100 geheim.grab tomb . Commanded to dig tomb geheim.grab tomb (*) Creating a new tomb in geheim.grab tomb . Generating geheim.grab of 100MiB 100 blocks (100Mb) written. 100+0 records in 100+0 records out -rw------- 1 username users 100M 11. Aug 16:23 geheim.grab tomb (*) Done digging secret tomb . Your tomb is not yet ready, you need to forge a key and lock it: tomb . tomb forge geheim.grab.key tomb . tomb lock geheim.grab -k geheim.grab.key
Allerdings bringt der Container ohne eine Schlüsseldatei noch wenig. Diese müssen Sie mit einem zweiten Aufruf von Tomb zusammen mit dem Kommando forge schmieden (Listing 4) – die entsprechenden Hinweise gibt Tomb am Ende des Dig-Kommandos aus. Für das Anlegen der Schlüsseldatei benötigt das Programm allerdings Root-Rechte, zudem dauert der Vorgang je nach Größe des Containers und Geschwindigkeit des Systems einige Zeit. Des Weiteren weigert sich Tomb, das Kommando bei einer aktiven Swap-Partition auszuführen (Listing 5): Es lässt sich dann nicht ausschließen, dass eigentlich zu verschlüsselnde Daten im unverschlüsselten Cache des Systems landen. Schalten Sie daher mit swapoff -a den Cache ab – oder erzwingen Sie mit der Option -f das Ausführen der Aktion.
Listing 4
$ tomb forge geheim.grab.key tomb . Commanded to forge key geheim.grab.key mkdir: das Verzeichnis ?/home/username/.gnupg? kann nicht angelegt werden: Die Datei existiert bereits tomb . Commanded to forge key geheim.grab.key with cipher algorithm AES256 tomb . This operation takes time, keep using this computer on other tasks, tomb . once done you will be asked to choose a password for your tomb. tomb . To make it faster you can move the mouse around. tomb . If you are on a server, you can use an Entropy Generation Daemon. 256 blocks (0Mb) written. 256+0 records in 256+0 records out tomb (*) Choose the password of your key: geheim.grab.key tomb . (You can also change it later using 'tomb passwd'.) [GNUPG:] PROGRESS need_entropy X 60 120 [...] [GNUPG:] PROGRESS need_entropy X 120 120 [GNUPG:] NEED_PASSPHRASE_SYM 9 3 2 [GNUPG:] BEGIN_ENCRYPTION 2 9 [GNUPG:] END_ENCRYPTION tomb . Key is valid. tomb . Done forging geheim.grab.key tomb (*) Your key is ready: -rw------- 1 username users 531 11. Aug 16:27 geheim.grab.key
Listing 5
$ tomb forge geheim.grab.key tomb . Commanded to forge key geheim.grab.key tomb . An active swap partition is detected... [sudo] Passwort für username: *********** tomb [W] This poses a security risk. tomb [W] You can deactivate all swap partitions using the command: tomb [W] swapoff -a tomb [W] [#163] I may not detect plain swaps on an encrypted volume. tomb [W] But if you want to proceed like this, use the -f (force) flag. tomb [E] Operation aborted. $ sudo swapoff -a
Den Schlüssel herumdrehen
Danach verschließen Sie das Datengrab mit der frisch erstellten Schlüsseldatei; auch dazu benötigt Tomb wieder Root-Rechte. Die entsprechende Option lautet schlicht lock, als Parameter übergeben Sie den Namen des Containers und – zusammen mit dem Schalter -k – die Schlüsseldatei (Listing 6). Gewürzt wird das Ganze mit einem zusätzlichen Passwort, das Tomb über GTK- oder Qt-Fenster oder bei einem System ohne X-Server mit Ncurses von Ihnen abfragt (Abbildung 1). Anschließend formatiert Tomb den Container gleich mit Ext4 als Dateisystem. Bei Bedarf ändern Sie das Passwort später mit tomb passwd geheim.grab.key.
Listing 6
$ tomb lock geheim.grab -k geheim.grab.key tomb . Commanded to lock tomb geheim.grab [sudo] Enter password for user username to gain superuser privileges tomb . Checking if the tomb is empty (we never step on somebody else's bones). tomb . Fine, this tomb seems empty. tomb . Key is valid. tomb . Locking using cipher: aes-xts-plain64:sha256 tomb . A password is required to use key geheim.grab.key tomb . Password OK. tomb (*) Locking geheim.grab with geheim.grab.key tomb . Formatting Luks mapped device. tomb . Formatting your Tomb with Ext3/Ext4 filesystem. tomb . Done locking secret using Luks dm-crypt aes-xts-plain64:sha256 tomb (*) Your tomb is ready in geheim.grab and secured with key geheim.grab.key

Abbildung 1: Beim Erzeugen oder Öffnen eines Crypto-Containers fragt Tomb das Passwort zur Schlüsseldatei bei Verfügbarkeit mit einem grafischen Fenster ab.
Damit liegt der Crypto-Container verschlossen und sicher auf der Festplatte; zum Beschreiben mit Daten müssen Sie ihn nun öffnen. Bemühen Sie dazu wieder Tomb im Terminal und weisen Sie das Programm diesmal mit open an, den Container mit der entsprechenden Schlüsseldatei aufzusperren (Listing 7). Auch hierzu benötigt Tomb wieder Root-Rechte und verweigert die Aktion, falls das Programm eine aktive Swap-Partition vorfindet. Schalten Sie diese daher wieder ab oder erzwingen Sie mit -f die Aktion.
Anschließend finden Sie die Daten des Containers in /run/media/Benutzer/Crypto-Container oder wohin Ihre Distribution sonst eingehängte Laufwerke einbindet. In diesem Verzeichnis arbeiten Sie ganz so, als ob es sich auf einem herkömmlichen Datenträger befände. Macht das verwendete System die Daten nur mit Root-Rechten zugänglich, ordnen Sie die Dateien im Container mit sudo chown -R $user: Pfad/zu/Container Ihrem Benutzerkonto zu. Bei Bedarf erhalten Sie zudem mit tomb list Informationen zu den gemounteten Tombs (Listing 8).
Listing 7
$ tomb open geheim.grab -k geheim.grab.key tomb . Commanded to open tomb geheim.grab tomb . Valid tomb file found: geheim.grab tomb . Key is valid. tomb . Mountpoint not specified, using default: /run/media/username/geheim tomb (*) Opening geheim on /run/media/username/geheim tomb . This tomb is a valid LUKS encrypted device. tomb . Cipher is "aes" mode "xts-plain64:sha256" hash "sha1" tomb . A password is required to use key geheim.grab.key tomb . Password OK. tomb (*) Success unlocking tomb geheim tomb . Checking filesystem via /dev/loop0 fsck von util-linux 2.26.2 secret: sauber, 11/25168 Dateien, 8831/100352 Blöcke tomb (*) Success opening geheim.grab on /run/media/username/geheim
Listing 8
$ tomb list tomb . [geheim] open on /run/media/username/geheim using (rw,nodev,noatime,data=ordered) tomb . [geheim] open since Do 13 Aug 2015 10:39:18 CEST tomb . [geheim] open by username from /dev/pts/0 on ubele tomb . [geheim] size 91M of which 22M (26%) is used: 63M free tomb . [geheim] hooks tomb.geheim.1439455158.loop0 on /home/username/.mozilla tomb . [geheim] hooks tomb.geheim.1439455158.loop0 on /home/username/.thunderbird tomb . [verbuddelt] open on /run/media/username/verbuddelt using (rw,nodev,noatime,data=ordered) tomb . [verbuddelt] open since Do 13 Aug 2015 10:43:02 CEST tomb . [verbuddelt] open by username from /dev/pts/0 on ubele tomb . [verbuddelt] size 91M of which 1,6M (2%) is used: 83M free
Benötigen Sie den geöffneten Crypto-Container nicht mehr, denn schließen Sie ihn mit tomb close wieder ab und hängen das Verzeichnis aus dem System aus. Speichern Sie dazu vorher alle aus dem Crypto-Verzeichnis geöffneten Daten und beenden die entsprechenden Anwendungen. Greifen noch Prozesse auf den Container zu oder soll es schnell gehen, dann schlagen Sie ohne Rücksicht auf Verluste mit tomb slam all die Tore aller geöffneten Tombs zu (Listing 9).
Listing 9
### Normalfall $ tomb close ### Beendet alle Anwendungen, die auf einen Tomb zugreifen ### und verriegelt sämtliche eingehängten Tombs $ tomb slam all
Bind-Hooks
Oft stecken wichtige Daten nicht nur in Dokumentenformaten wie TXT oder ODT, die sich leicht und gezielt in einen Crypto-Container verschieben ließen, sondern in den Einstellungen und Daten von Programmen, die die jeweilige Anwendung in Ihrem Programmordner organisiert. Das E-Mail-Programm Thunderbird etwa lagert alle E-Mails und Kontakte im Ordner ~/.thunderbird. Für Firefox gilt dasselbe, hier finden Sie die Bookmarks und andere die Privatsphäre betreffende Daten im Verzeichnis ~/.mozilla. Mithilfe von Bind-Hooks verlagern Sie solche Daten sehr bequem in ein verschlüsseltes Tomb.
Erzeugen Sie wie gewohnt das Tomb und binden Sie es ins System ein. Dann beenden Sie die gewünschten Anwendungen und verschieben deren Programmdaten aus Ihrem Home-Verzeichnis in das gemountete Tomb. Darin legen Sie mit einem beliebigen Editor eine neue Textdatei mit dem Namen bind-hooks an und tragen dort die zu verknüpfenden Verzeichnisse in Form einer einfachen Tabelle ein (Listing 10). An erster Stelle steht der relative Pfad im Tomb-Container, an zweiter Stelle folgt der relative Pfad im Home-Verzeichnis. Im einfachsten Fall wiederholen Sie daher einfach nur die Ordnernamen.
Schließen Sie nun das Tomb und erzeugen Sie die Konfigurationsordner in Ihrem Home-Verzeichnis neu. Ohne diese Ordner fehlt Tomb später ein Mountpoint. Starten Sie dazu die jeweiligen Anwendungen einfach neu oder legen Sie die Ordner im Home-Verzeichnis von Hand an. Beim nächsten Öffnen des Containers mountet Tomb nun die verschlüsselten Daten über diejenigen im normalen Home-Verzeichnis. So organisieren Sie im Handumdrehen zwei Datenbestände: einmal die unauffälligen privaten Mails und Bookmarks und – nach dem Einbinden des Tombs – automatisch die Daten, die nur Sie zu Gesicht bekommen sollten. Hängen Sie das Tomb wieder aus dem System aus, erscheinen automatisch wieder die unverfänglichen Daten – einen Neustart der Programme vorausgesetzt.
Listing 10
$ mv ~/.thunderbird /run/media/username/geheim $ mv ~/.mozilla /run/media/username/geheim $ cat /run/media/username/geheim/bind-hooks .thunderbird .thunderbird .mozilla .mozilla pfad/im/tomb pfad/im/home $ tomb close $ tomb open geheim.grab -k /tmp/geheim.grab.key $ mount | grep loop /dev/mapper/tomb.geheim.1439392070.loop0 on /run/media/username/geheim type ext4 (rw,nodev,noatime,data=ordered) /dev/mapper/tomb.geheim.1439392070.loop0 on /home/username/.thunderbird type ext4 (rw,nodev,noatime,data=ordered) /dev/mapper/tomb.geheim.1439392070.loop0 on /home/username/.mozilla type ext4 (rw,nodev,noatime,data=ordered)
Tomb in der Praxis
Im Alltag sollten Sie weder den Container geheim.grab noch den Schlüssel geheim.grab.key klar als verschlüsselte Daten zu erkennen geben. Zudem sollten Schlüssel und Schloss nicht auf demselben Datenträger liegen, erst recht nicht im selben Verzeichnis. Wählen Sie daher besser unauffällige Dateinamen und verschieben Sie den Schlüssel zum Beispiel auf einen USB-Stick oder lesen Sie ihn via SSH von einem anderen Rechner aus ein. Stellen Sie dem Tomb-Aufruf zudem ein Leerzeichen voran, erscheint das Kommando üblicherweise nicht in der Shell-History. Das Beispiel aus Listing 11 tarnt den Container als VDI-Datei für VirtualBox. Legen Sie diese Datei im entsprechenden Ordner ab, fällt sie kaum auf – security by obscurity. Beachten Sie jedoch, dass die Datei aufgrund des LUKS-Headers schnell als Crypto-Container zu identifizieren ist (Listing 12) und dass die Benennung der Dateien nach der Art Name.Erweiterung und Name.Erweiterung.key erhalten bleiben muss.
Listing 11
### Allgemein $ ssh nutzer@beispiel.net 'cat geheim.grab.key' | tomb open geheim.grab - ### Mit obskuren Dateinamen $ ssh nutzer@beispiel.net 'cat windows-7-disk1.vdi.key' | tomb open windows-7-disk1.vdi -
Listing 12
$ file windows-7-echt.vdi windows-7-disk1.vdi: VirtualBox Disk Image, major 1, minor 1 (<<< Oracle VM VirtualBox Disk Image >>>), 8589934592 bytes $ file geheim.grab geheim.grab: LUKS encrypted file, ver 1 [aes, xts-plain64:sha256, sha1] UUID: a0164b11-11e7-4115-b402-056a13d511ef $ file windows-7-disk1.vdi windows-7-disk1.vdi: LUKS encrypted file, ver 1 [aes, xts-plain64:sha256, sha1] UUID: a0164b11-11e7-4115-b402-056a13d511ef
Eine weitere Möglichkeit, den Schlüssel unauffällig und vor allem direkt auf dem eigenen System zu verstecken, wäre Steganografie [8]. Mit diesem Verfahren betten Sie Informationen unauffällig in andere Daten ein. Eine übliche Methode wäre zum Beispiel, die geheime Information in Bildern zu verstecken. Tomb unterstützt dieses Verfahren, sobald es auf dem System das Programm steghide als optionale Abhängigkeit findet. Mit dem Kommando bury “beerdigen” Sie den angegebenen Schlüssel in der ausgewählten Datei. Anschließend löschen Sie die Original-Schlüsseldatei geheim.grab.key vom Rechner (am besten mit wipe) oder verstecken sie zur Sicherheit zusätzlich auf einem USB-Stick gespeichert an einem unauffindbaren Ort. Bei Bedarf graben Sie den Schlüssel mit exhume aus der Bilddatei wieder aus (Listing 13).
Listing 13
$ tomb bury bild.jpg -k geheim.grab.key tomb . Key is valid. tomb (*) Encoding key -----BEGIN PGP MESSAGE----- Version: GnuPG v2 jA0ECQMClZs6+luhEoHm0sB6AUdMrLbJeTstE1ZVTeyj8KkTEx68ywMdMvVq9WLH [...] TvIdts3sqcABahEMbjKy8mW8T95v6x8tbnzFs6TRprAkhEhbdt1V3qZ5zBw= =BB4j -----END PGP MESSAGE----- inside image bild.jpg.jpg tomb . Please confirm the key password for the encoding tomb . A password is required to use key geheim.grab.key tomb . Password OK. Bette Standardeingabe in "bild.jpg" ein... fertig tomb (*) Tomb key encoded succesfully into image bild.jpg $ tomb exhume bild.jpg -k geheim.grab.key tomb . Trying to exhume a key out of image bild.jpg Extrahierte Daten wurden nach "geheim.grab.key" geschrieben. tomb (*) Key successfully exhumed to geheim.grab.key.
Trauen Sie einem elektronischem Speicher nicht, den Schlüssel sicher und dauerhaft zu verwahren, dann bietet Tomb noch eine weitere Möglichkeit an: Mit der Option engrave schreiben Sie die Schlüsseldatei in einen QR-Code, den Sie ausdrucken und abheften können (Listing 14). Bei Bedarf lesen Sie den Code mit einem Scanner oder einfacher mit einem Smartphone und einer entsprechenden App wieder ein und kopieren den decodierten Schlüssel auf Ihren Rechner. Dort öffnen Sie das verschlossene Tomb dann mit den üblichen Kommandos. Abbildung 2 zeigt den aus einem Key erzeugten QR-Code sowie den per Steganografie in ein unauffälliges Bild eingebetteten Key – in dem Fall sehen Sie, dass Sie nichts Besonderes sehen.
Listing 14
$ tomb engrave -k geheim.grab.key tomb [W] The key seems invalid or its format is not known by this version of Tomb. tomb [W] Attempting key recovery. tomb (*) Rendering a printable QRCode for key: geheim.grab.key tomb (*) Operation successful: -rw-r--r-- 1 username users 2,6K 12. Aug 15:50 geheim.grab.key.qr.png

Abbildung 2: Im Bild steckt der per Steganografie in den Bilddaten versteckte Schlüssel. Den QR-Code mit dem Tomb-Key könnten Sie ausdrucken und so offline speichern.
Fazit
Tomb macht den Umgang mit verschlüsselten Containern sehr leicht. Die durchdachte Syntax beschränkt sich im Alltag auf wenige Kommandos und Schalter. Der Ansatz, Linux-Standard-Tools zu verwenden, sorgt für eine bewährte Basis – so muss Tomb das Crypto-Rad nicht noch einmal neu erfinden. Der Teufel steckt allerdings, wie so oft beim Thema Verschlüsselung, im Detail: Die Trägheit des Nutzers durchkreuzt viel zu oft die guten Ansätze. Schlüssel und Container sollten Sie nicht auf demselben System vorhalten, lagern Sie den Schlüssel mindestens auf einen USB-Stick aus. Sorgen Sie außerdem dafür, dass die Shell-History nichts über den Gebrauch eines verschlüsselten Containers verrät.
In Bezug auf Portabilität gibt es ebenfalls Einschränkungen: Kernel 2.6 oder neuer finden Sie inzwischen auf fast jedem Linux-System. Allerdings benötigen Sie für die meisten Tomb-Aktionen, wie zum Beispiel schon zum Öffnen eines Tombs, administrative Rechte auf dem Rechner. So können Anwender, die zwar mit Linux arbeiten, nicht aber selbstständig das System verwalten, das Tool nicht verwenden. Nutzer mit Mac OS X oder Windows bleiben komplett außen vor. Die Entwickler deuten auf der Projektseite jedoch vorsichtig an, zumindest schon einmal Pläne für eine Windows-Version in der Tasche zu haben.

Abbildung 3: Zulucrypt kann nicht nur mit Dm-crypt und LUKS umgehen, sondern auch mit per Truecrypt und Veracrypt verschlüsselten Containern und Partitionen.
Manchen Anwendern dürfte eine grafische Oberfläche zum Einhängen und Verwalten von Tombs fehlen. Aktuell gibt es eine Reihe von entsprechenden Ansätzen, wie etwa ein kleines GTK-Programm für den System-Tray oder eine mit Python entwickelte GUI. Im Test konnten diese jedoch nicht überzeugen. Den besten Eindruck macht aktuell Zulucrypt [9], das zumindest den Angaben der Entwickler nach das Öffnen und Schließen von Tombs unterstützt (Abbildung 3). Neben Dm-crypt und LUKS beherrscht das Programm den Umgang mit per Truecrypt und Veracrypt verschlüsselten Containern und Partitionen. Mit ein wenig Mühe ließe sich Tomb allerdings auch in eigene Skripte integrieren und somit die Bedienung noch einfacher gestalten, ohne dass es grafische Programme bräuchte.
Infos
[1] Truecrypt: http://truecrypt.sourceforge.net
[2] Tomb: https://www.dyne.org/software/tomb
[3] Dm-crypt: https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt
[4] LUKS: https://gitlab.com/cryptsetup/cryptsetup
[5] Installationsanleitung: https://github.com/dyne/Tomb/blob/master/INSTALL.md
[6] Eintrag im AUR: https://aur.archlinux.org/packages/tomb
[7] Tomb herunterladen: https://files.dyne.org/tomb
[8] Wikipedia zu Steganografie: https://de.wikipedia.org/wiki/Steganographie
[9] Zulucrypt: http://mhogomchungu.github.io/zuluCrypt





